]> git.mxchange.org Git - flightgear.git/commitdiff
Start of code to load, manage, and query the navaid database.
authorcurt <curt>
Fri, 21 Apr 2000 04:19:22 +0000 (04:19 +0000)
committercurt <curt>
Fri, 21 Apr 2000 04:19:22 +0000 (04:19 +0000)
src/Navaids/Makefile.am [new file with mode: 0644]
src/Navaids/navaid.cxx [new file with mode: 0644]
src/Navaids/navaid.hxx [new file with mode: 0644]
src/Navaids/navaids.cxx [new file with mode: 0644]
src/Navaids/navaids.hxx [new file with mode: 0644]
src/Navaids/testnavs.cxx [new file with mode: 0644]

diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am
new file mode 100644 (file)
index 0000000..11d7f38
--- /dev/null
@@ -0,0 +1,10 @@
+noinst_LIBRARIES = libNavAids.a
+
+noinst_PROGRAMS = testnavs
+
+libNavAids_a_SOURCES = navaid.hxx navaids.hxx navaids.cxx
+
+testnavs_SOURCES = testnavs.cxx
+testnavs_LDADD = libNavAids.a -lsgdebug -lsgmisc -lz
+
+INCLUDES += -I$(top_builddir) -I$(top_builddir)/src
diff --git a/src/Navaids/navaid.cxx b/src/Navaids/navaid.cxx
new file mode 100644 (file)
index 0000000..c8ab704
--- /dev/null
@@ -0,0 +1,24 @@
+// navaid.cxx -- navaid class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000  Curtis L. Olson - curt@flightgear.org
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#include "navaid.hxx"
diff --git a/src/Navaids/navaid.hxx b/src/Navaids/navaid.hxx
new file mode 100644 (file)
index 0000000..66adeaf
--- /dev/null
@@ -0,0 +1,102 @@
+// navaid.hxx -- navaid class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000  Curtis L. Olson - curt@flightgear.org
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#ifndef _FG_NAVAID_HXX
+#define _FG_NAVAID_HXX
+
+
+#include <simgear/compiler.h>
+#include <simgear/misc/fgstream.hxx>
+
+#ifdef FG_HAVE_STD_INCLUDES
+#  include <istream>
+#elif defined( FG_HAVE_NATIVE_SGI_COMPILERS )
+#  include <iostream.h>
+#elif defined( __BORLANDC__ )
+#  include <iostream>
+#else
+#  include <istream.h>
+#endif
+
+#if ! defined( FG_HAVE_NATIVE_SGI_COMPILERS )
+FG_USING_STD(istream);
+#endif
+
+
+class FGNavAid {
+
+    char type;
+    double lon, lat;
+    double elev;
+    int freq;
+    int range;
+    bool dme;
+    char ident[5];
+
+public:
+
+    inline FGNavAid(void) {}
+    inline ~FGNavAid(void) {}
+
+    inline char get_type() const { return type; }
+    inline double get_lon() const { return lon; }
+    inline double get_lat() const { return lat; }
+    inline double get_elev() const { return elev; }
+    inline int get_freq() const { return freq; }
+    inline int get_range() const { return range; }
+    inline bool get_dme() const { return dme; }
+    inline char *get_ident() { return ident; }
+
+    inline void set_type( char t ) { type = t; }
+    inline void set_lon( double l ) { lon = l; }
+    inline void set_lat( double l ) { lat = l; }
+    inline void set_elev( double e ) { elev = e; }
+    inline void set_freq( int f ) { freq = f; }
+    inline void set_range( int r ) { range = r; }
+    inline void set_dme( bool b ) { dme = b; }
+    inline void set_ident( char *i ) { strncpy( ident, i, 5 ); }
+
+    friend istream& operator>> ( istream&, FGNavAid& );
+};
+
+
+inline istream&
+operator >> ( istream& in, FGNavAid& n )
+{
+    double f;
+    char c;
+    in >> n.type >> n.lon >> n.lat >> n.elev >> f >> n.range 
+       >> c >> n.ident;
+
+    n.freq = (int)(f * 100.0);
+    if ( c == 'Y' ) {
+       n.dme = true;
+    } else {
+       n.dme = false;
+    }
+
+    return in >> skipeol;
+}
+
+
+#endif // _FG_NAVAID_HXX
diff --git a/src/Navaids/navaids.cxx b/src/Navaids/navaids.cxx
new file mode 100644 (file)
index 0000000..7bb679b
--- /dev/null
@@ -0,0 +1,89 @@
+// navaids.cxx -- navaids management class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000  Curtis L. Olson - curt@flightgear.org
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#include <simgear/misc/fgstream.hxx>
+#include <simgear/debug/logstream.hxx>
+
+#include "navaids.hxx"
+
+
+// Constructor
+FGNavAids::FGNavAids( void ) {
+}
+
+
+// Destructor
+FGNavAids::~FGNavAids( void ) {
+}
+
+
+// load the navaids and build the map
+bool FGNavAids::init( FGPath path ) {
+    FGNavAid n;
+
+    navaids.erase( navaids.begin(), navaids.end() );
+
+    fg_gzifstream in( path.str() );
+    if ( !in.is_open() ) {
+        FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << path.str() );
+        exit(-1);
+    }
+
+    // read in each line of the file
+
+    in >> skipeol;
+    in >> skipcomment;
+
+#ifdef __MWERKS__
+
+    char c = 0;
+    while ( in.get(c) && c != '\0' && n.get_type() != '[' ) {
+        in.putback(c);
+        in >> n;
+       if ( n.get_type() != '[' ) {
+           navaids[n.get_freq()].push_back(n);
+       }
+        in >> skipcomment;
+    }
+
+#else
+
+    while ( ! in.eof() && n.get_type() != '[' ) {
+        in >> n;
+       /* cout << "id = " << n.get_ident() << endl;
+       cout << " type = " << n.get_type() << endl;
+       cout << " lon = " << n.get_lon() << endl;
+       cout << " lat = " << n.get_lat() << endl;
+       cout << " elev = " << n.get_elev() << endl;
+       cout << " freq = " << n.get_freq() << endl;
+       cout << " range = " << n.get_range() << endl; */
+       if ( n.get_type() != '[' ) {
+           navaids[n.get_freq()].push_back(n);
+       }
+        in >> skipcomment;
+    }
+
+#endif
+
+    return true;
+}
diff --git a/src/Navaids/navaids.hxx b/src/Navaids/navaids.hxx
new file mode 100644 (file)
index 0000000..17596d4
--- /dev/null
@@ -0,0 +1,66 @@
+// navaids.hxx -- navaids management class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000  Curtis L. Olson - curt@flightgear.org
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#ifndef _FG_NAVAIDS_HXX
+#define _FG_NAVAIDS_HXX
+
+
+#include <simgear/compiler.h>
+#include <simgear/misc/fgpath.hxx>
+
+#include <map>
+#include <vector>
+
+#include "navaid.hxx"
+
+FG_USING_STD(map);
+FG_USING_STD(vector);
+
+
+// convenience types
+typedef vector < FGNavAid > nav_list_type;
+typedef nav_list_type::iterator nav_list_iterator;
+typedef nav_list_type::const_iterator nav_list_const_iterator;
+
+typedef map < int, nav_list_type, less<int> > nav_map_type;
+typedef nav_map_type::iterator nav_map_iterator;
+typedef nav_map_type::const_iterator nav_map_const_iterator;
+
+class FGNavAids {
+
+    nav_map_type navaids;
+
+public:
+
+    FGNavAids();
+    ~FGNavAids();
+
+    // load the navaids and build the map
+    bool init( FGPath path );
+
+    // query the database for the specified frequency
+    FGNavAid query( double lon, double lat, int freq );
+};
+
+
+#endif // _FG_NAVAIDS_HXX
diff --git a/src/Navaids/testnavs.cxx b/src/Navaids/testnavs.cxx
new file mode 100644 (file)
index 0000000..a54da99
--- /dev/null
@@ -0,0 +1,11 @@
+#include <simgear/misc/fgpath.hxx>
+
+#include "navaids.hxx"
+
+int main() {
+    FGNavAids navs;
+
+    FGPath p( "/home/curt/FlightGear/Navaids/default.nav.gz" );
+   
+    navs.init( p );
+}