/search.css" rel="stylesheet" type="text/css"/> /search.js">
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

DbiBinaryFile.h
Go to the documentation of this file.
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
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Fri May 16 2014 09:56:45 for DatabaseInterface by doxygen 1.7.4