From ce4ea1d432c708a273fc1f3c5b054d6f70376ff0 Mon Sep 17 00:00:00 2001
From: david <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 | 44 ++++++++++++++++-------------------------
 2 files changed, 34 insertions(+), 31 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);
-        in >> fix;
-	if ( fix.get_ident() != (string)"[End]" ) {
-	    fixlist[fix.get_ident()] = fix;
-	}
-        in >> skipcomment;
-    }
-
-#else
-
-    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;
-	}
-        in >> skipcomment;
-    }
-
+#else	
+    while ( ! in.eof() ) {
 #endif
 
+        FGFix fix;
+        in >> fix;
+        if ( fix.get_ident() == "[End]" ) {
+            break;
+        }
+
+        /* cout << "ident=" << fix.get_ident()
+             << ", lat=" << fix.get_lat()
+             << ", lon=" << fix.get_lon() << endl; */
+
+        fixlist[fix.get_ident()] = fix;
+        in >> skipcomment;
+    }
+    
     return true;
 }