Logo ROOT   6.08/07
Reference Guide
TDirectory.h
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Rene Brun 28/11/94
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, 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_TDirectory
13 #define ROOT_TDirectory
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TDirectory //
19 // //
20 // Describe directory structure in memory. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 #ifndef ROOT_TBuffer
25 #include "TBuffer.h"
26 #endif
27 #ifndef ROOT_TNamed
28 #include "TNamed.h"
29 #endif
30 #ifndef ROOT_TList
31 #include "TList.h"
32 #endif
33 #ifndef ROOT_TDatime
34 #include "TDatime.h"
35 #endif
36 #ifndef ROOT_TUUID
37 #include "TUUID.h"
38 #endif
39 
40 class TBrowser;
41 class TKey;
42 class TFile;
43 
44 class TDirectory : public TNamed {
45 public:
46  /** @class Context
47  *
48  * Small helper to keep current directory context.
49  * Automatically reverts to "old" directory
50  */
51  class TContext {
52  private:
53  TDirectory *fDirectory; //! Pointer to the previous current directory.
54  TContext *fPrevious; //! Pointer to the next TContext in the implied list of context pointing to fPrevious.
55  TContext *fNext; //! Pointer to the next TContext in the implied list of context pointing to fPrevious.
58  void CdNull();
59  friend class TDirectory;
60  public:
61  TContext(TDirectory* previous, TDirectory* newCurrent)
62  : fDirectory(previous),fPrevious(0),fNext(0)
63  {
64  // Store the current directory so we can restore it
65  // later and cd to the new directory.
66  if ( fDirectory ) fDirectory->RegisterContext(this);
67  if ( newCurrent ) newCurrent->cd();
68  else CdNull();
69  }
70  TContext() : fDirectory(TDirectory::CurrentDirectory()),fPrevious(0),fNext(0)
71  {
72  // Store the current directory so we can restore it
73  // later and cd to the new directory.
74  if ( fDirectory ) fDirectory->RegisterContext(this);
75  }
76  TContext(TDirectory* newCurrent) : fDirectory(TDirectory::CurrentDirectory()),fPrevious(0),fNext(0)
77  {
78  // Store the current directory so we can restore it
79  // later and cd to the new directory.
80  if ( fDirectory ) fDirectory->RegisterContext(this);
81  if ( newCurrent ) newCurrent->cd();
82  else CdNull();
83  }
85  {
86  // Destructor. Reset the current directory to its
87  // previous state.
88  if ( fDirectory ) {
89  fDirectory->UnregisterContext(this);
90  fDirectory->cd();
91  }
92  else CdNull();
93  }
94  };
95 
96 protected:
97 
98  TObject *fMother; //pointer to mother of the directory
99  TList *fList; //List of objects in memory
100  TUUID fUUID; //Unique identifier
101  TString fPathBuffer; //!Buffer for GetPath() function
102  TContext *fContext; //!Pointer to a list of TContext object pointing to this TDirectory
103  static Bool_t fgAddDirectory; //!flag to add histograms, graphs,etc to the directory
104 
105  Bool_t cd1(const char *path);
106  static Bool_t Cd1(const char *path);
107 
108  virtual void CleanTargets();
109  void FillFullPath(TString& buf) const;
110  void RegisterContext(TContext *ctxt);
111  void UnregisterContext(TContext *ctxt);
112  friend class TContext;
113 
114 protected:
115  TDirectory(const TDirectory &directory); //Directories cannot be copied
116  void operator=(const TDirectory &); //Directorise cannot be copied
117 
118 public:
119 
120  TDirectory();
121  TDirectory(const char *name, const char *title, Option_t *option="", TDirectory* motherDir = 0);
122  virtual ~TDirectory();
123  static void AddDirectory(Bool_t add=kTRUE);
124  static Bool_t AddDirectoryStatus();
125  virtual void Append(TObject *obj, Bool_t replace = kFALSE);
126  virtual void Add(TObject *obj, Bool_t replace = kFALSE) { Append(obj,replace); }
127  virtual Int_t AppendKey(TKey *) {return 0;}
128  virtual void Browse(TBrowser *b);
129  virtual void Build(TFile* motherFile = 0, TDirectory* motherDir = 0);
130  virtual void Clear(Option_t *option="");
131  virtual TObject *CloneObject(const TObject *obj, Bool_t autoadd = kTRUE);
132  virtual void Close(Option_t *option="");
133  static TDirectory *&CurrentDirectory(); // Return the current directory for this thread.
134  virtual void Copy(TObject &) const { MayNotUse("Copy(TObject &)"); }
135  virtual Bool_t cd(const char *path = 0);
136  virtual void DeleteAll(Option_t *option="");
137  virtual void Delete(const char *namecycle="");
138  virtual void Draw(Option_t *option="");
139  virtual TKey *FindKey(const char * /*keyname*/) const {return 0;}
140  virtual TKey *FindKeyAny(const char * /*keyname*/) const {return 0;}
141  virtual TObject *FindObject(const char *name) const;
142  virtual TObject *FindObject(const TObject *obj) const;
143  virtual TObject *FindObjectAny(const char *name) const;
144  virtual TObject *FindObjectAnyFile(const char * /*name*/) const {return 0;}
145  virtual TObject *Get(const char *namecycle);
146  virtual TDirectory *GetDirectory(const char *namecycle, Bool_t printError = false, const char *funcname = "GetDirectory");
147  template <class T> inline void GetObject(const char* namecycle, T*& ptr) // See TDirectory::Get for information
148  {
149  ptr = (T*)GetObjectChecked(namecycle,TBuffer::GetClass(typeid(T)));
150  }
151  virtual void *GetObjectChecked(const char *namecycle, const char* classname);
152  virtual void *GetObjectChecked(const char *namecycle, const TClass* cl);
153  virtual void *GetObjectUnchecked(const char *namecycle);
154  virtual Int_t GetBufferSize() const {return 0;}
155  virtual TFile *GetFile() const { return 0; }
156  virtual TKey *GetKey(const char * /*name */, Short_t /* cycle */=9999) const {return 0;}
157  virtual TList *GetList() const { return fList; }
158  virtual TList *GetListOfKeys() const { return 0; }
159  virtual TObject *GetMother() const { return fMother; }
160  virtual TDirectory *GetMotherDir() const { return fMother==0 ? 0 : dynamic_cast<TDirectory*>(fMother); }
161  virtual Int_t GetNbytesKeys() const { return 0; }
162  virtual Int_t GetNkeys() const { return 0; }
163  virtual Long64_t GetSeekDir() const { return 0; }
164  virtual Long64_t GetSeekParent() const { return 0; }
165  virtual Long64_t GetSeekKeys() const { return 0; }
166  virtual const char *GetPathStatic() const;
167  virtual const char *GetPath() const;
168  TUUID GetUUID() const {return fUUID;}
169  virtual Bool_t IsFolder() const { return kTRUE; }
170  virtual Bool_t IsModified() const { return kFALSE; }
171  virtual Bool_t IsWritable() const { return kFALSE; }
172  virtual void ls(Option_t *option="") const;
173  virtual TDirectory *mkdir(const char *name, const char *title="");
174  virtual TFile *OpenFile(const char * /*name*/, Option_t * /*option*/ = "",
175  const char * /*ftitle*/ = "", Int_t /*compress*/ = 1,
176  Int_t /*netopt*/ = 0) {return 0;}
177  virtual void Paint(Option_t *option="");
178  virtual void Print(Option_t *option="") const;
179  virtual void Purge(Short_t /*nkeep*/=1) {}
180  virtual void pwd() const;
181  virtual void ReadAll(Option_t * /*option*/="") {}
182  virtual Int_t ReadKeys(Bool_t /*forceRead*/=kTRUE) {return 0;}
183  virtual Int_t ReadTObject(TObject * /*obj*/, const char * /*keyname*/) {return 0;}
184  virtual TObject *Remove(TObject*);
185  virtual void RecursiveRemove(TObject *obj);
186  virtual void rmdir(const char *name);
187  virtual void Save() {}
188  virtual Int_t SaveObjectAs(const TObject * /*obj*/, const char * /*filename*/="", Option_t * /*option*/="") const;
189  virtual void SaveSelf(Bool_t /*force*/ = kFALSE) {}
190  virtual void SetBufferSize(Int_t /* bufsize */) {}
191  virtual void SetModified() {}
192  virtual void SetMother(TObject *mother) {fMother = (TObject*)mother;}
193  virtual void SetName(const char* newname);
194  virtual void SetTRefAction(TObject * /*ref*/, TObject * /*parent*/) {}
195  virtual void SetSeekDir(Long64_t) {}
196  virtual void SetWritable(Bool_t) {}
197  virtual Int_t Sizeof() const {return 0;}
198  virtual Int_t Write(const char * /*name*/=0, Int_t /*opt*/=0, Int_t /*bufsize*/=0){return 0;}
199  virtual Int_t Write(const char * /*name*/=0, Int_t /*opt*/=0, Int_t /*bufsize*/=0) const {return 0;}
200  virtual Int_t WriteTObject(const TObject *obj, const char *name =0, Option_t * /*option*/="", Int_t /*bufsize*/ =0);
201 private:
202  Int_t WriteObject(void *obj, const char* name, Option_t *option="", Int_t bufsize=0); // Intentionaly not implemented.
203 public:
204  template <class T> inline Int_t WriteObject(const T* obj, const char* name, Option_t *option="", Int_t bufsize=0) // see TDirectory::WriteTObject or TDirectoryWriteObjectAny for explanation
205  {
206  return WriteObjectAny(obj,TBuffer::GetClass(typeid(T)),name,option,bufsize);
207  }
208  virtual Int_t WriteObjectAny(const void *, const char * /*classname*/, const char * /*name*/, Option_t * /*option*/="", Int_t /*bufsize*/ =0) {return 0;}
209  virtual Int_t WriteObjectAny(const void *, const TClass * /*cl*/, const char * /*name*/, Option_t * /*option*/="", Int_t /*bufsize*/ =0) {return 0;}
210  virtual void WriteDirHeader() {}
211  virtual void WriteKeys() {}
212 
213  static Bool_t Cd(const char *path);
214  static void DecodeNameCycle(const char *namecycle, char *name, Short_t &cycle, const size_t namesize = 0);
215  static void EncodeNameCycle(char *buffer, const char *name, Short_t cycle);
216 
217  ClassDef(TDirectory,5) //Describe directory structure in memory
218 };
219 
220 #ifndef __CINT__
221 #define gDirectory (TDirectory::CurrentDirectory())
222 
223 #elif defined(__MAKECINT__)
224 // To properly handle the use of gDirectory in header files (in static declarations)
226 #endif
227 
228 #endif
virtual void Draw(Option_t *option="")
Fill Graphics Structure and Paint.
Definition: TDirectory.cxx:631
virtual void Copy(TObject &) const
Copy this to obj.
Definition: TDirectory.h:134
virtual ~TDirectory()
Destructor.
Definition: TDirectory.cxx:93
virtual void ReadAll(Option_t *="")
Definition: TDirectory.h:181
virtual Int_t WriteObjectAny(const void *, const TClass *, const char *, Option_t *="", Int_t=0)
Definition: TDirectory.h:209
virtual TList * GetListOfKeys() const
Definition: TDirectory.h:158
virtual void SetSeekDir(Long64_t)
Definition: TDirectory.h:195
long long Long64_t
Definition: RtypesCore.h:69
virtual void Build(TFile *motherFile=0, TDirectory *motherDir=0)
Initialise directory to defaults.
Definition: TDirectory.cxx:200
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
Definition: TDirectory.cxx:729
const char Option_t
Definition: RtypesCore.h:62
virtual TDirectory * GetMotherDir() const
Definition: TDirectory.h:160
void GetObject(const char *namecycle, T *&ptr)
Definition: TDirectory.h:147
virtual void Print(Option_t *option="") const
Print all objects in the directory.
double T(double x)
Definition: ChebyshevPol.h:34
TList * fList
Definition: TDirectory.h:99
virtual TObject * CloneObject(const TObject *obj, Bool_t autoadd=kTRUE)
Clone an object.
Definition: TDirectory.cxx:266
virtual const char * GetPathStatic() const
Returns the full path of the directory.
Definition: TDirectory.cxx:873
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
Definition: TFile.h:50
virtual TObject * FindObject(const char *name) const
Find object by name in the list of memory objects.
Definition: TDirectory.cxx:647
void FillFullPath(TString &buf) const
Recursive method to fill full path for directory.
Definition: TDirectory.cxx:926
virtual Int_t WriteTObject(const TObject *obj, const char *name=0, Option_t *="", Int_t=0)
See TDirectoryFile::WriteTObject for details.
virtual void SetBufferSize(Int_t)
Definition: TDirectory.h:190
virtual Int_t ReadKeys(Bool_t=kTRUE)
Definition: TDirectory.h:182
Basic string class.
Definition: TString.h:137
virtual Int_t GetNbytesKeys() const
Definition: TDirectory.h:161
int Int_t
Definition: RtypesCore.h:41
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory and return a pointer to the created directory.
Definition: TDirectory.cxx:957
bool Bool_t
Definition: RtypesCore.h:59
virtual void Purge(Short_t=1)
Definition: TDirectory.h:179
const Bool_t kFALSE
Definition: Rtypes.h:92
TContext * fPrevious
Pointer to the previous current directory.
Definition: TDirectory.h:54
virtual TFile * OpenFile(const char *, Option_t *="", const char *="", Int_t=1, Int_t=0)
Definition: TDirectory.h:174
virtual Long64_t GetSeekParent() const
Definition: TDirectory.h:164
virtual Int_t SaveObjectAs(const TObject *, const char *="", Option_t *="") const
Save object in filename, if filename is 0 or "", a file with "objectname.root" is created...
friend class TDirectory
Definition: TDirectory.h:59
virtual void * GetObjectChecked(const char *namecycle, const char *classname)
See documentation of TDirectory::GetObjectCheck(const char *namecycle, const TClass *cl) ...
Definition: TDirectory.cxx:792
This class defines a UUID (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDent...
Definition: TUUID.h:44
TString fPathBuffer
Definition: TDirectory.h:101
#define ClassDef(name, id)
Definition: Rtypes.h:254
virtual Bool_t IsWritable() const
Definition: TDirectory.h:171
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:33
virtual Int_t GetBufferSize() const
Definition: TDirectory.h:154
virtual Int_t Write(const char *=0, Int_t=0, Int_t=0)
Write this object to the current directory.
Definition: TDirectory.h:198
virtual void Save()
Definition: TDirectory.h:187
virtual void Paint(Option_t *option="")
Paint all objects in the directory.
Bool_t cd1(const char *path)
flag to add histograms, graphs,etc to the directory
Definition: TDirectory.cxx:453
static TClass * GetClass(const std::type_info &typeinfo)
Forward to TROOT::GetClass().
Definition: TBuffer.cxx:297
virtual void Close(Option_t *option="")
Delete all objects from memory and directory structure itself.
Definition: TDirectory.cxx:519
virtual void rmdir(const char *name)
Removes subdirectory from the directory When directory is deleted, all keys in all subdirectories wil...
virtual Int_t WriteObjectAny(const void *, const char *, const char *, Option_t *="", Int_t=0)
Definition: TDirectory.h:208
virtual void SetWritable(Bool_t)
Definition: TDirectory.h:196
void MayNotUse(const char *method) const
Use this method to signal that a method (defined in a base class) may not be called in a derived clas...
Definition: TObject.cxx:978
virtual TList * GetList() const
Definition: TDirectory.h:157
virtual TKey * FindKey(const char *) const
Definition: TDirectory.h:139
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition: TKey.h:30
virtual Int_t Sizeof() const
Return size of the TNamed part of the TObject.
Definition: TDirectory.h:197
virtual TFile * GetFile() const
Definition: TDirectory.h:155
virtual void pwd() const
Print the path of the directory.
virtual Long64_t GetSeekKeys() const
Definition: TDirectory.h:165
virtual void Delete(const char *namecycle="")
Delete Objects or/and keys in a directory.
Definition: TDirectory.cxx:575
virtual TObject * FindObjectAnyFile(const char *) const
Definition: TDirectory.h:144
A doubly linked list.
Definition: TList.h:47
virtual void WriteDirHeader()
Definition: TDirectory.h:210
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add objects like histograms, TGraph2D, etc in memory...
Definition: TDirectory.cxx:134
Using a TBrowser one can browse all ROOT objects.
Definition: TBrowser.h:41
TContext * fNext
Pointer to the next TContext in the implied list of context pointing to fPrevious.
Definition: TDirectory.h:55
virtual void Browse(TBrowser *b)
Browse the content of the directory.
Definition: TDirectory.cxx:178
Int_t WriteObject(const T *obj, const char *name, Option_t *option="", Int_t bufsize=0)
Definition: TDirectory.h:204
TContext * fContext
Buffer for GetPath() function.
Definition: TDirectory.h:102
virtual Int_t GetNkeys() const
Definition: TDirectory.h:162
virtual Int_t ReadTObject(TObject *, const char *)
Definition: TDirectory.h:183
TUUID fUUID
Definition: TDirectory.h:100
TDirectory * fDirectory
Definition: TDirectory.h:53
virtual void * GetObjectUnchecked(const char *namecycle)
Return pointer to object identified by namecycle.
Definition: TDirectory.cxx:784
static Bool_t Cd1(const char *path)
Change current directory to "path".
Definition: TDirectory.cxx:492
virtual void Append(TObject *obj, Bool_t replace=kFALSE)
Append object to this directory.
Definition: TDirectory.cxx:153
virtual Long64_t GetSeekDir() const
Definition: TDirectory.h:163
TContext & operator=(TContext &)
short Short_t
Definition: RtypesCore.h:35
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:81
virtual const char * GetPath() const
Returns the full path of the directory.
Definition: TDirectory.cxx:911
virtual void WriteKeys()
Definition: TDirectory.h:211
virtual void Clear(Option_t *option="")
Delete all objects from a Directory list.
Definition: TDirectory.cxx:510
TObject * fMother
Definition: TDirectory.h:98
virtual TKey * FindKeyAny(const char *) const
Definition: TDirectory.h:140
virtual void SaveSelf(Bool_t=kFALSE)
Definition: TDirectory.h:189
virtual Int_t AppendKey(TKey *)
Definition: TDirectory.h:127
virtual TObject * GetMother() const
Definition: TDirectory.h:159
virtual Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects)...
Definition: TDirectory.h:169
virtual void SetName(const char *newname)
Set the name for directory If the directory name is changed after the directory was written once...
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
static Bool_t Cd(const char *path)
Change current directory to "path".
Definition: TDirectory.cxx:479
virtual TKey * GetKey(const char *, Short_t=9999) const
Definition: TDirectory.h:156
Int_t WriteObject(void *obj, const char *name, Option_t *option="", Int_t bufsize=0)
static void EncodeNameCycle(char *buffer, const char *name, Short_t cycle)
Encode the name and cycle into buffer like: "aap;2".
Describe directory structure in memory.
Definition: TDirectory.h:44
static TDirectory *& CurrentDirectory()
Return the current directory for the current thread.
Definition: TDirectory.cxx:318
static Bool_t AddDirectoryStatus()
Static function: see TDirectory::AddDirectory for more comments.
Definition: TDirectory.cxx:142
static void DecodeNameCycle(const char *namecycle, char *name, Short_t &cycle, const size_t namesize=0)
Decode a namecycle "aap;2" into name "aap" and cycle "2".
Mother of all ROOT objects.
Definition: TObject.h:37
#define R__EXTERN
Definition: DllImport.h:27
TContext(TDirectory *previous, TDirectory *newCurrent)
Definition: TDirectory.h:61
virtual Int_t Write(const char *=0, Int_t=0, Int_t=0) const
Write this object to the current directory.
Definition: TDirectory.h:199
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
Definition: TDirectory.cxx:435
TContext(TDirectory *newCurrent)
Definition: TDirectory.h:76
virtual void DeleteAll(Option_t *option="")
Delete all objects from memory.
Definition: TDirectory.cxx:548
virtual void ls(Option_t *option="") const
List Directory contents.
TUUID GetUUID() const
Definition: TDirectory.h:168
virtual Bool_t IsModified() const
Definition: TDirectory.h:170
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
Definition: TDirectory.cxx:338
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
#define gDirectory
Definition: TDirectory.h:221
void RegisterContext(TContext *ctxt)
Register a TContext pointing to this TDirectory object.
const Bool_t kTRUE
Definition: Rtypes.h:91
virtual void SetMother(TObject *mother)
Definition: TDirectory.h:192
virtual void RecursiveRemove(TObject *obj)
Recursively remove object from a Directory.
virtual void Add(TObject *obj, Bool_t replace=kFALSE)
Definition: TDirectory.h:126
char name[80]
Definition: TGX11.cxx:109
virtual void CleanTargets()
Clean the pointers to this object (gDirectory, TContext, etc.).
Definition: TDirectory.cxx:212
virtual void SetModified()
Definition: TDirectory.h:191
void UnregisterContext(TContext *ctxt)
UnRegister a TContext pointing to this TDirectory object.
static Bool_t fgAddDirectory
Pointer to a list of TContext object pointing to this TDirectory.
Definition: TDirectory.h:103
void CdNull()
Set the current directory to null.
virtual void SetTRefAction(TObject *, TObject *)
Definition: TDirectory.h:194
virtual TObject * FindObjectAny(const char *name) const
Find object by name in the list of memory objects of the current directory or its sub-directories...
Definition: TDirectory.cxx:659