Moved smart selector functions to lists

This commit is contained in:
Klaus Basan
2015-10-14 19:56:31 +02:00
committed by Mathew Sutcliffe
parent 5e42aa0b95
commit 955b8bafea
12 changed files with 135 additions and 83 deletions

View File

@@ -82,5 +82,49 @@ namespace BlackMisc
return codes;
}
CAircraftIcaoCode CAircraftIcaoCodeList::smartAircraftIcaoSelector(const CAircraftIcaoCode &icaoPattern) const
{
if (icaoPattern.hasValidDbKey())
{
int k = icaoPattern.getDbKey();
CAircraftIcaoCode c(this->findByKey(k));
if (c.hasCompleteData()) { return c; }
}
CAircraftIcaoCodeList codes(*this); // copy and reduce
if (icaoPattern.hasKnownDesignator())
{
const QString d(icaoPattern.getDesignator());
codes = codes.findByDesignator(d);
if (codes.size() == 1) { return codes.front(); }
if (codes.isEmpty()) { return icaoPattern; }
codes.sortByRank();
// intentionally continue here
}
// further reduce by manufacturer
if (icaoPattern.hasManufacturer())
{
const QString m(icaoPattern.getManufacturer());
codes = codes.findByManufacturer(m);
if (codes.size() == 1) { return codes.front(); }
if (codes.isEmpty()) { return icaoPattern; }
// intentionally continue here
}
// lucky punch on description?
if (icaoPattern.hasModelDescription())
{
// do not affect codes here, it might return no results
const QString d(icaoPattern.getModelDescription());
CAircraftIcaoCodeList cm(codes.findByDescription(d));
if (cm.size() == 1) { return cm.front(); }
if (cm.size() > 1 && cm.size() < codes.size()) { return codes.front(); }
}
return codes.frontOrDefault(); // sorted by rank
}
} // namespace
} // namespace

View File

@@ -50,6 +50,9 @@ namespace BlackMisc
//! Find by designator, then best match by rank
CAircraftIcaoCode findFirstByDesignatorAndRank(const QString &designator);
//! Best selection by given pattern
CAircraftIcaoCode smartAircraftIcaoSelector(const CAircraftIcaoCode &icaoPattern) const;
//! Sort by rank
void sortByRank();

View File

@@ -26,6 +26,19 @@ namespace BlackMisc
});
}
CAirlineIcaoCode CAirlineIcaoCodeList::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const
{
if (icaoPattern.hasValidDbKey())
{
return this->findByKey(icaoPattern.getDbKey(), icaoPattern);
}
if (!icaoPattern.hasValidDesignator()) { return CAirlineIcaoCode(); }
//! \todo smart airline selector, further criteria
return icaoPattern;
}
CAirlineIcaoCode CAirlineIcaoCodeList::findByVDesignator(const QString &designator)
{
if (CAirlineIcaoCode::isValidAirlineDesignator(designator)) { return CAirlineIcaoCode(); }

View File

@@ -43,6 +43,9 @@ namespace BlackMisc
//! Not unique because of virtual airlines
CAirlineIcaoCodeList findByDesignator(const QString &designator);
//! Best selection by given pattern
CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const;
//! Find by v-designator, this should be unique
CAirlineIcaoCode findByVDesignator(const QString &designator);

View File

@@ -51,5 +51,32 @@ namespace BlackMisc
});
}
CLivery CLiveryList::smartLiverySelector(const CLivery &liveryPattern) const
{
// first try on id, that would be perfect
if (liveryPattern.hasValidDbKey())
{
int k = liveryPattern.getDbKey();
CLivery l(this->findByKey(k));
if (l.hasCompleteData()) { return l; }
}
// by combined code
if (liveryPattern.hasCombinedCode())
{
QString cc(liveryPattern.getCombinedCode());
CLivery l(this->findByCombinedCode(cc));
if (l.hasCompleteData()) { return l; }
}
if (liveryPattern.hasValidAirlineDesignator())
{
QString icao(liveryPattern.getAirlineIcaoCodeDesignator());
CLivery l(this->findByAirlineIcaoDesignatorStdLivery(icao));
if (l.hasCompleteData()) { return l; }
}
return CLivery();
}
} // namespace
} // namespace

View File

@@ -44,6 +44,10 @@ namespace BlackMisc
//! Find livery by combined code
CLivery findByCombinedCode(const QString &combinedCode) const;
//! Find
CLivery smartLiverySelector(const CLivery &liveryPattern) const;
};
} //namespace
} // namespace

View File

@@ -30,5 +30,19 @@ namespace BlackMisc
return CDistributor();
}
CDistributor CDistributorList::smartDistributorSelector(const CDistributor &distributorPattern)
{
if (distributorPattern.hasValidDbKey())
{
QString k(distributorPattern.getDbKey());
CDistributor d(this->findByKey(k));
if (d.hasCompleteData()) { return d; }
// more lenient search
return this->findByIdOrAlias(k);
}
return CDistributor();
}
} // namespace
} // namespace

View File

@@ -43,6 +43,8 @@ namespace BlackMisc
//! Find by id or alias
CDistributor findByIdOrAlias(const QString &name);
//! Best match by given pattern
CDistributor smartDistributorSelector(const CDistributor &distributorPattern);
};
} //namespace
} // namespace