X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Fnavlist.hxx;h=1298eddb254d7e86ff39149e2a92ecdda4cd2740;hb=cc3d0221ea5fb1def56f53305560829fc66c2ab6;hp=1d6bea2c640297693f182761cfe093df38acd502;hpb=8b711a5782d94a0009d49ae390cc0caa2e8348b5;p=flightgear.git diff --git a/src/Navaids/navlist.hxx b/src/Navaids/navlist.hxx index 1d6bea2c6..1298eddb2 100644 --- a/src/Navaids/navlist.hxx +++ b/src/Navaids/navlist.hxx @@ -32,53 +32,73 @@ #include #include STL_STRING -#include "nav.hxx" +#include "navrecord.hxx" SG_USING_STD(map); SG_USING_STD(vector); SG_USING_STD(string); -class FGNavList { - // convenience types - typedef vector < FGNav* > nav_list_type; - typedef nav_list_type::iterator nav_list_iterator; - typedef nav_list_type::const_iterator nav_list_const_iterator; +// convenience types +typedef vector < FGNavRecord* > nav_list_type; +typedef nav_list_type::iterator nav_list_iterator; +typedef nav_list_type::const_iterator nav_list_const_iterator; - typedef map < int, nav_list_type > nav_map_type; - typedef nav_map_type::iterator nav_map_iterator; - typedef nav_map_type::const_iterator nav_map_const_iterator; +typedef map < int, nav_list_type > nav_map_type; +typedef nav_map_type::iterator nav_map_iterator; +typedef nav_map_type::const_iterator nav_map_const_iterator; - typedef map < string, nav_list_type > nav_ident_map_type; - +typedef map < string, nav_list_type > nav_ident_map_type; + + +class FGNavList { + + nav_list_type navlist; nav_map_type navaids; + nav_map_type navaids_by_tile; nav_ident_map_type ident_navaids; - // internal helper to pick a Nav item from a nav_list based on - // distance from the aircraft point - bool findNavFromList(const Point3D &aircraft, - nav_list_iterator current, - nav_list_iterator last, - FGNav *n); + // Given a point and a list of stations, return the closest one to + // the specified point. + FGNavRecord *findNavFromList( const Point3D &aircraft, + const nav_list_type &stations ); public: FGNavList(); ~FGNavList(); - // load the navaids and build the map - bool init( SGPath path ); + // initialize the nav list + bool init(); - // query the database for the specified frequency, lon and lat are - // in degrees, elev is in meters - bool query( double lon, double lat, double elev, double freq, FGNav *n ); + // add an entry + bool add( FGNavRecord *n ); + + // Query the database for the specified frequency. It is assumed + // that there will be multiple stations with matching frequencies + // so a position must be specified. Lon and lat are in degrees, + // elev is in meters. + FGNavRecord *findByFreq( double freq, double lon, double lat, double elev ); + + // Query the database for the specified frequency. It is assumed + // that there will be multiple stations with matching frequencies + // so a position must be specified. Lon and lat are in degrees, + // elev is in meters. + FGNavRecord *findByLoc( double lon, double lat, double elev ); // locate closest item in the DB matching the requested ident - bool findByIdent(const char* ident, double lon, double lat, FGNav *nav); -}; + FGNavRecord *findByIdent( const char* ident, const double lon, const double lat ); + // Given an Ident and optional freqency, return the first matching + // station. + FGNavRecord *findByIdentAndFreq( const char* ident, + const double freq = 0.0 ); -extern FGNavList *current_navlist; + // returns the closest entry to the give lon/lat/elev + FGNavRecord *findClosest( double lon_rad, double lat_rad, double elev_m ); + + inline nav_map_type get_navaids() const { return navaids; } +}; #endif // _FG_NAVLIST_HXX