Remove the FGIdentOrdering cruft from FGAirport; now handled by FGPositioned.
This commit is contained in:
parent
059f2e6a8e
commit
335584e29c
3 changed files with 0 additions and 117 deletions
|
@ -344,52 +344,6 @@ FGAirport* FGAirportList::search( const string& id)
|
||||||
return (itr == airports_by_id.end() ? NULL : itr->second);
|
return (itr == airports_by_id.end() ? NULL : itr->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
// wrap an FGIdentOrdering in an STL-compatible functor. not the most
|
|
||||||
// efficent / pretty thing in the world, but avoids template nastiness in the
|
|
||||||
// headers, and we're only doing O(log(N)) comparisoms per search
|
|
||||||
class orderingFunctor
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
orderingFunctor(FGIdentOrdering* aOrder) :
|
|
||||||
mOrdering(aOrder)
|
|
||||||
{ assert(aOrder); }
|
|
||||||
|
|
||||||
bool operator()(const airport_map::value_type& aA, const std::string& aB) const
|
|
||||||
{
|
|
||||||
return mOrdering->compare(aA.first,aB);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator()(const std::string& aA, const airport_map::value_type& aB) const
|
|
||||||
{
|
|
||||||
return mOrdering->compare(aA, aB.first);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator()(const airport_map::value_type& aA, const airport_map::value_type& aB) const
|
|
||||||
{
|
|
||||||
return mOrdering->compare(aA.first, aB.first);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
FGIdentOrdering* mOrdering;
|
|
||||||
};
|
|
||||||
|
|
||||||
const FGAirport* FGAirportList::findFirstById(const std::string& aIdent, FGIdentOrdering* aOrder)
|
|
||||||
{
|
|
||||||
airport_map_iterator itr;
|
|
||||||
if (aOrder) {
|
|
||||||
orderingFunctor func(aOrder);
|
|
||||||
itr = std::lower_bound(airports_by_id.begin(),airports_by_id.end(), aIdent, func);
|
|
||||||
} else {
|
|
||||||
itr = airports_by_id.lower_bound(aIdent);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itr == airports_by_id.end()) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itr->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
// search for the airport nearest the specified position
|
// search for the airport nearest the specified position
|
||||||
FGAirport* FGAirportList::search(double lon_deg, double lat_deg, double max_range)
|
FGAirport* FGAirportList::search(double lon_deg, double lat_deg, double max_range)
|
||||||
{
|
{
|
||||||
|
|
|
@ -146,15 +146,6 @@ public:
|
||||||
virtual bool pass(FGAirport*) { return true; }
|
virtual bool pass(FGAirport*) { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class FGIdentOrdering {
|
|
||||||
public:
|
|
||||||
virtual ~FGIdentOrdering()
|
|
||||||
{ ; }
|
|
||||||
|
|
||||||
virtual bool compare(const std::string& aA, const std::string& aB) const
|
|
||||||
{ return aA < aB; }
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::map < std::string, FGAirport* > airport_map;
|
typedef std::map < std::string, FGAirport* > airport_map;
|
||||||
typedef airport_map::iterator airport_map_iterator;
|
typedef airport_map::iterator airport_map_iterator;
|
||||||
typedef airport_map::const_iterator const_airport_map_iterator;
|
typedef airport_map::const_iterator const_airport_map_iterator;
|
||||||
|
@ -186,14 +177,6 @@ public:
|
||||||
// Returns NULL if unsucessfull.
|
// Returns NULL if unsucessfull.
|
||||||
FGAirport* search( const std::string& id );
|
FGAirport* search( const std::string& id );
|
||||||
|
|
||||||
// Search for the next airport in ASCII sequence to the supplied id.
|
|
||||||
// eg. id = "KDC" or "KDCA" would both return "KDCA".
|
|
||||||
// NOTE: Numbers come prior to A-Z in ASCII sequence so id = "LD" would return "LD57", not "LDDP"
|
|
||||||
// optional ordering can make letters come before numbers
|
|
||||||
// Implementation assumes airport codes are unique.
|
|
||||||
// Returns NULL if unsucessfull.
|
|
||||||
const FGAirport* findFirstById(const std::string& aIdent, FGIdentOrdering* aOrder = NULL);
|
|
||||||
|
|
||||||
// search for the airport closest to the specified position
|
// search for the airport closest to the specified position
|
||||||
// (currently a linear inefficient search so it's probably not
|
// (currently a linear inefficient search so it's probably not
|
||||||
// best to use this at runtime.) An FGAirportSearchFilter class
|
// best to use this at runtime.) An FGAirportSearchFilter class
|
||||||
|
@ -212,11 +195,6 @@ public:
|
||||||
*/
|
*/
|
||||||
const FGAirport *getAirport( unsigned int index ) const;
|
const FGAirport *getAirport( unsigned int index ) const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a pointer to the raw airport list
|
|
||||||
*/
|
|
||||||
inline const airport_list* getAirportList() { return (&airports_array); }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the specified airport record as not having metar
|
* Mark the specified airport record as not having metar
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1035,55 +1035,6 @@ void DCLGPS::CreateFlightPlan(GPSFlightPlan* fp, vector<string> ids, vector<GPSW
|
||||||
|
|
||||||
/***************************************/
|
/***************************************/
|
||||||
|
|
||||||
/**
|
|
||||||
* STL functor for use with algorithms. This comapres strings according to
|
|
||||||
* the KLN-89's notion of ordering, with digits after letters.
|
|
||||||
* Also implements FGIdentOrdering so it can be passed into the various list
|
|
||||||
* find helpers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class stringOrderKLN89 : public FGIdentOrdering
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool operator()(const gps_waypoint_map::value_type& aA, const std::string& aB) const
|
|
||||||
{
|
|
||||||
return compare(aA.first, aB);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator()(const std::string& aS1, const std::string& aS2) const
|
|
||||||
{
|
|
||||||
return compare(aS1, aS2);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool compare(const std::string& aS1, const std::string& aS2) const
|
|
||||||
{
|
|
||||||
if (aS1.empty()) return true;
|
|
||||||
if (aS2.empty()) return false;
|
|
||||||
|
|
||||||
char* a = (char*) aS1.c_str();
|
|
||||||
char* b = (char*) aS2.c_str();
|
|
||||||
|
|
||||||
for ( ; *a && *b; ++a, ++b) {
|
|
||||||
if (*a == *b) continue;
|
|
||||||
|
|
||||||
bool aDigit = isdigit(*a);
|
|
||||||
bool bDigit = isdigit(*b);
|
|
||||||
|
|
||||||
if (aDigit == bDigit) {
|
|
||||||
return (*a < *b); // we already know they're not equal
|
|
||||||
}
|
|
||||||
|
|
||||||
// digit-ness differs
|
|
||||||
if (aDigit) return false; // s1 = KS9 goes *after* s2 = KSA
|
|
||||||
assert(bDigit);
|
|
||||||
return true; // s1 = KSF, s2 = KS5, s1 is indeed < s2
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*b) return true; // *a == 0, s2 is longer
|
|
||||||
return false; // s1 is longer, or strings are equal
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class DCLGPSFilter : public FGPositioned::Filter
|
class DCLGPSFilter : public FGPositioned::Filter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in a new issue