1
0
Fork 0

Add a lower-bound search function for fixes for GPS units with next-match database search capabilities

This commit is contained in:
daveluff 2005-11-27 20:19:00 +00:00
parent 5d522e4784
commit 808ac4784e
2 changed files with 28 additions and 5 deletions

View file

@ -120,3 +120,18 @@ bool FGFixList::query_and_offset( const string& ident, double lon, double lat,
*dist = s;
return true;
}
const FGFix* FGFixList::findFirstByIdent( const string& ident, bool exact)
{
fix_map_iterator itr;
if(exact) {
itr = fixlist.find(ident);
} else {
itr = fixlist.lower_bound(ident);
}
if(itr == fixlist.end()) {
return(NULL);
} else {
return(&(itr->second));
}
}

View file

@ -38,14 +38,13 @@ SG_USING_STD(map);
SG_USING_STD(vector);
SG_USING_STD(string);
// TODO - fix names may be globally non-unique. Allow for this.
typedef map < string, FGFix > fix_map_type;
typedef fix_map_type::iterator fix_map_iterator;
typedef fix_map_type::const_iterator fix_map_const_iterator;
class FGFixList {
// typedef map < string, FGFix, less<string> > fix_map_type;
typedef map < string, FGFix > fix_map_type;
typedef fix_map_type::iterator fix_map_iterator;
typedef fix_map_type::const_iterator fix_map_const_iterator;
fix_map_type fixlist;
public:
@ -58,12 +57,21 @@ public:
// query the database for the specified fix
bool query( const string& ident, FGFix *f );
// Find fix of requested type with closest exact or following ident
// (by ACSII values) to that supplied (ie. a lower-bound lookup).
// Supplying true for exact forces only exact matches to be returned (similar to above function)
// Returns NULL if no match found.
const FGFix* findFirstByIdent( const string& ident, bool exact = false );
// query the database for the specified fix, lon and lat are
// in degrees, elev is in meters
bool query_and_offset( const string& ident, double lon, double lat,
double elev, FGFix *f, double *heading,
double *dist );
// Return a pointer to the master fixlist
inline const fix_map_type* getFixList() { return(&fixlist); }
};