14 namespace swift::misc::aviation
43 const QString d(designator.trimmed().toUpper());
47 if (current == 100.0) {
return code; }
48 if (best < current) { found = code; }
78 const QString ends = icaoEnding.trimmed().toUpper();
87 return icaosDesignator.
isEmpty() ? icaosFamily : icaosDesignator;
106 return code.
getManufacturer().startsWith(manufacturer, Qt::CaseInsensitive);
149 if (codes.
size() < 2) {
return codes.
front(); }
151 return codes.
front();
156 if (designator.isEmpty()) {
return false; }
190 c.append(withCategory ? icao.getCombinedIcaoCategoryStringWithKey() : icao.getCombinedIcaoStringWithKey());
196 for (
const CAircraftIcaoCode &icao : icaosFamily) { c.append(icao.getCombinedFamilyStringWithKey()); }
205 c.append(icao.getCombinedIataStringWithKey());
255 if (m.isEmpty()) {
continue; }
275 if (counts.isEmpty())
return { {}, 0 };
276 const auto pair = *std::max_element(counts.keyValueBegin(), counts.keyValueEnd(),
277 [](
const auto &a,
const auto &b) { return a.second < b.second; });
278 return { pair.first, pair.second };
283 bool ignoreIncompleteAndDuplicates,
287 for (
const QJsonValue &value : array)
291 if (!categories.
isEmpty() && catId >= 0)
299 if (ignoreIncompleteAndDuplicates) {
continue; }
308 if (ignoreIncompleteAndDuplicates) {
continue; }
324 const int k = icaoPattern.
getDbKey();
355 if (codes.
isEmpty()) {
return icaoPattern; }
356 if (codes.
size() == 1) {
return codes.
front(); }
365 if (codes.
size() == 1) {
return codes.
front(); }
375 if (codes.
size() == 1) {
return codes.
front(); }
387 if (cm.
size() == 1) {
return cm.
front(); }
398 QString manufacturer;
401 if (code.getDesignator() != designator || code.getManufacturer() != manufacturer)
403 designator = code.getDesignator();
404 manufacturer = code.getManufacturer();
bool contains(const T &object) const
Return true if there is an element equal to given object. Uses the most efficient implementation avai...
size_type size() const
Returns number of elements in the sequence.
void sortBy(K1 key1, Keys... keys)
In-place sort by some particular key(s).
const_reference frontOrDefault() const
Access the first element, or a default-initialized value if the sequence is empty.
CSequence findBy(Predicate p) const
Return a copy containing only those elements for which a given predicate returns true.
int removeIf(Predicate p)
Remove elements for which a given predicate returns true.
void push_back(const T &value)
Appends an element at the end of the sequence.
reference front()
Access the first element.
bool isEmpty() const
Synonym for empty.
void sort(Predicate p)
In-place sort by a given comparator predicate.
Build a QSet more efficiently when calling insert() in a for loop.
void insert(const T &value)
Add an element to the set. Runs in amortized constant time.
Value object for aircraft categories.
bool isNull() const
Null category?
Value object encapsulating a list of ICAO codes.
Value object for ICAO classification.
bool hasModelDescription() const
Has model description?
bool hasFamily() const
Has family?
bool isIataSameAsDesignator() const
IATA code same as designator?
bool hasKnownDesignator() const
Has designator and designator is not "ZZZZ".
const QString & getFamily() const
Family (e.g. A350)
bool hasSpecialDesignator() const
Special designator.
bool matchesDesignatorOrIata(const QString &icaoOrIata) const
Matches ICAO or IATA code.
bool matchesDesignator(const QString &designator, int fuzzyMatch=-1, int *result=nullptr) const
Matches designator string?
bool matchesDesignatorIataOrFamily(const QString &icaoIataOrFamily) const
Matches ICAO, IATA, family?
bool hasIataCode() const
Has IATA code?
const QString & getDesignator() const
Get ICAO designator, e.g. "B737".
bool hasManufacturer() const
Manufacturer.
bool matchesIataCode(const QString &iata, int fuzzyMatch=-1, int *result=nullptr) const
Matches IATA string?
QString getDesignatorDbKey() const
Designator and DB key.
const QString & getModelDescription() const
Get IACO model description, e.g. "A-330-200".
const QString & getIataCode() const
IATA code.
bool hasValidDesignator() const
Valid aircraft designator?
bool isMilitary() const
Military?
static constexpr int DesignatorMinLength
designator length (min)
bool matchesAnyDescription(const QString &candidate) const
Matches any of the (unempty) descriptions.
int getRank() const
Ranking.
bool isDbDuplicate() const
Is DB duplicate? This means a redundant ICAO DB entry.
static CAircraftIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix=QString())
From our database JSON format.
bool isFamilySameAsDesignator() const
Family same as designator?
const CAircraftCategory & getCategory() const
Get category.
bool matchesFamily(const QString &family, int fuzzyMatch=-1, int *result=nullptr) const
Matches family?
void setCategory(const CAircraftCategory &category)
Set category.
static bool isValidDesignator(const QString &designator)
Valid designator?
bool hasCompleteData() const
All data set?
bool hasValidCombinedType() const
Combined type available?
const QString & getManufacturer() const
Get manufacturer, e.g. "Airbus".
Value object encapsulating a list of ICAO codes.
QSet< QString > allFamilies() const
All families, no duplicates.
CAircraftIcaoCodeList findByManufacturer(const QString &manufacturer) const
Find by manufacturer.
QSet< QString > allManufacturers(bool onlyKnownDesignators=true) const
All manufacturers.
void sortByRank()
Sort by rank.
static CAircraftIcaoCodeList fromDatabaseJson(const QJsonArray &array, const CAircraftCategoryList &categories, bool ignoreIncompleteAndDuplicates=true, CAircraftIcaoCodeList *inconsistent=nullptr)
From our database JSON format.
CAircraftIcaoCodeList findByInvalidDesignator() const
Ones with an invalid designator.
CAircraftIcaoCodeList groupByDesignatorAndManufacturer() const
Group by designator and manufacturer.
QStringList toCompleterStrings(bool withIataCodes=false, bool withFamily=false, bool withCategory=true, bool sort=true) const
For selection completion.
QSet< QString > allDesignatorsAndKey(bool noUnspecified=true) const
All ICAO codes and DB key, no duplicates.
CAircraftIcaoCodeList findWithFamily(bool removeWhenSameAsDesignator) const
Those with family.
CAircraftIcaoCodeList findWithIataCode(bool removeWhenSameAsDesignator) const
Those with IATA code.
CAircraftIcaoCodeList findByDescription(const QString &description) const
Find by model description.
CAircraftIcaoCodeList findByDesignator(const QString &designator, int fuzzySearch=-1) const
Find by designator.
CAircraftIcaoCodeList findByFamily(const QString &family, int fuzzySearch=-1) const
Find by family.
CAircraftIcaoCodeList findByMilitaryFlag(bool military) const
By military flag.
CAircraftIcaoCodeList()
Default constructor.
CAircraftIcaoCode findFirstByDesignatorAndRank(const QString &designator) const
Find by designator, then best match by rank.
CAircraftIcaoCodeList findMatchingByAnyDescription(const QString &description) const
Find matching by any model description.
void sortByDesignatorManufacturerAndRank()
Sort by designator first, then by manufacturer and rank.
void removeDuplicates()
Remove duplicates as marked by CAircraftIcaoCode::isDbDuplicate.
void sortByDesignatorAndRank()
Sort by designator first, then by rank.
QSet< QString > allDesignators(bool noUnspecified=true) const
All ICAO codes, no duplicates.
bool containsDesignator(const QString &designator) const
Contains designator?
CAircraftIcaoCode findBestFuzzyMatchOrDefault(const QString &designator, int cutoff=50) const
Find by designator.
void removeInvalidCombinedCodes()
Remove invalid combined codes.
CAircraftIcaoCode smartAircraftIcaoSelector(const CAircraftIcaoCode &icaoPattern) const
Best selection by given pattern, also searches IATA and family information.
CAircraftIcaoCodeList findByDesignatorOrIataCode(const QString &icaoOrIata) const
Find by ICAO/IATA code.
CAircraftIcaoCodeList findEndingWith(const QString &icaoEnding) const
Find code ending with string, e.g. "738" finds "B738".
CAircraftIcaoCodeList findByDesignatorIataOrFamily(const QString &icaoIataOrFamily) const
Find by ICAO/IATA code or family.
QPair< QString, int > maxCountManufacturer() const
Uses countManufacturers to find "most important" manufacturer.
CAircraftIcaoCodeList findByIataCode(const QString &iata, int fuzzySearch=-1) const
Find by IATA code.
CAircraftIcaoCodeList findByValidDesignator() const
Ones with a valid designator.
QMap< QString, int > countManufacturers() const
Count by manufacturer.
OBJ findByKey(KEYTYPE key, const OBJ ¬Found=OBJ()) const
Object with key, notFound otherwise.
int getDbKey() const
Get DB key.
bool hasValidDbKey() const
Has valid DB key.
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.