Add a lower-bound search function for fixes for GPS units with next-match database search capabilities
This commit is contained in:
parent
5d522e4784
commit
808ac4784e
2 changed files with 28 additions and 5 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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); }
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue