Ref T129, some more utility functions for aviation value objects

* removed static variables from SELCAL
* more finder functions for airline ICAO list
* check for IATA code
* unify callsign now public
This commit is contained in:
Klaus Basan
2017-10-07 02:24:56 +02:00
committed by Mathew Sutcliffe
parent 686cb03170
commit 3fb2f88032
7 changed files with 56 additions and 16 deletions

View File

@@ -36,13 +36,19 @@ namespace BlackMisc
CAirlineIcaoCodeList CAirlineIcaoCodeList::findByIataCode(const QString &iata) const
{
if (iata.isEmpty()) { return CAirlineIcaoCodeList(); }
if (!CAirlineIcaoCode::isValidIataCode(iata)) { return CAirlineIcaoCodeList(); }
return this->findBy([&](const CAirlineIcaoCode & code)
{
return code.matchesIataCode(iata);
});
}
CAirlineIcaoCode CAirlineIcaoCodeList::findByUniqueIataCodeOrDefault(const QString &iata) const
{
const CAirlineIcaoCodeList codes = this->findByIataCode(iata);
return codes.size() == 1 ? codes.front() : CAirlineIcaoCode();
}
CAirlineIcaoCodeList CAirlineIcaoCodeList::findByDesignatorOrIataCode(const QString &designatorOrIata) const
{
if (designatorOrIata.isEmpty()) { return CAirlineIcaoCodeList(); }
@@ -61,6 +67,16 @@ namespace BlackMisc
});
}
CAirlineIcaoCode CAirlineIcaoCodeList::findByUniqueVDesignatorOrDefault(const QString &designator, bool preferOperatingAirlines) const
{
CAirlineIcaoCodeList codes = this->findByVDesignator(designator);
if (codes.size() > 1 && preferOperatingAirlines)
{
codes.removeIf(&CAirlineIcaoCode::isOperating, false);
}
return codes.size() == 1 ? codes.front() : CAirlineIcaoCode();
}
CAirlineIcaoCodeList CAirlineIcaoCodeList::findByVDesignatorOrIataCode(const QString &designatorOrIata) const
{
if (designatorOrIata.isEmpty()) { return CAirlineIcaoCodeList(); }
@@ -262,5 +278,12 @@ namespace BlackMisc
if (designator.isEmpty()) { return false; }
return this->contains(&CAirlineIcaoCode::getDesignator, designator.toUpper());
}
bool CAirlineIcaoCodeList::containsVDesignator(const QString &vDesignator) const
{
if (vDesignator.isEmpty()) { return false; }
if (vDesignator.length() < 4) { return this->containsDesignator(vDesignator); }
return this->contains(&CAirlineIcaoCode::getVDesignator, vDesignator.toUpper());
}
} // ns
} // ns