]> git.mxchange.org Git - flightgear.git/blobdiff - src/Navaids/navlist.cxx
Interim windows build fix
[flightgear.git] / src / Navaids / navlist.cxx
index d63b958f648616da0b04f03947e75cf6a455966b..9b0c911dee50c44c274532495c78113a9252fb5d 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <Airports/runways.hxx>
 #include <Navaids/NavDataCache.hxx>
+#include <Navaids/navrecord.hxx>
 
 using std::string;
 
@@ -91,6 +92,7 @@ bool navidUsable(FGNavRecord* aNav, const SGGeod &aircraft)
 // FGNavList ------------------------------------------------------------------
 
 
+//------------------------------------------------------------------------------
 FGNavList::TypeFilter::TypeFilter(const FGPositioned::Type type)
 {
   if (type == FGPositioned::INVALID) {
@@ -101,14 +103,32 @@ FGNavList::TypeFilter::TypeFilter(const FGPositioned::Type type)
   }
 }
 
-
-FGNavList::TypeFilter::TypeFilter(const FGPositioned::Type minType,
-                                  const FGPositioned::Type maxType) :
+//------------------------------------------------------------------------------
+FGNavList::TypeFilter::TypeFilter( const FGPositioned::Type minType,
+                                   const FGPositioned::Type maxType ):
   _mintype(minType),
   _maxtype(maxType)
 {
 }
 
+//------------------------------------------------------------------------------
+bool FGNavList::TypeFilter::fromTypeString(const std::string& type)
+{
+  FGPositioned::Type t;
+  if(      type == "any"  ) t = FGPositioned::INVALID;
+  else if( type == "fix"  ) t = FGPositioned::FIX;
+  else if( type == "vor"  ) t = FGPositioned::VOR;
+  else if( type == "ndb"  ) t = FGPositioned::NDB;
+  else if( type == "ils"  ) t = FGPositioned::ILS;
+  else if( type == "dme"  ) t = FGPositioned::DME;
+  else if( type == "tacan") t = FGPositioned::TACAN;
+  else                      return false;
+
+  _mintype = _maxtype = t;
+
+  return true;
+}
+
 /**
  * Filter returning Tacan stations. Checks for both pure TACAN stations
  * but also co-located VORTACs. This is done by searching for DMEs whose
@@ -159,14 +179,15 @@ FGNavList::TypeFilter* FGNavList::tacanFilter()
   return &tf;
 }
 
-FGNavList::TypeFilter* FGNavList::carrierFilter()
+FGNavList::TypeFilter* FGNavList::mobileTacanFilter()
 {
   static TypeFilter tf(FGPositioned::MOBILE_TACAN);
   return &tf;
 }
 
-FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
-                                   TypeFilter* filter)
+FGNavRecordRef FGNavList::findByFreq( double freq,
+                                      const SGGeod& position,
+                                      TypeFilter* filter )
 {
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
   int freqKhz = static_cast<int>(freq * 100 + 0.5);
@@ -181,7 +202,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
     = FG_NAV_MAX_RANGE*SG_NM_TO_METER*FG_NAV_MAX_RANGE*SG_NM_TO_METER;
     
   BOOST_FOREACH(PositionedID id, stations) {
-    FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+    FGNavRecordRef station = FGPositioned::loadById<FGNavRecord>(id);
     if (!filter->pass(station)) {
       continue;
     }
@@ -202,7 +223,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
   return NULL;
 }
 
-FGNavRecord *FGNavList::findByFreq( double freq, TypeFilter* filter)
+FGNavRecordRef FGNavList::findByFreq(double freq, TypeFilter* filter)
 {
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
   int freqKhz = static_cast<int>(freq * 100 + 0.5);
@@ -212,7 +233,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, TypeFilter* filter)
   }
 
   BOOST_FOREACH(PositionedID id, stations) {
-    FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+    FGNavRecordRef station = FGPositioned::loadById<FGNavRecord>(id);
     if (filter->pass(station)) {
       return station;
     }
@@ -231,7 +252,7 @@ nav_list_type FGNavList::findAllByFreq( double freq, const SGGeod& position,
   PositionedIDVec ids(cache->findNavaidsByFreq(freqKhz, position, filter));
   
   BOOST_FOREACH(PositionedID id, ids) {
-    FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+    FGNavRecordRef station = FGPositioned::loadById<FGNavRecord>(id);
     if (!filter->pass(station)) {
       continue;
     }
@@ -248,7 +269,7 @@ nav_list_type FGNavList::findByIdentAndFreq(const string& ident, const double fr
   nav_list_type reply;
   int f = (int)(freq*100.0 + 0.5);
   
-  FGPositioned::List stations = FGPositioned::findAllWithIdent(ident, filter);
+  FGPositionedList stations = FGPositioned::findAllWithIdent(ident, filter);
   BOOST_FOREACH(FGPositionedRef ref, stations) {
     FGNavRecord* nav = static_cast<FGNavRecord*>(ref.ptr());
     if ( f <= 0.0 || nav->get_freq() == f) {
@@ -302,7 +323,7 @@ bool FGTACANList::add( FGTACANRecord *c )
 FGTACANRecord *FGTACANList::findByChannel( const string& channel )
 {
     const tacan_list_type& stations = ident_channels[channel];
-    SG_LOG( SG_INSTR, SG_DEBUG, "findByChannel " << channel<< " size " << stations.size() );
+    SG_LOG( SG_NAVAID, SG_DEBUG, "findByChannel " << channel<< " size " << stations.size() );
 
     if (!stations.empty()) {
         return stations[0];