// @(#)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_TKeyXML
#define ROOT_TKeyXML

#ifndef ROOT_TXMLEngine
#include "TXMLEngine.h"
#endif
#ifndef ROOT_TKey
#include "TKey.h"
#endif

class TXMLFile;

class TKeyXML : public TKey {

private:
   TKeyXML(const TKeyXML&);            // TKeyXML objects are not copiable.
   TKeyXML& operator=(const TKeyXML&); // TKeyXML objects are not copiable.

protected:
   TKeyXML();

public:
   TKeyXML(TDirectory* mother, Long64_t keyid, const TObject* obj, const char* name = 0, const char* title = 0);
   TKeyXML(TDirectory* mother, Long64_t keyid, const void* obj, const TClass* cl, const char* name, const char* title = 0);
   TKeyXML(TDirectory* mother, Long64_t keyid, XMLNodePointer_t keynode);
   virtual ~TKeyXML();

   // redefined TKey Methods
   virtual void      Delete(Option_t *option="");
   virtual void      DeleteBuffer() {}
   virtual void      FillBuffer(char *&) {}
   virtual char     *GetBuffer() const { return 0; }
   virtual Long64_t  GetSeekKey() const  { return fKeyNode ? 1024 : 0;}
   virtual Long64_t  GetSeekPdir() const { return fKeyNode ? 1024 : 0;}
   //virtual ULong_t   Hash() const { return 0; }
   virtual void      Keep() {}
   //virtual void      ls(Option_t* ="") const;
   //virtual void      Print(Option_t* ="") const {}

   virtual Int_t     Read(TObject* tobj);
   virtual TObject  *ReadObj();
   virtual TObject  *ReadObjWithBuffer(char *bufferRead);
   virtual void     *ReadObjectAny(const TClass *expectedClass);

   virtual void      ReadBuffer(char *&) {}
   virtual Bool_t    ReadFile() { return kTRUE; }
   virtual void      SetBuffer() { fBuffer = 0; }
   virtual Int_t     WriteFile(Int_t =1, TFile* = 0) { return 0; }

   // TKeyXML specific methods

   XMLNodePointer_t  KeyNode() const { return fKeyNode; }
   Long64_t          GetKeyId() const { return fKeyId; }
   Bool_t            IsSubdir() const { return fSubdir; }
   void              SetSubir() { fSubdir = kTRUE; }
   void              UpdateObject(TObject* obj);
   void              UpdateAttributes();

protected:
   virtual Int_t     Read(const char *name) { return TKey::Read(name); }
   void              StoreObject(const void* obj, const TClass* cl);
   void              StoreKeyAttributes();
   TXMLEngine*       XMLEngine();

   void*             XmlReadAny(void* obj, const TClass* expectedClass);

   XMLNodePointer_t  fKeyNode;  //! node with stored object
   Long64_t          fKeyId;    //! unique identifier of key for search methods
   Bool_t            fSubdir;   //! indicates that key contains subdirectory

   ClassDef(TKeyXML,1) // a special TKey for XML files
};

#endif
 TKeyXML.h:1
 TKeyXML.h:2
 TKeyXML.h:3
 TKeyXML.h:4
 TKeyXML.h:5
 TKeyXML.h:6
 TKeyXML.h:7
 TKeyXML.h:8
 TKeyXML.h:9
 TKeyXML.h:10
 TKeyXML.h:11
 TKeyXML.h:12
 TKeyXML.h:13
 TKeyXML.h:14
 TKeyXML.h:15
 TKeyXML.h:16
 TKeyXML.h:17
 TKeyXML.h:18
 TKeyXML.h:19
 TKeyXML.h:20
 TKeyXML.h:21
 TKeyXML.h:22
 TKeyXML.h:23
 TKeyXML.h:24
 TKeyXML.h:25
 TKeyXML.h:26
 TKeyXML.h:27
 TKeyXML.h:28
 TKeyXML.h:29
 TKeyXML.h:30
 TKeyXML.h:31
 TKeyXML.h:32
 TKeyXML.h:33
 TKeyXML.h:34
 TKeyXML.h:35
 TKeyXML.h:36
 TKeyXML.h:37
 TKeyXML.h:38
 TKeyXML.h:39
 TKeyXML.h:40
 TKeyXML.h:41
 TKeyXML.h:42
 TKeyXML.h:43
 TKeyXML.h:44
 TKeyXML.h:45
 TKeyXML.h:46
 TKeyXML.h:47
 TKeyXML.h:48
 TKeyXML.h:49
 TKeyXML.h:50
 TKeyXML.h:51
 TKeyXML.h:52
 TKeyXML.h:53
 TKeyXML.h:54
 TKeyXML.h:55
 TKeyXML.h:56
 TKeyXML.h:57
 TKeyXML.h:58
 TKeyXML.h:59
 TKeyXML.h:60
 TKeyXML.h:61
 TKeyXML.h:62
 TKeyXML.h:63
 TKeyXML.h:64
 TKeyXML.h:65
 TKeyXML.h:66
 TKeyXML.h:67
 TKeyXML.h:68
 TKeyXML.h:69
 TKeyXML.h:70
 TKeyXML.h:71
 TKeyXML.h:72
 TKeyXML.h:73
 TKeyXML.h:74
 TKeyXML.h:75
 TKeyXML.h:76
 TKeyXML.h:77
 TKeyXML.h:78
 TKeyXML.h:79
 TKeyXML.h:80
 TKeyXML.h:81
 TKeyXML.h:82
 TKeyXML.h:83
 TKeyXML.h:84
 TKeyXML.h:85