refs #825, utility functions

* allow to prefer color liveries (idea: when no airline is found, a neutral livery looks better)
* pick randomly among equal scores
This commit is contained in:
Klaus Basan
2016-12-07 03:01:18 +01:00
parent 78099c0ebe
commit 3b25781a06
6 changed files with 36 additions and 10 deletions

View File

@@ -58,6 +58,16 @@ namespace BlackMisc
return this->contains(&CAircraftModel::getCallsign, callsign);
}
bool CAircraftModelList::containsCombinedType(const QString &combinedType) const
{
if (combinedType.isEmpty()) { return false; }
const QString ct(combinedType.toUpper().trimmed());
return this->containsBy([ & ](const CAircraftModel & model)
{
return model.getAircraftIcaoCode().getCombinedType() == ct;
});
}
bool CAircraftModelList::containsModelsWithAircraftAndAirlineDesignator(const QString &aircraftDesignator, const QString &airlineDesignator) const
{
return this->contains(&CAircraftModel::getAircraftIcaoCodeDesignator, aircraftDesignator, &CAircraftModel::getAirlineIcaoCodeDesignator, airlineDesignator);
@@ -531,9 +541,12 @@ namespace BlackMisc
ScoredModels CAircraftModelList::scoreFull(const CAircraftModel &remoteModel, bool ignoreZeroScores) const
{
ScoredModels scoreMap;
// prefer colors if there is no airline
const bool hasAirlineDesignator = remoteModel.hasAirlineDesignator() && this->contains(&CAircraftModel::getAirlineIcaoCodeDesignator, remoteModel.getAirlineIcaoCodeDesignator());
const bool preferColorLiveries = !hasAirlineDesignator;
for (const CAircraftModel &model : *this)
{
const int score = model.calculateScore(remoteModel);
const int score = model.calculateScore(remoteModel, preferColorLiveries);
if (ignoreZeroScores && score < 1) { continue; }
scoreMap.insertMulti(score, model);
}