ROOT logo
#ifndef TTREESTREAM_H
#define TTREESTREAM_H
///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  TTreeSRedirector                                                              //                      

#include "TObject.h"
#include "TString.h"
#include "TTree.h"
#include "TDirectory.h"
#include "TFile.h"
class TObjArray;
class TTree;
class TDataType;

class TTreeDataElement: public TNamed {
  friend class TTreeStream;
 public:
  TTreeDataElement(Char_t type);
  TTreeDataElement(TDataType* type);
  TTreeDataElement(TClass* cl);
  void   SetPointer(void* pointer) {fPointer=pointer;} 
  Char_t GetType() const {return fType;}
 protected:

  TTreeDataElement(const TTreeDataElement & tde);
  TTreeDataElement & operator=(const TTreeDataElement & tde);

  Char_t  fType;     // type of data element
  TDataType *fDType; //data type pointer 
  TClass    *fClass; //data type pointer
  void * fPointer;  // pointer to element
  ClassDef(TTreeDataElement,2)
};

class TTreeStream: public TNamed {
  friend class TTreeSRedirector;
public:
  TTreeStream(const char *treename, TTree* externalTree=NULL);
  ~TTreeStream();
  void Close();
  static void Test();
  Int_t CheckIn(Char_t type, void *pointer);  
  //Int_t CheckIn(const char *type, void *pointer);
  Int_t CheckIn(TObject *o);
  void BuildTree();
  void Fill();
  Double_t GetSize(){ return fTree->GetZipBytes();}
  TTreeStream& Endl();
  //
  TTreeStream  &operator<<(Bool_t   &b){CheckIn('B',&b);return *this;}
  TTreeStream  &operator<<(Char_t   &c){CheckIn('B',&c);return *this;}
  TTreeStream  &operator<<(UChar_t  &c){CheckIn('b',&c);return *this;}
  TTreeStream  &operator<<(Short_t  &h){CheckIn('S',&h);return *this;}
  TTreeStream  &operator<<(UShort_t &h){CheckIn('s',&h);return *this;}
  TTreeStream  &operator<<(Int_t    &i){CheckIn('I',&i);return *this;}
  TTreeStream  &operator<<(UInt_t   &i){CheckIn('i',&i);return *this;}
  TTreeStream  &operator<<(Long_t   &l){CheckIn('L',&l);return *this;}
  TTreeStream  &operator<<(ULong_t  &l){CheckIn('l',&l);return *this;}
  TTreeStream  &operator<<(Long64_t &l){CheckIn('L',&l);return *this;}
  TTreeStream  &operator<<(ULong64_t &l){CheckIn('l',&l);return *this;}
  TTreeStream  &operator<<(Float_t   &f){CheckIn('F',&f);return *this;}
  TTreeStream  &operator<<(Double_t  &d){CheckIn('D',&d);return *this;}
  TTreeStream  &operator<<(TObject*o){CheckIn(o);return *this;} 
  TTreeStream  &operator<<(const Char_t *name);
  TTree * GetTree() const { return fTree;}
 protected:
  //

  TTreeStream(const TTreeStream & ts);
  TTreeStream & operator=(const TTreeStream & ts);

  TObjArray *fElements; //array of elements
  TObjArray *fBranches; //pointers to branches
  TTree *fTree;         //data storage
  Int_t fCurrentIndex;  //index of current element
  Int_t fId;            //identifier of layout
  TString fNextName;    //name for next entry
  Int_t   fNextNameCounter; //next name counter
  Int_t   fStatus;      //status of the layout
  ClassDef(TTreeStream,1)
};



class TTreeSRedirector: public TObject { 
public:
  TTreeSRedirector(const char *fname="", const char * option="update");
  virtual ~TTreeSRedirector();
  void Close();
  static void Test();
  static void Test2();
  static void UnitTestSparse(Double_t scale, Int_t testEntries);
  static void UnitTest(Int_t testEntries=5000);
  void StoreObject(TObject* object);
  TFile * GetFile() {return fDirectory->GetFile();}
  TDirectory * GetDirectory() {return fDirectory;}
  virtual   TTreeStream  &operator<<(Int_t id);
  virtual   TTreeStream  &operator<<(const char *name);
  void      SetDirectory(TDirectory *sfile); 
  void      SetFile(TFile *sfile) {SetDirectory(sfile);} 
  void SetExternalTree(const char* name, TTree* externalTree);
 
private:

  TTreeSRedirector(const TTreeSRedirector & tsr);
  TTreeSRedirector & operator=(const TTreeSRedirector & tsr);

  TDirectory* fDirectory;        //file
  Bool_t      fDirectoryOwner;   //do we own the directory?
  TObjArray *fDataLayouts;   //array of data layouts
  ClassDef(TTreeSRedirector,2) 
};




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