ROOT logo
// @(#)root/io:$Id: TDirectoryFile.h 24013 2008-05-26 12:07:40Z brun $
// Author: Rene Brun   22/01/2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TDirectoryFile
#define ROOT_TDirectoryFile


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TDirectoryFile                                                       //
//                                                                      //
// Describe directory structure in a ROOT file.                         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TDirectory
#include "TDirectory.h"
#endif

class TList;
class TBrowser;
class TKey;
class TFile;

class TDirectoryFile : public TDirectory {

protected:
   Bool_t      fModified;        //true if directory has been modified
   Bool_t      fWritable;        //true if directory is writable
   TDatime     fDatimeC;         //Date and time when directory is created
   TDatime     fDatimeM;         //Date and time of last modification
   Int_t       fNbytesKeys;      //Number of bytes for the keys
   Int_t       fNbytesName;      //Number of bytes in TNamed at creation time
   Int_t       fBufferSize;      //Default buffer size to create new TKeys
   Long64_t    fSeekDir;         //Location of directory on file
   Long64_t    fSeekParent;      //Location of parent directory on file
   Long64_t    fSeekKeys;        //Location of Keys record on file
   TFile      *fFile;            //pointer to current file in memory
   TList      *fKeys;            //Pointer to keys list in memory

   virtual void         CleanTargets();

private:
   TDirectoryFile(const TDirectoryFile &directory);  //Directories cannot be copied
   void operator=(const TDirectoryFile &); //Directories cannot be copied

public:
   // TDirectory status bits
   enum { kCloseDirectory = BIT(7) };

   TDirectoryFile();
   TDirectoryFile(const char *name, const char *title, Option_t *option="", TDirectory* motherDir = 0);
   virtual ~TDirectoryFile();
   virtual void        Append(TObject *obj, Bool_t replace = kFALSE);
           void        Add(TObject *obj, Bool_t replace = kFALSE) { Append(obj,replace); }
           Int_t       AppendKey(TKey *key);
   virtual void        Browse(TBrowser *b);
           void        Build(TFile* motherFile = 0, TDirectory* motherDir = 0);
   virtual TObject    *CloneObject(const TObject *obj, Bool_t autoadd = kTRUE);
   virtual void        Close(Option_t *option="");
   virtual void        Copy(TObject &) const { MayNotUse("Copy(TObject &)"); }
   virtual Bool_t      cd(const char *path = 0);
   virtual void        Delete(const char *namecycle="");
   virtual void        FillBuffer(char *&buffer);
   virtual TKey       *FindKey(const char *keyname) const;
   virtual TKey       *FindKeyAny(const char *keyname) const;
   virtual TObject    *FindObjectAny(const char *name) const;
   virtual TObject    *FindObjectAnyFile(const char *name) const;
   virtual TObject    *Get(const char *namecycle);
   virtual TDirectory *GetDirectory(const char *namecycle, Bool_t printError = false, const char *funcname = "GetDirectory");
   template <class T> inline void GetObject(const char* namecycle, T*& ptr) // See TDirectory::Get for information
      {
         ptr = (T*)GetObjectChecked(namecycle,TBuffer::GetClass(typeid(T)));
      }
   virtual void       *GetObjectChecked(const char *namecycle, const char* classname);
   virtual void       *GetObjectChecked(const char *namecycle, const TClass* cl);
   virtual void       *GetObjectUnchecked(const char *namecycle);
   virtual Int_t       GetBufferSize() const;
   const TDatime      &GetCreationDate() const { return fDatimeC; }
   virtual TFile      *GetFile() const { return fFile; }
   virtual TKey       *GetKey(const char *name, Short_t cycle=9999) const;
   virtual TList      *GetListOfKeys() const { return fKeys; }
   const TDatime      &GetModificationDate() const { return fDatimeM; }
   virtual Int_t       GetNbytesKeys() const { return fNbytesKeys; }
   virtual Int_t       GetNkeys() const { return fKeys->GetSize(); }
   virtual Long64_t    GetSeekDir() const { return fSeekDir; }
   virtual Long64_t    GetSeekParent() const { return fSeekParent; }
   virtual Long64_t    GetSeekKeys() const { return fSeekKeys; }
   Bool_t              IsModified() const { return fModified; }
   Bool_t              IsWritable() const { return fWritable; }
   virtual void        ls(Option_t *option="") const;
   virtual TDirectory *mkdir(const char *name, const char *title="");
   virtual TFile      *OpenFile(const char *name, Option_t *option= "",
                            const char *ftitle = "", Int_t compress = 1,
                            Int_t netopt = 0);
   virtual void        Purge(Short_t nkeep=1);
   virtual void        ReadAll(Option_t *option="");
   virtual Int_t       ReadKeys(Bool_t forceRead=kTRUE);
   virtual Int_t       ReadTObject(TObject *obj, const char *keyname);
   virtual void        rmdir(const char *name);
   virtual void        Save();
   virtual void        SaveSelf(Bool_t force = kFALSE);
   virtual Int_t       SaveObjectAs(const TObject *obj, const char *filename="", Option_t *option="") const;
   virtual void        SetBufferSize(Int_t bufsize);
   void                SetModified() {fModified = kTRUE;}
   void                SetSeekDir(Long64_t v) { fSeekDir = v; }
   virtual void        SetTRefAction(TObject *ref, TObject *parent);
   void                SetWritable(Bool_t writable=kTRUE);
   virtual Int_t       Sizeof() const;
   virtual Int_t       Write(const char *name=0, Int_t opt=0, Int_t bufsize=0);
   virtual Int_t       Write(const char *name=0, Int_t opt=0, Int_t bufsize=0) const ;
   virtual Int_t       WriteTObject(const TObject *obj, const char *name=0, Option_t *option="", Int_t bufsize=0);
   virtual Int_t       WriteObjectAny(const void *obj, const char *classname, const char *name, Option_t *option="", Int_t bufsize=0);
   virtual Int_t       WriteObjectAny(const void *obj, const TClass *cl, const char *name, Option_t *option="", Int_t bufsize=0);
   virtual void        WriteDirHeader();
   virtual void        WriteKeys();

   ClassDef(TDirectoryFile,5)  //Describe directory structure in a ROOT file
};

#endif
 TDirectoryFile.h:1
 TDirectoryFile.h:2
 TDirectoryFile.h:3
 TDirectoryFile.h:4
 TDirectoryFile.h:5
 TDirectoryFile.h:6
 TDirectoryFile.h:7
 TDirectoryFile.h:8
 TDirectoryFile.h:9
 TDirectoryFile.h:10
 TDirectoryFile.h:11
 TDirectoryFile.h:12
 TDirectoryFile.h:13
 TDirectoryFile.h:14
 TDirectoryFile.h:15
 TDirectoryFile.h:16
 TDirectoryFile.h:17
 TDirectoryFile.h:18
 TDirectoryFile.h:19
 TDirectoryFile.h:20
 TDirectoryFile.h:21
 TDirectoryFile.h:22
 TDirectoryFile.h:23
 TDirectoryFile.h:24
 TDirectoryFile.h:25
 TDirectoryFile.h:26
 TDirectoryFile.h:27
 TDirectoryFile.h:28
 TDirectoryFile.h:29
 TDirectoryFile.h:30
 TDirectoryFile.h:31
 TDirectoryFile.h:32
 TDirectoryFile.h:33
 TDirectoryFile.h:34
 TDirectoryFile.h:35
 TDirectoryFile.h:36
 TDirectoryFile.h:37
 TDirectoryFile.h:38
 TDirectoryFile.h:39
 TDirectoryFile.h:40
 TDirectoryFile.h:41
 TDirectoryFile.h:42
 TDirectoryFile.h:43
 TDirectoryFile.h:44
 TDirectoryFile.h:45
 TDirectoryFile.h:46
 TDirectoryFile.h:47
 TDirectoryFile.h:48
 TDirectoryFile.h:49
 TDirectoryFile.h:50
 TDirectoryFile.h:51
 TDirectoryFile.h:52
 TDirectoryFile.h:53
 TDirectoryFile.h:54
 TDirectoryFile.h:55
 TDirectoryFile.h:56
 TDirectoryFile.h:57
 TDirectoryFile.h:58
 TDirectoryFile.h:59
 TDirectoryFile.h:60
 TDirectoryFile.h:61
 TDirectoryFile.h:62
 TDirectoryFile.h:63
 TDirectoryFile.h:64
 TDirectoryFile.h:65
 TDirectoryFile.h:66
 TDirectoryFile.h:67
 TDirectoryFile.h:68
 TDirectoryFile.h:69
 TDirectoryFile.h:70
 TDirectoryFile.h:71
 TDirectoryFile.h:72
 TDirectoryFile.h:73
 TDirectoryFile.h:74
 TDirectoryFile.h:75
 TDirectoryFile.h:76
 TDirectoryFile.h:77
 TDirectoryFile.h:78
 TDirectoryFile.h:79
 TDirectoryFile.h:80
 TDirectoryFile.h:81
 TDirectoryFile.h:82
 TDirectoryFile.h:83
 TDirectoryFile.h:84
 TDirectoryFile.h:85
 TDirectoryFile.h:86
 TDirectoryFile.h:87
 TDirectoryFile.h:88
 TDirectoryFile.h:89
 TDirectoryFile.h:90
 TDirectoryFile.h:91
 TDirectoryFile.h:92
 TDirectoryFile.h:93
 TDirectoryFile.h:94
 TDirectoryFile.h:95
 TDirectoryFile.h:96
 TDirectoryFile.h:97
 TDirectoryFile.h:98
 TDirectoryFile.h:99
 TDirectoryFile.h:100
 TDirectoryFile.h:101
 TDirectoryFile.h:102
 TDirectoryFile.h:103
 TDirectoryFile.h:104
 TDirectoryFile.h:105
 TDirectoryFile.h:106
 TDirectoryFile.h:107
 TDirectoryFile.h:108
 TDirectoryFile.h:109
 TDirectoryFile.h:110
 TDirectoryFile.h:111
 TDirectoryFile.h:112
 TDirectoryFile.h:113
 TDirectoryFile.h:114
 TDirectoryFile.h:115
 TDirectoryFile.h:116
 TDirectoryFile.h:117
 TDirectoryFile.h:118
 TDirectoryFile.h:119
 TDirectoryFile.h:120
 TDirectoryFile.h:121
 TDirectoryFile.h:122
 TDirectoryFile.h:123
 TDirectoryFile.h:124
 TDirectoryFile.h:125
 TDirectoryFile.h:126
 TDirectoryFile.h:127
 TDirectoryFile.h:128
 TDirectoryFile.h:129