1 // @(#)root/io:$Id$ 2 // Author: Rene Brun 22/01/2007 3 4 /************************************************************************* 5 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. * 6 * All rights reserved. * 7 * * 8 * For the licensing terms see $ROOTSYS/LICENSE. * 9 * For the list of contributors see $ROOTSYS/README/CREDITS. * 10 *************************************************************************/ 11 12 #ifndef ROOT_TDirectoryFile 13 #define ROOT_TDirectoryFile 14 15 16 ////////////////////////////////////////////////////////////////////////// 17 // // 18 // TDirectoryFile // 19 // // 20 // Describe directory structure in a ROOT file. // 21 // // 22 ////////////////////////////////////////////////////////////////////////// 23 24 #ifndef ROOT_TDirectory 25 #include "TDirectory.h" 26 #endif 27 28 class TList; 29 class TBrowser; 30 class TKey; 31 class TFile; 32 33 class TDirectoryFile : public TDirectory { 34 35 protected: 36 Bool_t fModified; //true if directory has been modified 37 Bool_t fWritable; //true if directory is writable 38 TDatime fDatimeC; //Date and time when directory is created 39 TDatime fDatimeM; //Date and time of last modification 40 Int_t fNbytesKeys; //Number of bytes for the keys 41 Int_t fNbytesName; //Number of bytes in TNamed at creation time 42 Int_t fBufferSize; //Default buffer size to create new TKeys 43 Long64_t fSeekDir; //Location of directory on file 44 Long64_t fSeekParent; //Location of parent directory on file 45 Long64_t fSeekKeys; //Location of Keys record on file 46 TFile *fFile; //pointer to current file in memory 47 TList *fKeys; //Pointer to keys list in memory 48 49 virtual void CleanTargets(); 50 void Init(TClass *cl = 0); 51 52 private: 53 TDirectoryFile(const TDirectoryFile &directory); //Directories cannot be copied 54 void operator=(const TDirectoryFile &); //Directories cannot be copied 55 56 public: 57 // TDirectory status bits 58 enum { kCloseDirectory = BIT(7) }; 59 60 TDirectoryFile(); 61 TDirectoryFile(const char *name, const char *title, Option_t *option="", TDirectory* motherDir = 0); 62 virtual ~TDirectoryFile(); 63 virtual void Append(TObject *obj, Bool_t replace = kFALSE); 64 void Add(TObject *obj, Bool_t replace = kFALSE) { Append(obj,replace); } 65 Int_t AppendKey(TKey *key); 66 virtual void Browse(TBrowser *b); 67 void Build(TFile* motherFile = 0, TDirectory* motherDir = 0); 68 virtual TObject *CloneObject(const TObject *obj, Bool_t autoadd = kTRUE); 69 virtual void Close(Option_t *option=""); 70 virtual void Copy(TObject &) const { MayNotUse("Copy(TObject &)"); } 71 virtual Bool_t cd(const char *path = 0); 72 virtual void Delete(const char *namecycle=""); 73 virtual void FillBuffer(char *&buffer); 74 virtual TKey *FindKey(const char *keyname) const; 75 virtual TKey *FindKeyAny(const char *keyname) const; 76 virtual TObject *FindObjectAny(const char *name) const; 77 virtual TObject *FindObjectAnyFile(const char *name) const; 78 virtual TObject *Get(const char *namecycle); 79 virtual TDirectory *GetDirectory(const char *apath, Bool_t printError = false, const char *funcname = "GetDirectory"); 80 template <class T> inline void GetObject(const char* namecycle, T*& ptr) // See TDirectory::Get for information 81 { 82 ptr = (T*)GetObjectChecked(namecycle,TBuffer::GetClass(typeid(T))); 83 } 84 virtual void *GetObjectChecked(const char *namecycle, const char* classname); 85 virtual void *GetObjectChecked(const char *namecycle, const TClass* cl); 86 virtual void *GetObjectUnchecked(const char *namecycle); 87 virtual Int_t GetBufferSize() const; 88 const TDatime &GetCreationDate() const { return fDatimeC; } 89 virtual TFile *GetFile() const { return fFile; } 90 virtual TKey *GetKey(const char *name, Short_t cycle=9999) const; 91 virtual TList *GetListOfKeys() const { return fKeys; } 92 const TDatime &GetModificationDate() const { return fDatimeM; } 93 virtual Int_t GetNbytesKeys() const { return fNbytesKeys; } 94 virtual Int_t GetNkeys() const { return fKeys->GetSize(); } 95 virtual Long64_t GetSeekDir() const { return fSeekDir; } 96 virtual Long64_t GetSeekParent() const { return fSeekParent; } 97 virtual Long64_t GetSeekKeys() const { return fSeekKeys; } 98 Bool_t IsModified() const { return fModified; } 99 Bool_t IsWritable() const { return fWritable; } 100 virtual void ls(Option_t *option="") const; 101 virtual TDirectory *mkdir(const char *name, const char *title=""); 102 virtual TFile *OpenFile(const char *name, Option_t *option= "", 103 const char *ftitle = "", Int_t compress = 1, 104 Int_t netopt = 0); 105 virtual void Purge(Short_t nkeep=1); 106 virtual void ReadAll(Option_t *option=""); 107 virtual Int_t ReadKeys(Bool_t forceRead=kTRUE); 108 virtual Int_t ReadTObject(TObject *obj, const char *keyname); 109 virtual void ResetAfterMerge(TFileMergeInfo *); 110 virtual void rmdir(const char *name); 111 virtual void Save(); 112 virtual void SaveSelf(Bool_t force = kFALSE); 113 virtual Int_t SaveObjectAs(const TObject *obj, const char *filename="", Option_t *option="") const; 114 virtual void SetBufferSize(Int_t bufsize); 115 void SetModified() {fModified = kTRUE;} 116 void SetSeekDir(Long64_t v) { fSeekDir = v; } 117 virtual void SetTRefAction(TObject *ref, TObject *parent); 118 void SetWritable(Bool_t writable=kTRUE); 119 virtual Int_t Sizeof() const; 120 virtual Int_t Write(const char *name=0, Int_t opt=0, Int_t bufsize=0); 121 virtual Int_t Write(const char *name=0, Int_t opt=0, Int_t bufsize=0) const ; 122 virtual Int_t WriteTObject(const TObject *obj, const char *name=0, Option_t *option="", Int_t bufsize=0); 123 virtual Int_t WriteObjectAny(const void *obj, const char *classname, const char *name, Option_t *option="", Int_t bufsize=0); 124 virtual Int_t WriteObjectAny(const void *obj, const TClass *cl, const char *name, Option_t *option="", Int_t bufsize=0); 125 virtual void WriteDirHeader(); 126 virtual void WriteKeys(); 127 128 ClassDef(TDirectoryFile,5) //Describe directory structure in a ROOT file 129 }; 130 131 #endif 132