#include <Airports/runways.hxx>
#include <Navaids/NavDataCache.hxx>
+#include <Navaids/navrecord.hxx>
using std::string;
// FGNavList ------------------------------------------------------------------
+//------------------------------------------------------------------------------
FGNavList::TypeFilter::TypeFilter(const FGPositioned::Type type)
{
if (type == FGPositioned::INVALID) {
}
}
-
-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
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);
= 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;
}
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);
}
BOOST_FOREACH(PositionedID id, stations) {
- FGNavRecord* station = (FGNavRecord*) cache->loadById(id);
+ FGNavRecordRef station = FGPositioned::loadById<FGNavRecord>(id);
if (filter->pass(station)) {
return station;
}
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;
}
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) {
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];