diff --git a/src/blackmisc/aviation/aircrafticaocodelist.cpp b/src/blackmisc/aviation/aircrafticaocodelist.cpp index a78175ea6..862090ca5 100644 --- a/src/blackmisc/aviation/aircrafticaocodelist.cpp +++ b/src/blackmisc/aviation/aircrafticaocodelist.cpp @@ -264,6 +264,42 @@ namespace BlackMisc return c; } + QMap CAircraftIcaoCodeList::countManufacturers() const + { + QMap count; + for (const CAircraftIcaoCode &icao : *this) + { + if (!icao.hasManufacturer()) continue; + const QString m(icao.getManufacturer()); + if (count.contains(m)) + { + count[m]++; + } + else + { + count[m] = 1; + } + } + return count; + } + + QPair CAircraftIcaoCodeList::maxCountManufacturer() const + { + if (this->isEmpty()) return QPair("", 0); + const QMap counts(countManufacturers()); + QPair max; + for (const QString &m : counts.keys()) + { + const int mv = counts[m]; + if (mv > max.second) + { + max.first = m; + max.second = mv; + } + } + return max; + } + CAircraftIcaoCodeList CAircraftIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates) { CAircraftIcaoCodeList codes; @@ -361,7 +397,7 @@ namespace BlackMisc { CAircraftIcaoCodeList copy(*this); copy.sortByDesignatorManufacturerAndRank(); - CAircraftIcaoCodeList grouped; + CAircraftIcaoCodeList grouped; // will contain the entries with the best rank QString designator; QString manufacturer; for (const CAircraftIcaoCode &code : as_const(copy)) diff --git a/src/blackmisc/aviation/aircrafticaocodelist.h b/src/blackmisc/aviation/aircrafticaocodelist.h index 494486cea..821630979 100644 --- a/src/blackmisc/aviation/aircrafticaocodelist.h +++ b/src/blackmisc/aviation/aircrafticaocodelist.h @@ -124,6 +124,12 @@ namespace BlackMisc //! All manufacturers QSet allManufacturers(bool onlyKnownDesignators = true) const; + //! Count by manufacturer + QMap countManufacturers() const; + + //! Uses countManufacturers to find "most important" manufacturer + QPair maxCountManufacturer() const; + //! From our database JSON format static CAircraftIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates = true); };