TXMLFile.h

Go to the documentation of this file.
00001 // @(#)root/xml:$Id: TXMLFile.h 34444 2010-07-16 02:17:39Z pcanal $
00002 // Author: Sergey Linev  10.05.2004
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TXMLFile
00013 #define ROOT_TXMLFile
00014 
00015 #ifndef ROOT_TXMLEngine
00016 #include "TXMLEngine.h"
00017 #endif
00018 #ifndef ROOT_TFile
00019 #include "TFile.h"
00020 #endif
00021 #ifndef ROOT_TXMLSetup
00022 #include "TXMLSetup.h"
00023 #endif
00024 
00025 
00026 class TKeyXML;
00027 class TList;
00028 class TStreamerElement;
00029 class TStreamerInfo;
00030 
00031 
00032 class TXMLFile : public TFile, public TXMLSetup {
00033 
00034 protected:
00035 
00036    void             InitXmlFile(Bool_t create);
00037    // Interface to basic system I/O routines
00038    virtual Int_t    SysOpen(const char*, Int_t, UInt_t) { return 0; }
00039    virtual Int_t    SysClose(Int_t) { return 0; }
00040    virtual Int_t    SysRead(Int_t, void*, Int_t) { return 0; }
00041    virtual Int_t    SysWrite(Int_t, const void*, Int_t) { return 0; }
00042    virtual Long64_t SysSeek(Int_t, Long64_t, Int_t) { return 0; }
00043    virtual Int_t    SysStat(Int_t, Long_t*, Long64_t*, Long_t*, Long_t*) { return 0; }
00044    virtual Int_t    SysSync(Int_t) { return 0; }
00045 
00046    // Overwrite methods for directory I/O
00047    virtual Long64_t DirCreateEntry(TDirectory*);
00048    virtual Int_t    DirReadKeys(TDirectory*);
00049    virtual void     DirWriteKeys(TDirectory*);
00050    virtual void     DirWriteHeader(TDirectory*);
00051 
00052 private:
00053    //let the compiler do the job. gcc complains when the following line is activated
00054    //TXMLFile(const TXMLFile &) {}            //Files cannot be copied
00055    void operator=(const TXMLFile &);
00056 
00057 public:
00058    TXMLFile();
00059    TXMLFile(const char* filename, Option_t* option = "read", const char* title = "title", Int_t compression = 1);
00060    virtual ~TXMLFile();
00061 
00062    virtual void      Close(Option_t *option=""); // *MENU*
00063    virtual TKey*     CreateKey(TDirectory* mother, const TObject* obj, const char* name, Int_t bufsize);
00064    virtual TKey*     CreateKey(TDirectory* mother, const void* obj, const TClass* cl, const char* name, Int_t bufsize);
00065    virtual void      DrawMap(const char* ="*",Option_t* ="") {} 
00066    virtual void      FillBuffer(char* &) {}
00067    virtual void      Flush() {}
00068 
00069    virtual Long64_t  GetEND() const { return 0; }
00070    virtual Int_t     GetErrno() const { return 0; }
00071    virtual void      ResetErrno() const {}
00072 
00073    virtual Int_t     GetNfree() const { return 0; }
00074    virtual Int_t     GetNbytesInfo() const {return 0; }
00075    virtual Int_t     GetNbytesFree() const {return 0; }
00076    virtual Long64_t  GetSeekFree() const {return 0; }
00077    virtual Long64_t  GetSeekInfo() const {return 0; }
00078    virtual Long64_t  GetSize() const { return 0; }
00079    virtual TList*    GetStreamerInfoList();
00080    Int_t             GetIOVersion() const { return fIOVersion; }          
00081 
00082    virtual Bool_t    IsOpen() const;
00083 
00084    virtual void      MakeFree(Long64_t, Long64_t) {}
00085    virtual void      MakeProject(const char *, const char* ="*", Option_t* ="new") {} // *MENU*
00086    virtual void      Map() {} // 
00087    virtual void      Paint(Option_t* ="") {}
00088    virtual void      Print(Option_t* ="") const {}
00089    virtual Bool_t    ReadBuffer(char*, Int_t) { return kFALSE; }
00090    virtual Bool_t    ReadBuffer(char*, Long64_t, Int_t) { return kFALSE; }
00091    virtual void      ReadFree() {}
00092    virtual Int_t     Recover() { return 0; }
00093    virtual Int_t     ReOpen(Option_t *mode);
00094    virtual void      Seek(Long64_t, ERelativeTo=kBeg) {}
00095 
00096    virtual void      SetEND(Long64_t) {}
00097    virtual Int_t     Sizeof() const { return 0; }
00098 
00099    virtual void      UseCache(Int_t = 10, Int_t = 0) {}
00100    virtual Bool_t    WriteBuffer(const char*, Int_t) { return kFALSE; }
00101    virtual Int_t     Write(const char* =0, Int_t=0, Int_t=0) { return 0; }
00102    virtual Int_t     Write(const char* =0, Int_t=0, Int_t=0) const { return 0; }
00103    virtual void      WriteFree() {}
00104    virtual void      WriteHeader() {}
00105    virtual void      WriteStreamerInfo();
00106 
00107    // XML specific functions
00108    
00109    virtual void      SetXmlLayout(EXMLLayout layout);
00110    virtual void      SetStoreStreamerInfos(Bool_t iConvert = kTRUE);
00111    virtual void      SetUsedDtd(Bool_t use = kTRUE);
00112    virtual void      SetUseNamespaces(Bool_t iUseNamespaces = kTRUE);
00113    
00114    Bool_t            AddXmlComment(const char* comment);
00115    Bool_t            AddXmlStyleSheet(const char* href, 
00116                                       const char* type = "text/css",
00117                                       const char* title = 0,
00118                                       int alternate = -1,
00119                                       const char* media = 0,
00120                                       const char* charset = 0);
00121    Bool_t            AddXmlLine(const char* line);                                   
00122 
00123    TXMLEngine*       XML() { return fXML; } 
00124 
00125 protected:
00126    // functions to store streamer infos
00127    
00128    void              StoreStreamerElement(XMLNodePointer_t node, TStreamerElement* elem);
00129    void              ReadStreamerElement(XMLNodePointer_t node, TStreamerInfo* info);
00130 
00131    Bool_t            ReadFromFile();
00132    Int_t             ReadKeysList(TDirectory* dir, XMLNodePointer_t topnode);
00133    TKeyXML*          FindDirKey(TDirectory* dir);
00134    TDirectory*       FindKeyDir(TDirectory* mother, Long64_t keyid);
00135    void              CombineNodesTree(TDirectory* dir, XMLNodePointer_t topnode, Bool_t dolink);
00136 
00137    void              SaveToFile();
00138 
00139    static void       ProduceFileNames(const char* filename, TString& fname, TString& dtdname);
00140 
00141    XMLDocPointer_t   fDoc;                  //!
00142 
00143    XMLNodePointer_t  fStreamerInfoNode;     //!  pointer of node with streamer info data
00144    
00145    TXMLEngine*       fXML;                  //! object for interface with xml library
00146    
00147    Int_t             fIOVersion;            //! indicates format of ROOT xml file
00148    
00149    Long64_t          fKeyCounter;           //! counter of created keys, used for keys id
00150    
00151 ClassDef(TXMLFile, 2)  //ROOT file in XML format
00152 };
00153 
00154 
00155 
00156 #endif
00157 

Generated on Tue Jul 5 14:28:31 2011 for ROOT_528-00b_version by  doxygen 1.5.1