StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StStreamFile.h
1 // $Id: StStreamFile.h,v 1.7 2010/01/25 17:17:11 fine Exp $
2 // $Log: StStreamFile.h,v $
3 // Revision 1.7 2010/01/25 17:17:11 fine
4 // Remove the redundant RecordSize method
5 //
6 // Revision 1.6 2010/01/15 21:26:51 fine
7 // RT #1816. Eliminate the side effect from RT 1803 fix
8 //
9 // Revision 1.5 2010/01/07 17:37:59 fine
10 // introduce closeFileSignal to process several DAT files at once. RT # 1794
11 //
12 // Revision 1.4 2010/01/06 20:42:26 fine
13 // Fix type EventNumber shoould be RunNumber . Thanks Akio
14 //
15 // Revision 1.3 2010/01/06 20:09:39 fine
16 // RT #1794. Add EventNumber method to the StStreamFile interface RT # 1794
17 //
18 // Revision 1.2 2009/10/13 15:44:59 fine
19 // add the method to provide the error message
20 //
21 // Revision 1.1 2009/10/12 04:21:06 fine
22 // Add abstract STAR iostream-base file interface
23 //
24 //
25 
26 /***************************************************************************
27  * \Author: Valeri Fine )fine@bnl.gov)
28  * Description: The base proxy class for fstream-base I/O operation
29  **************************************************************************/
30 
31 #ifndef __StStreamFile_h__
32 #define __StStreamFile_h__
33 
34 #include <fstream>
35 #include <errno.h>
36 #include <string>
37 
38 using namespace std;
39 
40 class StStreamFile {
41 private:
42  int mDebug;
43  string fFilename; //< last open file name
44  fstream fStream;
45 
46 public:
47  explicit StStreamFile(): mDebug(0), fStream(){}
48 
49  explicit StStreamFile(const char *fileName, ios_base::openmode mode
50  = ios_base::in) : mDebug(0), fStream() { open(fileName,mode); }
51  virtual ~StStreamFile();
52  int Debug() const { return mDebug; }
53  void SetDebug(int debug) { mDebug=debug; }
54  void Perror(const char * header=0) const;
55 
56 public: // abstract interface
57  virtual fstream &Read() = 0;
58  virtual char *Record() = 0;
59  virtual int Length() const = 0;
60  virtual int Version() const = 0;
61  virtual int RunNumber() const = 0;
62  virtual int RecordUnixTime() const = 0;
63 
64 public: // fstream proxy interface
65  // fstream proxy methods
66  void open(const char *fileName, ios_base::openmode mode = ios_base::in);
67  void close();
68  bool bad() const { return fStream.bad(); }
69  bool good() const { return fStream.good(); }
70  bool fail() const { return fStream.fail(); }
71  bool eof() const { return fStream.eof(); }
72  bool is_open() { return fStream.is_open(); }
73  ios_base::iostate rdstate() const { return fStream.rdstate(); }
74 
75  fstream &stream() { return fStream ; }
76  const fstream &stream() const { return fStream ; }
77  const string &filename() const { return fFilename; }
78 
79 protected:
80  istream &read(char *s, streamsize n);
81  virtual bool closeFileSignal() { return true; } //< the method to be overriden in subclass to customize the "new file has been open" status
82 };
83 #endif