From: curt Date: Fri, 21 Apr 2000 04:19:22 +0000 (+0000) Subject: Start of code to load, manage, and query the navaid database. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=7a16ec4fb4e1663902f5022812291f01d7e37ee3;p=flightgear.git Start of code to load, manage, and query the navaid database. --- diff --git a/src/Navaids/Makefile.am b/src/Navaids/Makefile.am new file mode 100644 index 000000000..11d7f38ba --- /dev/null +++ b/src/Navaids/Makefile.am @@ -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 index 000000000..c8ab70421 --- /dev/null +++ b/src/Navaids/navaid.cxx @@ -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 index 000000000..66adeaf9b --- /dev/null +++ b/src/Navaids/navaid.hxx @@ -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 +#include + +#ifdef FG_HAVE_STD_INCLUDES +# include +#elif defined( FG_HAVE_NATIVE_SGI_COMPILERS ) +# include +#elif defined( __BORLANDC__ ) +# include +#else +# include +#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 index 000000000..7bb679b5b --- /dev/null +++ b/src/Navaids/navaids.cxx @@ -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 +#include + +#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 index 000000000..17596d4db --- /dev/null +++ b/src/Navaids/navaids.hxx @@ -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 +#include + +#include +#include + +#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 > 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 index 000000000..a54da99d0 --- /dev/null +++ b/src/Navaids/testnavs.cxx @@ -0,0 +1,11 @@ +#include + +#include "navaids.hxx" + +int main() { + FGNavAids navs; + + FGPath p( "/home/curt/FlightGear/Navaids/default.nav.gz" ); + + navs.init( p ); +}