1
0
Fork 0

Experimental sorter for airports.

Sort by size (cumulative runway length).
This commit is contained in:
James Turner 2013-10-26 22:53:24 +01:00
parent ef1ec369db
commit c72ac27098
2 changed files with 48 additions and 1 deletions

View file

@ -889,6 +889,46 @@ FGAirport::commStationsOfType(FGPositioned::Type aTy) const
return result;
}
class AirportWithSize
{
public:
AirportWithSize(FGPositionedRef pos) :
_pos(pos),
_sizeMetric(0)
{
assert(pos->type() == FGPositioned::AIRPORT);
FGAirport* apt = static_cast<FGAirport*>(pos.get());
BOOST_FOREACH(FGRunway* rwy, apt->getRunwaysWithoutReciprocals()) {
_sizeMetric += static_cast<int>(rwy->lengthFt());
}
}
bool operator<(const AirportWithSize& other) const
{
return _sizeMetric < other._sizeMetric;
}
FGPositionedRef pos() const
{ return _pos; }
private:
FGPositionedRef _pos;
unsigned int _sizeMetric;
};
void FGAirport::sortBySize(FGPositionedList& airportList)
{
std::vector<AirportWithSize> annotated;
BOOST_FOREACH(FGPositionedRef p, airportList) {
annotated.push_back(AirportWithSize(p));
}
std::sort(annotated.begin(), annotated.end());
for (unsigned int i=0; i<annotated.size(); ++i) {
airportList[i] = annotated[i].pos();
}
}
// get airport elevation
double fgGetAirportElev( const std::string& id )
{

View file

@ -251,7 +251,14 @@ class FGAirport : public FGPositioned
* matches in a format suitable for use by a puaList.
*/
static char** searchNamesAndIdents(const std::string& aFilter);
/**
* Sort an FGPositionedList of airports by size (number of runways + length)
* this is meant to prioritise more important airports.
*/
static void sortBySize(FGPositionedList&);
flightgear::CommStationList commStationsOfType(FGPositioned::Type aTy) const;
flightgear::CommStationList commStations() const;