/search.css" rel="stylesheet" type="text/css"/> /search.js">
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 TimeStamp; 00043 class ContextRange; 00044 00045 class DbiBinaryFile 00046 { 00047 00048 public: 00049 00050 DbiBinaryFile(const char* fileName= "", 00051 Bool_t input = kTRUE); 00052 ~DbiBinaryFile(); 00053 00054 // State testing. 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 // State changing. 00062 00063 void Close(); 00064 00065 // Builtin data type I/O. 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 // Simple Virtual object I/O. 00077 // (i.e. object with vptr but only built-in data types) 00078 00079 DbiBinaryFile& operator >> (TimeStamp& ts); 00080 DbiBinaryFile& operator << (const TimeStamp& ts); 00081 00082 // String I/O. 00083 // Warning: Implimentation assumes that string does not contain 00084 // a null character. 00085 00086 DbiBinaryFile& operator >> (string& str); 00087 DbiBinaryFile& operator << (const string& str); 00088 00089 // Compound object I/O. 00090 00091 DbiBinaryFile& operator >> (ContextRange& vr); 00092 DbiBinaryFile& operator << (const ContextRange& vr); 00093 00094 // Vector I/O. 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 // Global control of all created DbiBinaryFile objects. 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.size() && (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 // The functions that do the low-level I/O. 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 // CINT does not recognise fstream; only ifstream and ofstream. 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; //Level 2 Cache directory or null if none. 00135 static Bool_t fgReadAccess; //Have read access if true. 00136 static Bool_t fgWriteAccess;//Have write access if true. 00137 00138 }; 00139 00140 #endif // DBIBINARYFILE_HfArrayBuffer