-// sg_file.hxx -- File I/O routines
-//
+/** \file sg_file.hxx
+ * File I/O routines.
+ */
+
// Written by Curtis Olson, started November 1999.
//
-// Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org
+// Copyright (C) 1999 Curtis L. Olson - http://www.flightgear.org/~curt
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
//
// 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.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// $Id$
#include "iochannel.hxx"
-FG_USING_STD(string);
+using std::string;
+/**
+ * A file I/O class based on SGIOChannel.
+ */
class SGFile : public SGIOChannel {
string file_name;
int fp;
+ bool eof_flag;
+ // Number of repetitions to play. -1 means loop infinitely.
+ const int repeat;
+ int iteration; // number of current repetition,
+ // starting at 0
public:
- SGFile();
+ /**
+ * Create an instance of SGFile.
+ * When calling the constructor you need to provide a file
+ * name. This file is not opened immediately, but instead will be
+ * opened when the open() method is called.
+ * @param file name of file to open
+ * @param repeat On eof restart at the beginning of the file
+ */
+ SGFile( const string& file, int repeat_ = 1 );
+
+ /** Destructor */
~SGFile();
// open the file based on specified direction
- bool open( SGProtocolDir dir );
+ bool open( const SGProtocolDir dir );
// read a block of data of specified size
int read( char *buf, int length );
int readline( char *buf, int length );
// write data to a file
- int write( char *buf, int length );
+ int write( const char *buf, const int length );
// write null terminated string to a file
- int writestring( char *str );
+ int writestring( const char *str );
// close file
bool close();
+ /** @return the name of the file being manipulated. */
inline string get_file_name() const { return file_name; }
- inline void set_file_name( const string& fn ) { file_name = fn; }
+
+ /** @return true of eof conditions exists */
+ inline bool eof() const { return eof_flag; };
};