mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 01:05:34 +08:00
Moved smart selector functions to lists
This commit is contained in:
committed by
Mathew Sutcliffe
parent
5e42aa0b95
commit
955b8bafea
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user