X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2Fsg_file.hxx;h=7d84286389778812efdd72b49dfd9022eb223723;hb=adb7db9229db1d869b254ac18f1471bed464c508;hp=994cc27564364240e1b4de5c9a3c06e94d28d580;hpb=22812a0aaef07c8da20b0c7e151016965e29dcff;p=simgear.git diff --git a/simgear/io/sg_file.hxx b/simgear/io/sg_file.hxx index 994cc275..7d842863 100644 --- a/simgear/io/sg_file.hxx +++ b/simgear/io/sg_file.hxx @@ -1,8 +1,10 @@ -// 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 @@ -16,7 +18,7 @@ // // 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$ @@ -24,39 +26,48 @@ #ifndef _SG_FILE_HXX #define _SG_FILE_HXX - -#ifndef __cplusplus -# error This library requires C++ -#endif - #include #include -#include // for open(), read(), write(), close() -#include // for open(), read(), write(), close() -#include // for open(), read(), write(), close() -#if !defined( _MSC_VER ) -# include // for open(), read(), write(), close() -#endif - #include "iochannel.hxx" -FG_USING_STD(string); - +/** + * A file I/O class based on SGIOChannel. + */ class SGFile : public SGIOChannel { - string file_name; + std::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 std::string& file, int repeat_ = 1 ); + + /** + * Create an SGFile from an existing, open file-descriptor + */ + SGFile( int existingFd ); + + /** 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 ); @@ -65,16 +76,19 @@ public: 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(); - inline string get_file_name() const { return file_name; } - inline void set_file_name( const string& fn ) { file_name = fn; } + /** @return the name of the file being manipulated. */ + inline std::string get_file_name() const { return file_name; } + + /** @return true of eof conditions exists */ + virtual bool eof() const { return eof_flag; }; };