00001 #ifndef DBIBINARYFILE_H
00002 #define DBIBINARYFILE_H
00003
00025 #include <fstream>
00026 using std::fstream;
00027 using std::ios_base;
00028
00029 #include <string>
00030 using std::string;
00031
00032 #include <vector>
00033 using std::vector;
00034
00035 #ifndef ROOT_Rtypes
00036 #if !defined(__CINT__) || defined(__MAKECINT__)
00037 #include "Rtypes.h"
00038 #endif
00039 #endif
00040
00041 class DbiTableRow;
00042 class VldTimeStamp;
00043 class VldRange;
00044
00045 class DbiBinaryFile
00046 {
00047
00048 public:
00049
00050 DbiBinaryFile(const char* fileName= "",
00051 Bool_t input = kTRUE);
00052 ~DbiBinaryFile();
00053
00054
00055
00056 string GetFileName() const { return fFileName; }
00057 Bool_t IsOK() const { return ! fHasErrors;}
00058 Bool_t IsReading() const { return this->IsOK() && fReading; }
00059 Bool_t IsWriting() const { return this->IsOK() && ! fReading; }
00060
00061
00062
00063 void Close();
00064
00065
00066
00067 DbiBinaryFile& operator >> (Bool_t& num);
00068 DbiBinaryFile& operator << (const Bool_t& num);
00069 DbiBinaryFile& operator >> (Int_t& num);
00070 DbiBinaryFile& operator << (const Int_t& num);
00071 DbiBinaryFile& operator >> (UInt_t& num);
00072 DbiBinaryFile& operator << (const UInt_t& num);
00073 DbiBinaryFile& operator >> (Double_t& num);
00074 DbiBinaryFile& operator << (const Double_t& num);
00075
00076
00077
00078
00079 DbiBinaryFile& operator >> (VldTimeStamp& ts);
00080 DbiBinaryFile& operator << (const VldTimeStamp& ts);
00081
00082
00083
00084
00085
00086 DbiBinaryFile& operator >> (string& str);
00087 DbiBinaryFile& operator << (const string& str);
00088
00089
00090
00091 DbiBinaryFile& operator >> (VldRange& vr);
00092 DbiBinaryFile& operator << (const VldRange& vr);
00093
00094
00095
00096 DbiBinaryFile& operator >> (vector<DbiTableRow*>& arr);
00097 DbiBinaryFile& operator << (vector<DbiTableRow*>& arr);
00098 char* ReleaseArrayBuffer() { char* buff = fArrayBuffer;
00099 fArrayBuffer = 0;
00100 return buff; }
00101
00102
00103
00104 static Bool_t CanReadL2Cache() { return fgWorkDir.size() && fgReadAccess; }
00105 static Bool_t CanWriteL2Cache() { return fgWorkDir.size() && fgWriteAccess; }
00106 static void SetWorkDir(const string& dir) { fgWorkDir = dir;
00107 if ( fgWorkDir[fgWorkDir.size()-1] != '/' ) fgWorkDir += '/'; }
00108 static void SetReadAccess(Bool_t access = kTRUE) { fgReadAccess = access; }
00109 static void SetWriteAccess(Bool_t access = kTRUE) { fgWriteAccess = access; }
00110
00111 private:
00112
00113
00114
00115 Bool_t CanRead();
00116 Bool_t CanWrite();
00117 void CheckFileStatus();
00118
00119 Bool_t Read(char* bytes, UInt_t numBytes);
00120 Bool_t Write(const char* bytes, UInt_t numBytes);
00121
00122
00123 #if !defined(__CINT__)
00124
00126 fstream* fFile;
00127 #endif
00128
00129 Bool_t fReading;
00130 Bool_t fHasErrors;
00131 char* fArrayBuffer;
00132 string fFileName;
00133
00134 static string fgWorkDir;
00135 static Bool_t fgReadAccess;
00136 static Bool_t fgWriteAccess;
00137
00138 };
00139
00140 #endif // DBIBINARYFILE_HfArrayBuffer