00001
00002
00003
00004
00005
00006
00007
00008
00009
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
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
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
00054
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="");
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") {}
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
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
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;
00144
00145 TXMLEngine* fXML;
00146
00147 Int_t fIOVersion;
00148
00149 Long64_t fKeyCounter;
00150
00151 ClassDef(TXMLFile, 2)
00152 };
00153
00154
00155
00156 #endif
00157