From ce4ea1d432c708a273fc1f3c5b054d6f70376ff0 Mon Sep 17 00:00:00 2001 From: david Date: Sat, 30 Mar 2002 12:50:01 +0000 Subject: [PATCH] Patch from Melchior Franz: - merged the _MWERKS_ and the generic branch, only the loop head needs different treatment - created a constructor; the operator>> wouldn't have initialized all variables in case of a broken default.fix.gz entry, so we would have got a mixture of the broken one and the previous one; (valgrind complained ...) - move the automatic FGFix variable into the loop, so that the gets cleanly constructed for every database entry. - don't access fix.type before it is initialized - updated the commented out debug output statements (they were copied over from navlist.cxx but never adapted) --- src/Navaids/fix.hxx | 21 +++++++++++++++++---- src/Navaids/fixlist.cxx | 38 ++++++++++++++------------------------ 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/Navaids/fix.hxx b/src/Navaids/fix.hxx index 3804fb4b2..9fd6115c9 100644 --- a/src/Navaids/fix.hxx +++ b/src/Navaids/fix.hxx @@ -57,7 +57,7 @@ class FGFix { public: - inline FGFix(void) {} + inline FGFix(void); inline ~FGFix(void) {} inline string get_ident() const { return ident; } @@ -68,15 +68,28 @@ public: }; +inline +FGFix::FGFix() + : ident(""), + lon(0.0), + lat(0.0) +{ +} + + inline istream& operator >> ( istream& in, FGFix& f ) { - in >> f.ident >> f.lat >> f.lon; + in >> f.ident; + + if ( f.ident[0] == '[' ) + return in >> skipeol; + + in >> f.lat >> f.lon; // cout << "id = " << f.ident << endl; - // return in >> skipeol; - return in; + return in >> skipeol; } diff --git a/src/Navaids/fixlist.cxx b/src/Navaids/fixlist.cxx index e3a02a84e..3fa380e4b 100644 --- a/src/Navaids/fixlist.cxx +++ b/src/Navaids/fixlist.cxx @@ -47,7 +47,6 @@ FGFixList::~FGFixList( void ) { // load the navaids and build the map bool FGFixList::init( SGPath path ) { - FGFix fix; fixlist.erase( fixlist.begin(), fixlist.end() ); @@ -63,36 +62,27 @@ bool FGFixList::init( SGPath path ) { in >> skipcomment; #ifdef __MWERKS__ - char c = 0; - while ( in.get(c) && c != '\0' && fix.get_ident() != (string)"[End]" ) { + while ( in.get(c) && c != '\0' ) { in.putback(c); +#else + while ( ! in.eof() ) { +#endif + + FGFix fix; in >> fix; - if ( fix.get_ident() != (string)"[End]" ) { - fixlist[fix.get_ident()] = fix; - } - in >> skipcomment; - } + if ( fix.get_ident() == "[End]" ) { + break; + } -#else + /* cout << "ident=" << fix.get_ident() + << ", lat=" << fix.get_lat() + << ", lon=" << fix.get_lon() << endl; */ - while ( ! in.eof() && fix.get_ident() != (string)"[End]" ) { - in >> fix; - /* 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 ( fix.get_ident() != (string)"[End]" ) { - fixlist[fix.get_ident()] = fix; - } + fixlist[fix.get_ident()] = fix; in >> skipcomment; } - -#endif - + return true; } -- 2.39.5