]> git.mxchange.org Git - flightgear.git/commitdiff
Add a lower-bound search function for fixes for GPS units with next-match database...
authordaveluff <daveluff>
Sun, 27 Nov 2005 20:19:00 +0000 (20:19 +0000)
committerdaveluff <daveluff>
Sun, 27 Nov 2005 20:19:00 +0000 (20:19 +0000)
src/Navaids/fixlist.cxx
src/Navaids/fixlist.hxx

index f22fa57fb709d56e2d27aa39d0329d02d727d596..608faf02e21c6429b262e3d642cffa6a57f0cfe7 100644 (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));
+    }
+}
index 20e7b8800e459a66f59b5942311bf89d922bc152..02e6e8a9681d65ffe104d529af5b79b3c91ca890 100644 (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); }
 };