ROOT logo
// @(#)root/xml:$Id$
// Author: Sergey Linev  10.05.2004

/*************************************************************************
 * Copyright (C) 1995-2004, 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_TXMLFile
#define ROOT_TXMLFile

#ifndef ROOT_TXMLEngine
#include "TXMLEngine.h"
#endif
#ifndef ROOT_TFile
#include "TFile.h"
#endif
#ifndef ROOT_TXMLSetup
#include "TXMLSetup.h"
#endif


class TKeyXML;
class TList;
class TStreamerElement;
class TStreamerInfo;


class TXMLFile : public TFile, public TXMLSetup {

protected:

   void             InitXmlFile(Bool_t create);
   // Interface to basic system I/O routines
   virtual Int_t    SysOpen(const char*, Int_t, UInt_t) { return 0; }
   virtual Int_t    SysClose(Int_t) { return 0; }
   virtual Int_t    SysRead(Int_t, void*, Int_t) { return 0; }
   virtual Int_t    SysWrite(Int_t, const void*, Int_t) { return 0; }
   virtual Long64_t SysSeek(Int_t, Long64_t, Int_t) { return 0; }
   virtual Int_t    SysStat(Int_t, Long_t*, Long64_t*, Long_t*, Long_t*) { return 0; }
   virtual Int_t    SysSync(Int_t) { return 0; }

   // Overwrite methods for directory I/O
   virtual Long64_t DirCreateEntry(TDirectory*);
   virtual Int_t    DirReadKeys(TDirectory*);
   virtual void     DirWriteKeys(TDirectory*);
   virtual void     DirWriteHeader(TDirectory*);

private:
   //let the compiler do the job. gcc complains when the following line is activated
   //TXMLFile(const TXMLFile &) {}            //Files cannot be copied
   void operator=(const TXMLFile &);

public:
   TXMLFile();
   TXMLFile(const char* filename, Option_t* option = "read", const char* title = "title", Int_t compression = 1);
   virtual ~TXMLFile();

   virtual void      Close(Option_t *option=""); // *MENU*
   virtual TKey*     CreateKey(TDirectory* mother, const TObject* obj, const char* name, Int_t bufsize);
   virtual TKey*     CreateKey(TDirectory* mother, const void* obj, const TClass* cl, const char* name, Int_t bufsize);
   virtual void      DrawMap(const char* ="*",Option_t* ="") {} 
   virtual void      FillBuffer(char* &) {}
   virtual void      Flush() {}

   virtual Long64_t  GetEND() const { return 0; }
   virtual Int_t     GetErrno() const { return 0; }
   virtual void      ResetErrno() const {}

   virtual Int_t     GetNfree() const { return 0; }
   virtual Int_t     GetNbytesInfo() const {return 0; }
   virtual Int_t     GetNbytesFree() const {return 0; }
   virtual Long64_t  GetSeekFree() const {return 0; }
   virtual Long64_t  GetSeekInfo() const {return 0; }
   virtual Long64_t  GetSize() const { return 0; }
   virtual TList*    GetStreamerInfoList();
   Int_t             GetIOVersion() const { return fIOVersion; }          

   virtual Bool_t    IsOpen() const;

   virtual void      MakeFree(Long64_t, Long64_t) {}
   virtual void      MakeProject(const char *, const char* ="*", Option_t* ="new") {} // *MENU*
   virtual void      Map() {} // 
   virtual void      Paint(Option_t* ="") {}
   virtual void      Print(Option_t* ="") const {}
   virtual Bool_t    ReadBuffer(char*, Int_t) { return kFALSE; }
   virtual Bool_t    ReadBuffer(char*, Long64_t, Int_t) { return kFALSE; }
   virtual void      ReadFree() {}
   virtual Int_t     Recover() { return 0; }
   virtual Int_t     ReOpen(Option_t *mode);
   virtual void      Seek(Long64_t, ERelativeTo=kBeg) {}

   virtual void      SetEND(Long64_t) {}
   virtual Int_t     Sizeof() const { return 0; }

   virtual void      UseCache(Int_t = 10, Int_t = 0) {}
   virtual Bool_t    WriteBuffer(const char*, Int_t) { return kFALSE; }
   virtual Int_t     Write(const char* =0, Int_t=0, Int_t=0) { return 0; }
   virtual Int_t     Write(const char* =0, Int_t=0, Int_t=0) const { return 0; }
   virtual void      WriteFree() {}
   virtual void      WriteHeader() {}
   virtual void      WriteStreamerInfo();

   // XML specific functions
   
   virtual void      SetXmlLayout(EXMLLayout layout);
   virtual void      SetStoreStreamerInfos(Bool_t iConvert = kTRUE);
   virtual void      SetUsedDtd(Bool_t use = kTRUE);
   virtual void      SetUseNamespaces(Bool_t iUseNamespaces = kTRUE);
   
   Bool_t            AddXmlComment(const char* comment);
   Bool_t            AddXmlStyleSheet(const char* href, 
                                      const char* type = "text/css",
                                      const char* title = 0,
                                      int alternate = -1,
                                      const char* media = 0,
                                      const char* charset = 0);
   Bool_t            AddXmlLine(const char* line);                                   

   TXMLEngine*       XML() { return fXML; } 

protected:
   // functions to store streamer infos
   
   void              StoreStreamerElement(XMLNodePointer_t node, TStreamerElement* elem);
   void              ReadStreamerElement(XMLNodePointer_t node, TStreamerInfo* info);

   Bool_t            ReadFromFile();
   Int_t             ReadKeysList(TDirectory* dir, XMLNodePointer_t topnode);
   TKeyXML*          FindDirKey(TDirectory* dir);
   TDirectory*       FindKeyDir(TDirectory* mother, Long64_t keyid);
   void              CombineNodesTree(TDirectory* dir, XMLNodePointer_t topnode, Bool_t dolink);

   void              SaveToFile();

   static void       ProduceFileNames(const char* filename, TString& fname, TString& dtdname);

   XMLDocPointer_t   fDoc;                  //!

   XMLNodePointer_t  fStreamerInfoNode;     //!  pointer of node with streamer info data
   
   TXMLEngine*       fXML;                  //! object for interface with xml library
   
   Int_t             fIOVersion;            //! indicates format of ROOT xml file
   
   Long64_t          fKeyCounter;           //! counter of created keys, used for keys id

ClassDef(TXMLFile, 3)  //ROOT file in XML format
};



#endif

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