]> git.mxchange.org Git - flightgear.git/blobdiff - src/ATC/CommStation.cxx
Autopilot: fix wrong warning for unknown node
[flightgear.git] / src / ATC / CommStation.cxx
index 45bc2cc08e10454238fb43323d084811e3a6af67..bdbb471145d801ac0205d55a85677907db558f72 100644 (file)
@@ -1,67 +1,36 @@
 #include "CommStation.hxx"
-
-#include <map>
-
-#include <Navaids/PositionedBinding.hxx>
-
-namespace {
-
-typedef std::multimap<int, flightgear::CommStation*> FrequencyMap;
-static FrequencyMap static_frequencies;
-
-typedef std::pair<FrequencyMap::const_iterator, FrequencyMap::const_iterator> FrequencyMapRange;
-
-} // of anonymous namespace
+#include <Airports/airport.hxx>
+#include <Navaids/NavDataCache.hxx>
 
 namespace flightgear {
 
-CommStation::CommStation(const std::string& name, FGPositioned::Type t, const SGGeod& pos, int range, int freq) :
-    FGPositioned(t, name, pos),
+CommStation::CommStation(PositionedID aGuid, const std::string& name, FGPositioned::Type t, const SGGeod& pos, int range, int freq) :
+    FGPositioned(aGuid, t, name, pos),
     mRangeNM(range),
     mFreqKhz(freq),
-    mAirport(NULL)
-{
-    static_frequencies.insert(std::make_pair(freq, this));
-  
-    init(true);
+    mAirport(0)
+{  
 }
 
-void CommStation::setAirport(FGAirport* apt)
+void CommStation::setAirport(PositionedID apt)
 {
     mAirport = apt;
 }
-
-double CommStation::freqMHz() const
+  
+FGAirportRef CommStation::airport() const
 {
-    return mFreqKhz / 100.0;
+  return FGPositioned::loadById<FGAirport>(mAirport);
 }
 
-PositionedBinding*
-CommStation::createBinding(SGPropertyNode* nd) const
+double CommStation::freqMHz() const
 {
-    return new CommStationBinding(this, nd);
+    return mFreqKhz / 1000.0;
 }
 
-CommStation*
+CommStationRef
 CommStation::findByFreq(int freqKhz, const SGGeod& pos, FGPositioned::Filter* filt)
 {
-    FrequencyMapRange range = static_frequencies.equal_range(freqKhz);
-    FGPositioned::List results;
-    for (; range.first != range.second; ++range.first) {
-        CommStation* sta = range.first->second;
-        if (filt && !filt->pass(sta)) {
-            continue; // filtered out
-        }
-        
-        results.push_back(sta);
-    }
-    
-    if (results.empty()) {
-        return NULL;
-    }
-    
-    FGPositioned::sortByRange(results, pos);
-    return (CommStation*) results.front().ptr();
+  return (CommStation*) NavDataCache::instance()->findCommByFreq(freqKhz, pos, filt).ptr();
 }
 
 } // of namespace flightgear