Index: /trunk/BNC/rinex/rnxnavfile.cpp
===================================================================
--- /trunk/BNC/rinex/rnxnavfile.cpp	(revision 3745)
+++ /trunk/BNC/rinex/rnxnavfile.cpp	(revision 3746)
@@ -88,9 +88,12 @@
 t_rnxNavFile::t_rnxNavFile(QString fileName) {
   expandEnvVar(fileName);
-  _file   = new QFile(fileName);
-  _file->open(QIODevice::ReadOnly | QIODevice::Text);
-  _stream = new QTextStream();
-  _stream->setDevice(_file);
-  _header.read(_stream);
+  QFile*       file   = new QFile(fileName);
+  file->open(QIODevice::ReadOnly | QIODevice::Text);
+  QTextStream* stream = new QTextStream();
+  stream->setDevice(file);
+  _header.read(stream);
+  this->read(stream);
+  delete stream;
+  delete file;
 }
 
@@ -98,16 +101,12 @@
 ////////////////////////////////////////////////////////////////////////////
 t_rnxNavFile::~t_rnxNavFile() {
-  delete _stream;
-  delete _file;
 }
 
-// Read Next Ephemeris
+// Read File Content
 ////////////////////////////////////////////////////////////////////////////
-t_eph* t_rnxNavFile::getNextEph() {
+void t_rnxNavFile::read(QTextStream* stream) {
 
-  t_eph* eph = 0;
-
-  while (_stream->status() == QTextStream::Ok && !_stream->atEnd()) {
-    QString line = _stream->readLine();
+  while (stream->status() == QTextStream::Ok && !stream->atEnd()) {
+    QString line = stream->readLine();
     if (line.isEmpty()) {
       continue;
@@ -126,8 +125,9 @@
       }
     }
+    t_eph* eph = 0;
     QStringList lines; lines << line;
     if      (prn[0] == 'G') {
       for (int ii = 1; ii < 8; ii++) {
-        lines << _stream->readLine();
+        lines << stream->readLine();
       }
       eph = new t_ephGPS(version(), lines);
@@ -135,5 +135,5 @@
     else if (prn[0] == 'R') {
       for (int ii = 1; ii < 4; ii++) {
-        lines << _stream->readLine();
+        lines << stream->readLine();
       }
       eph = new t_ephGlo(version(), lines);
@@ -141,18 +141,25 @@
     else if (prn[0] == 'E') {
       for (int ii = 1; ii < 8; ii++) {
-        lines << _stream->readLine();
+        lines << stream->readLine();
       }
       eph = new t_ephGal(version(), lines);
     }
     if (eph && eph->ok()) {
-      // ColumnVector xc(4);
-      // ColumnVector vv(3);
-      // eph->position(eph->GPSweek(), eph->GPSweeks(), xc.data(), vv.data());
-      // cout << eph->prn().toAscii().data() << " " << xc.t();
-      return eph;
+      _ephs.push(eph);
+    }
+    else {
+      delete eph;
     }
   }
+}
 
-  delete eph;
+// Read Next Ephemeris
+////////////////////////////////////////////////////////////////////////////
+t_eph* t_rnxNavFile::getNextEph() {
+  if (!_ephs.empty()) {
+    t_eph* eph = _ephs.front();
+    _ephs.pop();
+    return eph;
+  }
   return 0;
 }
Index: /trunk/BNC/rinex/rnxnavfile.h
===================================================================
--- /trunk/BNC/rinex/rnxnavfile.h	(revision 3745)
+++ /trunk/BNC/rinex/rnxnavfile.h	(revision 3746)
@@ -26,4 +26,5 @@
 #define RNXNAVFILE_H
 
+#include <queue>
 #include <QtCore>
 #include "bncconst.h"
@@ -55,7 +56,7 @@
 
  private:
-  t_rnxNavHeader _header;
-  QFile*         _file;
-  QTextStream*   _stream;
+  void               read(QTextStream* stream);
+  std::queue<t_eph*> _ephs;
+  t_rnxNavHeader     _header;
 };
 
