]> git.mxchange.org Git - flightgear.git/commitdiff
James Turner:
authorehofman <ehofman>
Sun, 3 Aug 2008 14:34:42 +0000 (14:34 +0000)
committerehofman <ehofman>
Sun, 3 Aug 2008 14:34:42 +0000 (14:34 +0000)
Attached patch + new file make FGNavRecord have a .cxx file, and a constructor w
hich allows all the parameters to be supplied. Along the way I also cleaned up t
he navrecord.hxx header, lots more header pollution has been killed.

Some long methods are no longer inline, but were all suspiciously long to meet c
ompiler inlining criteria (I'm not clear if the 'inline' keyword is advisory or
mandatory in this situation) - I don't expect this to affect performance in any
way whatsoever.

The constructor addition is to support some hacking I'm doing improving the star
tup performance of the navDB by lazily loading the data, and caching it in a mor
e efficient format than text. I'm submitting this change (and probably some othe
r small tweaks in the future) since they are worthwhile as cleanups regardless o
f how my current experiments work out.

src/Instrumentation/adf.cxx
src/Instrumentation/dclgps.cxx
src/Instrumentation/dclgps.hxx
src/Instrumentation/gps.cxx
src/Instrumentation/kr_87.cxx
src/Instrumentation/navradio.cxx
src/Navaids/Makefile.am
src/Navaids/navdb.cxx
src/Navaids/navrecord.cxx [new file with mode: 0644]
src/Navaids/navrecord.hxx

index 114f0b658bd0cc913793f73ad74af8ce6fe0d2f8..e8c20710f9c84ec68084f2f7466dbfee013d3f57 100644 (file)
@@ -10,6 +10,7 @@
 #include <simgear/compiler.h>
 #include <simgear/math/sg_geodesy.hxx>
 #include <simgear/math/sg_random.h>
+#include <simgear/timing/sg_time.hxx>
 
 #include <Main/fg_props.hxx>
 #include <Main/util.hxx>
index 8707ccf1ed12ed8e0ac7207110eb151909a901eb..9c4ada7126715a45015ca6753395d2b00f0815a8 100644 (file)
@@ -27,6 +27,9 @@
 
 #include <simgear/sg_inlines.h>
 #include <simgear/structure/commands.hxx>
+#include <simgear/timing/sg_time.hxx>
+#include <simgear/magvar/magvar.hxx>
+
 #include <Main/fg_props.hxx>
 #include <iostream>
 using std::cout;
index c05bf75ff672955527d03dd8bce95b2afe7beecd..5526918272d9de158473a11183c82d626dff5a87 100644 (file)
@@ -40,6 +40,8 @@
 
 using namespace std;
 
+class SGTime;
+
 enum GPSDistanceUnits {
        GPS_DIST_UNITS_NM = 0,
        GPS_DIST_UNITS_KM
index aff76facf897f1441b919fa1e6ee8224f00ffa60..362f68e202a0739294e3d98fb8febd85db2a28ff 100644 (file)
@@ -13,6 +13,8 @@
 #include <simgear/route/route.hxx>
 #include <simgear/math/sg_random.h>
 #include <simgear/sg_inlines.h>
+#include <simgear/math/sg_geodesy.hxx>
+
 #include <Airports/simple.hxx>
 
 #include <Main/fg_init.hxx>
index 4749ce856a47d768119958b61d4128e4b6b70016..2188c08c9e3e7d8c49b3505e7af52b69751d2aad 100644 (file)
@@ -29,6 +29,8 @@
 
 #include <simgear/compiler.h>
 #include <simgear/math/sg_random.h>
+#include <simgear/math/sg_geodesy.hxx>
+#include <simgear/timing/sg_time.hxx>
 
 #include <Aircraft/aircraft.hxx>
 #include <Navaids/navlist.hxx>
index dc9c094b9871af5e0a2a2b1b622804710b65ca4f..5bd49d2635d496ed12d449933db29fb982b20cc1 100644 (file)
 #  include <config.h>
 #endif
 
-#include <iostream>
-#include <string>
 #include <sstream>
 
-#include <simgear/compiler.h>
 #include <simgear/sg_inlines.h>
-#include <simgear/math/sg_random.h>
+#include <simgear/timing/sg_time.hxx>
 #include <simgear/math/vector.hxx>
+#include <simgear/math/sg_random.h>
+#include <simgear/math/sg_geodesy.hxx>
 #include <simgear/structure/exception.hxx>
 
-#include <Aircraft/aircraft.hxx>
 #include <Navaids/navlist.hxx>
-
 #include "navradio.hxx"
 
-#include <string>
 using std::string;
 
-
 // Constructor
 FGNavRadio::FGNavRadio(SGPropertyNode *node) :
     lon_node(fgGetNode("/position/longitude-deg", true)),
index 7810dd4e5285003b43f925f9b7cdc39b9f098fc6..cff153f9bfa1560287f54b4b2aa1716885258617 100644 (file)
@@ -6,7 +6,8 @@ libNavaids_a_SOURCES = \
        navdb.hxx navdb.cxx \
        fix.hxx fixlist.hxx fixlist.cxx \
        awynet.hxx awynet.cxx \
-       navrecord.hxx navlist.hxx navlist.cxx
+       navrecord.hxx navrecord.cxx \
+       navlist.hxx navlist.cxx
 
 #      ils.hxx ilslist.hxx ilslist.cxx \
 #      mkrbeacons.hxx mkrbeacons.cxx 
index 817c761cb7d9424a41a47a62344350cb80967fd1..089639f042500403c325292984aa0e6a3fd8c61a 100644 (file)
@@ -29,6 +29,7 @@
 #include <string>
 
 #include <simgear/debug/logstream.hxx>
+#include <simgear/math/sg_geodesy.hxx>
 
 #include <Airports/runways.hxx>
 #include <Airports/simple.hxx>
diff --git a/src/Navaids/navrecord.cxx b/src/Navaids/navrecord.cxx
new file mode 100644 (file)
index 0000000..2aa2542
--- /dev/null
@@ -0,0 +1,148 @@
+// navrecord.cxx -- generic vor/dme/ndb class
+//
+// Written by Curtis Olson, started May 2004.
+//
+// Copyright (C) 2004  Curtis L. Olson - http://www.flightgear.org/~curt
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+//
+// $Id$
+
+#ifdef HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <istream>
+#include <simgear/misc/sgstream.hxx>
+#include "Navaids/navrecord.hxx"
+
+FGNavRecord::FGNavRecord(void) :
+    type(0),
+    pos(SGGeod::fromDeg(0, 0)),
+    cart(0, 0, 0),
+    freq(0),
+    range(0),
+    multiuse(0.0),
+    ident(""),
+    name(""),
+    apt_id(""),
+    serviceable(true),
+    trans_ident("")
+{
+}
+
+FGNavRecord::FGNavRecord(int aTy, const std::string& aIdent, 
+  const std::string& aName, const std::string& aAirport,
+  double lat, double lon, int aFreq, int aRange, double aMultiuse) :
+  type(aTy),
+  freq(aFreq),
+  range(aRange),
+  multiuse(aMultiuse),
+  ident(aIdent),
+  name(aName),
+  apt_id(aAirport),
+  serviceable(true),
+  trans_ident(aIdent)
+{
+  pos = SGGeod::fromDeg(lon, lat);
+  cart = SGVec3d::fromGeod(pos);
+}
+
+fg_nav_types FGNavRecord::get_fg_type() const {
+    switch(type) {
+    case 2: return(FG_NAV_NDB);
+    case 3: return(FG_NAV_VOR);
+    case 4: return(FG_NAV_ILS);
+    default: return(FG_NAV_ANY);
+    }
+}
+
+
+std::istream& operator>>( std::istream& in, FGNavRecord& n )
+{
+    in >> n.type;
+    
+    if ( n.type == 99 ) {
+        return in >> skipeol;
+    }
+
+    double lat, lon, elev_ft;
+    in >> lat >> lon >> elev_ft >> n.freq >> n.range >> n.multiuse
+       >> n.ident;
+    n.pos.setLatitudeDeg(lat);
+    n.pos.setLongitudeDeg(lon);
+    n.pos.setElevationFt(elev_ft);
+    getline( in, n.name );
+
+    // silently multiply adf frequencies by 100 so that adf
+    // vs. nav/loc frequency lookups can use the same code.
+    if ( n.type == 2 ) {
+        n.freq *= 100;
+    }
+
+    // Remove any leading spaces before the name
+    while ( n.name.substr(0,1) == " " ) {
+        n.name = n.name.erase(0,1);
+    }
+
+    if ( n.type >= 4 && n.type <= 9 ) {
+        // these types are always associated with an airport id
+        std::string::size_type pos = n.name.find(" ");
+        n.apt_id = n.name.substr(0, pos);
+    }
+
+    // Ranges are included with the latest data format, no need to
+    // assign our own defaults, unless the range is not set for some
+    // reason.
+
+    if ( n.range < 0.1 ) {
+        // assign default ranges
+    
+        if ( n.type == 2 || n.type == 3 ) {
+            n.range = FG_NAV_DEFAULT_RANGE;
+        } else if ( n.type == 4 || n.type == 5 || n.type == 6 ) {
+            n.range = FG_LOC_DEFAULT_RANGE;
+        } else if ( n.type == 12 ) {
+            n.range = FG_DME_DEFAULT_RANGE;
+        } else {
+            n.range = FG_LOC_DEFAULT_RANGE;
+        }
+    }
+
+    // transmitted ident (same as ident unless modeling a fault)
+    n.trans_ident = n.ident;
+
+    // generate cartesian coordinates
+    n.cart = SGVec3d::fromGeod(n.pos);
+
+    return in;
+}
+
+
+FGTACANRecord::FGTACANRecord(void) :
+    channel(""),
+    freq(0)
+    
+{
+}
+
+std::istream&
+operator >> ( std::istream& in, FGTACANRecord& n )
+{
+    in >> n.channel >> n.freq ;
+    //getline( in, n.name );
+
+    return in;
+}
index 652948747527a57b398412b9c43f879d4e1d4cc2..7ee00ed43b13447c8288f422d5cfa9ce26aa99e6 100644 (file)
 #ifndef _FG_NAVRECORD_HXX
 #define _FG_NAVRECORD_HXX
 
-#include <stdio.h>
+#include <iosfwd>
 
-#include <simgear/compiler.h>
-#include <simgear/math/sg_geodesy.hxx>
-#include <simgear/misc/sgstream.hxx>
-#include <simgear/magvar/magvar.hxx>
-#include <simgear/timing/sg_time.hxx>
-
-#include <simgear/structure/SGSharedPtr.hxx>
+#include <simgear/math/SGMath.hxx>
 #include <simgear/structure/SGReferenced.hxx>
 
-#include <istream>
-
 #define FG_NAV_DEFAULT_RANGE 50 // nm
 #define FG_LOC_DEFAULT_RANGE 18 // nm
 #define FG_DME_DEFAULT_RANGE 50 // nm
@@ -72,12 +64,16 @@ class FGNavRecord : public SGReferenced {
     std::string trans_ident;         // for failure modeling
 
 public:
-
-    inline FGNavRecord(void);
+    FGNavRecord(void);
     inline ~FGNavRecord(void) {}
 
+    FGNavRecord(int type, const std::string& ident, const std::string& name, const std::string& airport,
+      double lat, double lon, int freq, int range, double multiuse);
+
     inline int get_type() const { return type; }
-    inline fg_nav_types get_fg_type() const;
+    
+    fg_nav_types get_fg_type() const;
+    
     inline double get_lon() const { return pos.getLongitudeDeg(); } // degrees
     inline void set_lon( double l ) { pos.setLongitudeDeg(l); } // degrees
     inline double get_lat() const { return pos.getLatitudeDeg(); } // degrees
@@ -99,95 +95,6 @@ public:
     friend std::istream& operator>> ( std::istream&, FGNavRecord& );
 };
 
-
-inline
-FGNavRecord::FGNavRecord(void) :
-    type(0),
-    pos(SGGeod::fromDeg(0, 0)),
-    cart(0, 0, 0),
-    freq(0),
-    range(0),
-    multiuse(0.0),
-    ident(""),
-    name(""),
-    apt_id(""),
-    serviceable(true),
-    trans_ident("")
-{
-}
-
-
-inline fg_nav_types FGNavRecord::get_fg_type() const {
-    switch(type) {
-    case 2: return(FG_NAV_NDB);
-    case 3: return(FG_NAV_VOR);
-    case 4: return(FG_NAV_ILS);
-    default: return(FG_NAV_ANY);
-    }
-}
-
-
-inline std::istream&
-operator >> ( std::istream& in, FGNavRecord& n )
-{
-    in >> n.type;
-    
-    if ( n.type == 99 ) {
-        return in >> skipeol;
-    }
-
-    double lat, lon, elev_ft;
-    in >> lat >> lon >> elev_ft >> n.freq >> n.range >> n.multiuse
-       >> n.ident;
-    n.pos.setLatitudeDeg(lat);
-    n.pos.setLongitudeDeg(lon);
-    n.pos.setElevationFt(elev_ft);
-    getline( in, n.name );
-
-    // silently multiply adf frequencies by 100 so that adf
-    // vs. nav/loc frequency lookups can use the same code.
-    if ( n.type == 2 ) {
-        n.freq *= 100;
-    }
-
-    // Remove any leading spaces before the name
-    while ( n.name.substr(0,1) == " " ) {
-        n.name = n.name.erase(0,1);
-    }
-
-    if ( n.type >= 4 && n.type <= 9 ) {
-        // these types are always associated with an airport id
-        std::string::size_type pos = n.name.find(" ");
-        n.apt_id = n.name.substr(0, pos);
-    }
-
-    // Ranges are included with the latest data format, no need to
-    // assign our own defaults, unless the range is not set for some
-    // reason.
-
-    if ( n.range < 0.1 ) {
-        // assign default ranges
-    
-        if ( n.type == 2 || n.type == 3 ) {
-            n.range = FG_NAV_DEFAULT_RANGE;
-        } else if ( n.type == 4 || n.type == 5 || n.type == 6 ) {
-            n.range = FG_LOC_DEFAULT_RANGE;
-        } else if ( n.type == 12 ) {
-            n.range = FG_DME_DEFAULT_RANGE;
-        } else {
-            n.range = FG_LOC_DEFAULT_RANGE;
-        }
-    }
-
-    // transmitted ident (same as ident unless modeling a fault)
-    n.trans_ident = n.ident;
-
-    // generate cartesian coordinates
-    n.cart = SGVec3d::fromGeod(n.pos);
-
-    return in;
-}
-
 class FGTACANRecord : public SGReferenced {
 
     std::string channel;               
@@ -195,7 +102,7 @@ class FGTACANRecord : public SGReferenced {
      
 public:
     
-    inline FGTACANRecord(void);
+     FGTACANRecord(void);
     inline ~FGTACANRecord(void) {}
 
     inline const std::string& get_channel() const { return channel; }
@@ -203,21 +110,4 @@ public:
     friend std::istream& operator>> ( std::istream&, FGTACANRecord& );
     };
 
-
-inline
-FGTACANRecord::FGTACANRecord(void) :
-    channel(""),
-    freq(0)
-    
-{
-}
-
-inline std::istream&
-operator >> ( std::istream& in, FGTACANRecord& n )
-{
-    in >> n.channel >> n.freq ;
-    //getline( in, n.name );
-
-    return in;
-}
 #endif // _FG_NAVRECORD_HXX