// sometimes there can be duplicated idents. If a freq is
// specified, use it to refine the search.
int f = (int)(freq*100.0 + 0.5);
- for ( unsigned int i = 0; i < stations.size(); ++i ) {
- if ( f == stations[i]->get_freq() ) {
- return stations[i];
+ nav_list_const_iterator it, end = stations.end();
+ for ( it = stations.begin(); it != end; ++it ) {
+ if ( f == (*it)->get_freq() ) {
+ return (*it);
}
}
- } else if (stations.size()) {
+ } else if (!stations.empty()) {
return stations[0];
}
double min_dist
= FG_NAV_MAX_RANGE*SG_NM_TO_METER*FG_NAV_MAX_RANGE*SG_NM_TO_METER;
+ nav_list_const_iterator it;
+ nav_list_const_iterator end = stations.end();
// find the closest station within a sensible range (FG_NAV_MAX_RANGE)
- for ( unsigned int i = 0; i < stations.size(); ++i ) {
+ for ( it = stations.begin(); it != end; ++it ) {
+ FGNavRecord *station = *it;
// cout << "testing " << current->get_ident() << endl;
- d2 = distSqr(stations[i]->get_cart(), aircraft);
+ d2 = distSqr(station->get_cart(), aircraft);
// cout << " dist = " << sqrt(d)
// << " range = " << current->get_range() * SG_NM_TO_METER
// placed from each other. (Do the expensive check only for
// directional atennas and only when there is a chance it is
// the closest station.)
+ int type = station->get_type();
if ( d2 < min_dist &&
- (stations[i]->get_type() == 4 || stations[i]->get_type() == 5 ||
- stations[i]->get_type() == 6 || stations[i]->get_type() == 12 ||
- stations[i]->get_type() == 13) )
+ (type == 4 || type == 5 || type == 6 || type == 12 || type == 13) )
{
double hdg_deg = 0.0;
- if ( stations[i]->get_type() == 4 || stations[i]->get_type() == 5 ){
- hdg_deg = stations[i]->get_multiuse();
- } else if ( stations[i]->get_type() == 6 ) {
- int tmp = (int)(stations[i]->get_multiuse() / 1000.0);
- hdg_deg = stations[i]->get_multiuse() - (tmp * 1000);
- } else if ( stations[i]->get_type() == 12 ||
- stations[i]->get_type() == 13 ) {
+ if ( type == 4 || type == 5 ){
+ hdg_deg = station->get_multiuse();
+
+ } else if ( type == 6 ) {
+ int tmp = (int)(station->get_multiuse() / 1000.0);
+ hdg_deg = station->get_multiuse() - (tmp * 1000);
+
+ } else if ( type == 12 || type == 13 ) {
// oops, Robin's data format doesn't give us the
// needed information to compute a heading for a DME
// transmitter. FIXME Robin!
double az1 = 0.0, az2 = 0.0, s = 0.0;
SGGeod geod = SGGeod::fromCart(aircraft);
- geo_inverse_wgs_84( geod, stations[i]->get_pos(),
- &az1, &az2, &s);
- az1 = az1 - stations[i]->get_multiuse();
+ geo_inverse_wgs_84( geod, station->get_pos(), &az1, &az2, &s);
+ az1 = az1 - station->get_multiuse();
if ( az1 > 180.0) az1 -= 360.0;
if ( az1 < -180.0) az1 += 360.0;
// penalize opposite facing stations by adding 5000 meters
if ( d2 < min_dist ) {
min_dist = d2;
- nav = stations[i];
+ nav = station;
}
}
SG_LOG( SG_INSTR, SG_DEBUG, "findStationByFreq " << freq << " size " << stations.size() );
- if (stations.size()) {
+ if (!stations.empty()) {
return stations[0];
}
return NULL;
const tacan_list_type& stations = ident_channels[channel];
SG_LOG( SG_INSTR, SG_DEBUG, "findByChannel " << channel<< " size " << stations.size() );
- if (stations.size()) {
+ if (!stations.empty()) {
return stations[0];
}
return NULL;