refs #706, callsign to airline plus testing resulting in multiple smaller improvements (refs #707)

* added functions to callsign / callsign list
* used in aircraft matcher
* also resolve std.livery in matcher
* also allow to find aircraft ICAO designator ending with string (e.g. 737 for B737)
* renamed CAircraftMatcher::reverseLookup -> CAircraftMatcher::reverselLookupModel
* threadsafe isInRange (CAIrspaceMonitor)
This commit is contained in:
Klaus Basan
2016-07-09 18:29:37 +02:00
parent 19040af654
commit 64cee7fba8
16 changed files with 196 additions and 47 deletions

View File

@@ -52,6 +52,26 @@ namespace BlackMisc
});
}
CAircraftIcaoCodeList CAircraftIcaoCodeList::findEndingWith(const QString &icaoEnding) const
{
QString ends = icaoEnding.trimmed().toUpper();
if (ends.isEmpty()) { return CAircraftIcaoCodeList(); }
CAircraftIcaoCodeList icaosDesignator;
CAircraftIcaoCodeList icaosFamily;
for (const CAircraftIcaoCode &icao : *this)
{
if (icao.getDesignator().endsWith(ends))
{
icaosDesignator.push_back(icao);
}
else if (icao.getFamily().endsWith(ends))
{
icaosFamily.push_back(icao);
}
}
return icaosDesignator.isEmpty() ? icaosFamily : icaosDesignator;
}
CAircraftIcaoCodeList CAircraftIcaoCodeList::findByIataCode(const QString &iata) const
{
if (iata.isEmpty()) { return CAircraftIcaoCodeList(); }
@@ -221,6 +241,10 @@ namespace BlackMisc
// we have one exact match
if (codes.size() == 1) { return codes.front(); }
// now try to find as ending
codes = this->findEndingWith(d);
if (codes.size() == 1) { return codes.front(); }
// still empty, hopeless
if (codes.isEmpty()) { return icaoPattern; }