]> git.mxchange.org Git - simgear.git/commitdiff
Additional enhancements.
authorcurt <curt>
Thu, 24 Sep 1998 15:22:17 +0000 (15:22 +0000)
committercurt <curt>
Thu, 24 Sep 1998 15:22:17 +0000 (15:22 +0000)
Misc/fgstream.cxx
Misc/fgstream.hxx

index 32c6919282c79861f26be029e1b191f03c2fe311..60887c17d7493f46303462e7ba3e9da45d76e46a 100644 (file)
@@ -33,6 +33,15 @@ fg_gzifstream::fg_gzifstream( const string& name, int io_mode )
     open( name, io_mode );
 }
 
+//-----------------------------------------------------------------------------
+//
+// Attach a stream to an already opened file descriptor.
+//
+fg_gzifstream::fg_gzifstream( int fd, int io_mode )
+    : gzstream( fd, io_mode )
+{
+}
+
 //-----------------------------------------------------------------------------
 //
 // Open a possibly gzipped file for reading.
@@ -51,7 +60,8 @@ fg_gzifstream::open( const string& name, int io_mode )
        if ( s.substr( s.length() - 3, 3 ) == ".gz" )
        {
            // remove ".gz" suffix
-           s.erase( s.length() - 3, 3 );
+           s.replace( s.length() - 3, 3, "" );
+//         s.erase( s.length() - 3, 3 );
        }
        else
        {
@@ -106,14 +116,68 @@ fg_gzifstream::eat_comments()
        }
 
        // skip to end of line.
-       while ( gzstream.get(c) && c != '\n' )
+       while ( gzstream.get(c) && (c != '\n' && c != '\r') )
            ;
     }
     return gzstream;
 }
 
+//
+// Manipulators
+//
+
+istream&
+skipeol( istream& in )
+{
+    char c = 0;
+    // skip to end of line.
+    while ( in.get(c) && (c != '\n' && c != '\r') )
+       ;
+
+    // \r\n ?
+    return in;
+}
+
+istream&
+skipws( istream& in )
+{
+    char c;
+    while ( in.get(c) )
+    {
+       if ( ! isspace( c ) )
+       {
+           // put pack the non-space character
+           in.putback(c);
+           break;
+       }
+    }
+    return in;
+}
+
+istream&
+skipcomment( istream& in )
+{
+    while ( in )
+    {
+       // skip whitespace
+       in >> skipws;
+
+       char c;
+       if ( in.get( c ) && c != '#' )
+       {
+           // not a comment
+           in.putback(c);
+           break;
+       }
+       in >> skipeol;
+    }
+    return in;
+}
 
 // $Log$
+// Revision 1.2  1998/09/24 15:22:17  curt
+// Additional enhancements.
+//
 // Revision 1.1  1998/09/01 19:06:29  curt
 // Initial revision.
 //
index f9f74b6a31474de1fd41f90d9b848e018c03b9e0..46cd6e5ddf60d7a2ef42b378b839ad1f668ced8a 100644 (file)
@@ -50,6 +50,9 @@ public:
     fg_gzifstream( const string& name,
                   int io_mode = ios::in|ios::binary );
 
+    // 
+    fg_gzifstream( int fd, int io_mode = ios::in|ios::binary );
+
     // Attempt to open a file with and without ".gz" extension.
     void open( const string& name,
               int io_mode = ios::in|ios::binary );
@@ -86,9 +89,22 @@ private:
     fg_gzifstream( const fg_gzifstream& );    
 };
 
+// istream manipulator that skips to end of line.
+istream& skipeol( istream& in );
+
+// istream manipulator that skips over white space.
+istream& skipws( istream& in );
+
+// istream manipulator that skips comments and white space.
+// A comment starts with '#'.
+istream& skipcomment( istream& in );
+
 #endif /* _FGSTREAM_HXX */
 
 // $Log$
+// Revision 1.2  1998/09/24 15:22:18  curt
+// Additional enhancements.
+//
 // Revision 1.1  1998/09/01 19:06:29  curt
 // Initial revision.
 //