]> git.mxchange.org Git - flightgear.git/blob - src/ATC/CommStation.cxx
Avoid compiler warnings.
[flightgear.git] / src / ATC / CommStation.cxx
1 #include "CommStation.hxx"
2
3 #include <map>
4
5 namespace {
6
7 typedef std::multimap<int, flightgear::CommStation*> FrequencyMap;
8 static FrequencyMap static_frequencies;
9
10 typedef std::pair<FrequencyMap::const_iterator, FrequencyMap::const_iterator> FrequencyMapRange;
11
12 } // of anonymous namespace
13
14 namespace flightgear {
15
16 CommStation::CommStation(const std::string& name, FGPositioned::Type t, const SGGeod& pos, int range, int freq) :
17     FGPositioned(t, name, pos),
18     mRangeNM(range),
19     mFreqKhz(freq),
20     mAirport(NULL)
21 {
22     static_frequencies.insert(std::make_pair(freq, this));
23   
24     init(true);
25 }
26
27 void CommStation::setAirport(FGAirport* apt)
28 {
29     mAirport = apt;
30 }
31
32 double CommStation::freqMHz() const
33 {
34     return mFreqKhz / 100.0;
35 }
36
37 CommStation*
38 CommStation::findByFreq(int freqKhz, const SGGeod& pos, FGPositioned::Filter* filt)
39 {
40     FrequencyMapRange range = static_frequencies.equal_range(freqKhz);
41     FGPositioned::List results;
42     for (; range.first != range.second; ++range.first) {
43         CommStation* sta = range.first->second;
44         if (filt && !filt->pass(sta)) {
45             continue; // filtered out
46         }
47         
48         results.push_back(sta);
49     }
50     
51     if (results.empty()) {
52         return NULL;
53     }
54     
55     FGPositioned::sortByRange(results, pos);
56     return (CommStation*) results.front().ptr();
57 }
58
59 } // of namespace flightgear