X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Ffixlist.hxx;h=7377769712d79a02d3daa673798fe464e9967925;hb=bb2b03c7e392e107aeaf7dbc4eecc59064b28512;hp=968e90faf32de0c489355cdb01414fe269bcb2d9;hpb=b074559216ed83bc9dcc7edea6316cea3d590afc;p=flightgear.git diff --git a/src/Navaids/fixlist.hxx b/src/Navaids/fixlist.hxx index 968e90faf..737776971 100644 --- a/src/Navaids/fixlist.hxx +++ b/src/Navaids/fixlist.hxx @@ -2,7 +2,7 @@ // // Written by Curtis Olson, started April 2000. // -// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -26,25 +26,26 @@ #include -#include +#include #include #include -#include STL_STRING +#include -#include "fix.hxx" +class FGFix; -FG_USING_STD(map); -FG_USING_STD(vector); -FG_USING_STD(string); +using std::multimap; +using std::vector; +using std::string; +// fix names may be globally non-unique. Allow for this. +typedef multimap < 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 { +class FGIdentOrdering; // FIXME, currently declared in Airports/simple.hxx - // typedef map < string, FGFix, less > 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; +class FGFixList { fix_map_type fixlist; @@ -54,16 +55,28 @@ public: ~FGFixList(); // load the navaids and build the map - bool init( FGPath path ); + bool init( SGPath path ); - // query the database for the specified frequency, lon and lat are - // in degrees, elev is in meters - bool query( const string& ident, double lon, double lat, double elev, - FGFix *f, double *heading, double *dist); -}; + // query the database for the specified fix + bool query( const string& ident, FGFix* &f ); + const FGFix* search(const string& ident); -extern FGFixList *current_fixlist; + // 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, FGIdentOrdering* aOrder = NULL); + + // 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); } +}; #endif // _FG_FIXLIST_HXX