X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNavaids%2Fnavlist.cxx;h=822391e04d79d38cd928566f07c4c023decce286;hb=b30408b862ae0a300ff32ef90b20cdde9efdd499;hp=d63b958f648616da0b04f03947e75cf6a455966b;hpb=bf0dbb22d0c0e1a410892c640cf3202523f2c95a;p=flightgear.git diff --git a/src/Navaids/navlist.cxx b/src/Navaids/navlist.cxx index d63b958f6..822391e04 100644 --- a/src/Navaids/navlist.cxx +++ b/src/Navaids/navlist.cxx @@ -37,6 +37,7 @@ #include #include +#include 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 @@ -165,8 +185,9 @@ FGNavList::TypeFilter* FGNavList::carrierFilter() 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(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(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(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(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(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(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];