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);
|
||||
}
|
||||
|
||||
// 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
|
||||
FGAirport* FGAirportList::search(double lon_deg, double lat_deg, double max_range)
|
||||
{
|
||||
|
|
|
@ -146,15 +146,6 @@ public:
|
|||
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 airport_map::iterator airport_map_iterator;
|
||||
typedef airport_map::const_iterator const_airport_map_iterator;
|
||||
|
@ -186,14 +177,6 @@ public:
|
|||
// Returns NULL if unsucessfull.
|
||||
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
|
||||
// (currently a linear inefficient search so it's probably not
|
||||
// best to use this at runtime.) An FGAirportSearchFilter class
|
||||
|
@ -212,11 +195,6 @@ public:
|
|||
*/
|
||||
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
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
{
|
||||
public:
|
||||
|
|
Loading…
Reference in a new issue