00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __StStreamFile_h__
00032 #define __StStreamFile_h__
00033
00034 #include <fstream>
00035 #include <errno.h>
00036 #include <string>
00037
00038 using namespace std;
00039
00040 class StStreamFile {
00041 private:
00042 int mDebug;
00043 string fFilename;
00044 fstream fStream;
00045
00046 public:
00047 explicit StStreamFile(): mDebug(0), fStream(){}
00048
00049 explicit StStreamFile(const char *fileName, ios_base::openmode mode
00050 = ios_base::in) : mDebug(0), fStream() { open(fileName,mode); }
00051 virtual ~StStreamFile();
00052 int Debug() const { return mDebug; }
00053 void SetDebug(int debug) { mDebug=debug; }
00054 void Perror(const char * header=0) const;
00055
00056 public:
00057 virtual fstream &Read() = 0;
00058 virtual char *Record() = 0;
00059 virtual int Length() const = 0;
00060 virtual int Version() const = 0;
00061 virtual int RunNumber() const = 0;
00062 virtual int RecordUnixTime() const = 0;
00063
00064 public:
00065
00066 void open(const char *fileName, ios_base::openmode mode = ios_base::in);
00067 void close();
00068 bool bad() const { return fStream.bad(); }
00069 bool good() const { return fStream.good(); }
00070 bool fail() const { return fStream.fail(); }
00071 bool eof() const { return fStream.eof(); }
00072 bool is_open() { return fStream.is_open(); }
00073 ios_base::iostate rdstate() const { return fStream.rdstate(); }
00074
00075 fstream &stream() { return fStream ; }
00076 const fstream &stream() const { return fStream ; }
00077 const string &filename() const { return fFilename; }
00078
00079 protected:
00080 istream &read(char *s, streamsize n);
00081 virtual bool closeFileSignal() { return true; }
00082 };
00083 #endif