// @(#)root/treeplayer:$Id$ // Author: Philippe Canal 01/06/2004 /************************************************************************* * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers and al. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #ifndef ROOT_TBranchProxy #define ROOT_TBranchProxy #ifndef ROOT_TBranchProxyDirector #include "TBranchProxyDirector.h" #endif #ifndef ROOT_TTree #include "TTree.h" #endif #ifndef ROOT_TBranch #include "TBranch.h" #endif #ifndef ROOT_TClonesArray #include "TClonesArray.h" #endif #ifndef ROOT_TString #include "TString.h" #endif #ifndef ROOT_Riostream #include "Riostream.h" #endif #ifndef ROOT_TError #include "TError.h" #endif #ifndef ROOT_TVirtualCollectionProxy #include "TVirtualCollectionProxy.h" #endif #include #include class TBranch; class TStreamerElement; // Note we could protect the arrays more by introducing a class TArrayWrapper which somehow knows // its internal dimensions and check for them ... // template TArrayWrapper { // public: // TArrayWrapper(void *where, int dim1); // const T operator[](int i) { // if (i>=dim1) return 0; // return where[i]; // }; // }; // 2D array would actually be a wrapper of a wrapper i.e. has a method TArrayWrapper operator[](int i); namespace ROOT { //_______________________________________________ // String builder to be used in the constructors. class TBranchProxyHelper { public: TString fName; TBranchProxyHelper(const char *left,const char *right = 0) : fName() { if (left) { fName = left; if (strlen(left)&&right && fName[fName.Length()-1]!='.') fName += "."; } if (right) { fName += right; } } operator const char*() { return fName.Data(); }; }; class TBranchProxy { protected: TBranchProxyDirector *fDirector; // contain pointer to TTree and entry to be read Bool_t fInitialized; const TString fBranchName; // name of the branch to read TBranchProxy *fParent; // Proxy to a parent object const TString fDataMember; // name of the (eventual) data member being proxied const Bool_t fIsMember; // true if we proxy an unsplit data member Bool_t fIsClone; // true if we proxy the inside of a TClonesArray Bool_t fIsaPointer; // true if we proxy a data member of pointer type TString fClassName; // class name of the object pointed to by the branch TClass *fClass; // class name of the object pointed to by the branch TStreamerElement *fElement; Int_t fMemberOffset; Int_t fOffset; // Offset inside the object TBranch *fBranch; // branch to read TBranch *fBranchCount; // eventual auxiliary branch (for example holding the size) TTree *fLastTree; // TTree containing the last entry read Long64_t fRead; // Last entry read void *fWhere; // memory location of the data TVirtualCollectionProxy *fCollection; // Handle to the collection containing the data chunk. public: virtual void Print(); TBranchProxy(); TBranchProxy(TBranchProxyDirector* boss, const char* top, const char* name = 0); TBranchProxy(TBranchProxyDirector* boss, const char *top, const char *name, const char *membername); TBranchProxy(TBranchProxyDirector* boss, TBranchProxy *parent, const char* membername, const char* top = 0, const char* name = 0); virtual ~TBranchProxy(); TBranchProxy* GetProxy() { return this; } void Reset(); Bool_t Setup(); Bool_t IsInitialized() { return fLastTree && (fLastTree == fDirector->GetTree()); } Bool_t IsaPointer() const { return fIsaPointer; } Bool_t Read() { if (fDirector==0) return false; if (fDirector->GetReadEntry()!=fRead) { if (!IsInitialized()) { if (!Setup()) { Error("Read","%s",Form("Unable to initialize %s\n",fBranchName.Data())); return kFALSE; } } Bool_t result = kTRUE; if (fParent) { result = fParent->Read(); } else { if (fBranchCount) { result &= (-1 != fBranchCount->GetEntry(fDirector->GetReadEntry())); } result &= (-1 != fBranch->GetEntry(fDirector->GetReadEntry())); } fRead = fDirector->GetReadEntry(); return result; } else { return IsInitialized(); } } Bool_t ReadEntries() { if (fDirector==0) return false; if (fDirector->GetReadEntry()!=fRead) { if (!IsInitialized()) { if (!Setup()) { Error("Read","%s",Form("Unable to initialize %s\n",fBranchName.Data())); return false; } } if (fParent) fParent->ReadEntries(); else { if (fBranchCount) { fBranchCount->TBranch::GetEntry(fDirector->GetReadEntry()); } fBranch->TBranch::GetEntry(fDirector->GetReadEntry()); } // NO - we only read the entries, not the contained objects! // fRead = fDirector->GetReadEntry(); } return IsInitialized(); } TClass *GetClass() { if (fDirector==0) return 0; if (fDirector->GetReadEntry()!=fRead) { if (!IsInitialized()) { if (!Setup()) { return 0; } } } return fClass; } void* GetWhere() const { return fWhere; } // intentionally non-virtual TVirtualCollectionProxy *GetCollection() { return fCollection; } // protected: virtual void *GetStart(UInt_t /*i*/=0) { // return the address of the start of the object being proxied. Assumes // that Setup() has been called. if (fParent) { fWhere = ((unsigned char*)fParent->GetStart()) + fMemberOffset; } if (IsaPointer()) { if (fWhere) return *(void**)fWhere; else return 0; } else { return fWhere; } } virtual void *GetClaStart(UInt_t i=0) { // return the address of the start of the object being proxied. Assumes // that Setup() has been called. Assumes the object containing this data // member is held in TClonesArray. char *location; if (fIsClone) { TClonesArray *tca; tca = (TClonesArray*)GetStart(); if (!tca || tca->GetLast()<(Int_t)i) return 0; location = (char*)tca->At(i); return location; } else if (fParent) { //tcaloc = ((unsigned char*)fParent->GetStart()); location = (char*)fParent->GetClaStart(i); } else { void *tcaloc; tcaloc = fWhere; TClonesArray *tca; tca = (TClonesArray*)tcaloc; if (tca->GetLast()<(Int_t)i) return 0; location = (char*)tca->At(i); } if (location) location += fOffset; else return 0; if (IsaPointer()) { return *(void**)(location); } else { return location; } } virtual void *GetStlStart(UInt_t i=0) { // return the address of the start of the object being proxied. Assumes // that Setup() has been called. Assumes the object containing this data // member is held in STL Collection. char *location=0; if (fCollection) { if (fCollection->Size()At(i); // return location; } else if (fParent) { //tcaloc = ((unsigned char*)fParent->GetStart()); location = (char*)fParent->GetStlStart(i); } else { R__ASSERT(0); //void *tcaloc; //tcaloc = fWhere; //TClonesArray *tca; //tca = (TClonesArray*)tcaloc; //if (tca->GetLast()At(i); } if (location) location += fOffset; else return 0; if (IsaPointer()) { return *(void**)(location); } else { return location; } } Int_t GetOffset() { return fOffset; } }; //____________________________________________________________________________________________ // Concrete Implementation of the branch proxy around the data members which are array of char class TArrayCharProxy : public TBranchProxy { public: void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) cout << "value? " << *(unsigned char*)GetStart() << endl; } TArrayCharProxy() : TBranchProxy() {} TArrayCharProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TArrayCharProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TArrayCharProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TArrayCharProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TArrayCharProxy() {}; unsigned char At(UInt_t i) { static unsigned char default_val; if (!Read()) return default_val; // should add out-of bound test unsigned char* str = (unsigned char*)GetStart(); return str[i]; } unsigned char operator [](Int_t i) { return At(i); } unsigned char operator [](UInt_t i) { return At(i); } operator const char*() { if (!Read()) return ""; return (const char*)GetStart(); } const char* Data() { if (!Read()) return ""; return (const char*)GetStart(); } const char* c_str() { if (!Read()) return ""; return (const char*)GetStart(); } operator std::string() { if (!Read()) return ""; return std::string((const char*)GetStart()); } }; //_______________________________________________________ // Base class for the proxy around object in TClonesArray. class TClaProxy : public TBranchProxy { public: void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) { if (IsaPointer()) { cout << "location " << *(TClonesArray**)fWhere << endl; } else { cout << "location " << fWhere << endl; } } } TClaProxy() : TBranchProxy() {} TClaProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TClaProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TClaProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TClaProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TClaProxy() {}; const TClonesArray* GetPtr() { if (!Read()) return 0; return (TClonesArray*)GetStart(); } Int_t GetEntries() { if (!ReadEntries()) return 0; TClonesArray *arr = (TClonesArray*)GetStart(); if (arr) return arr->GetEntries(); return 0; } const TClonesArray* operator->() { return GetPtr(); } }; //_______________________________________________ // Base class for the proxy around STL containers. class TStlProxy : public TBranchProxy { public: void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) { if (IsaPointer()) { cout << "location " << *(TClonesArray**)fWhere << endl; } else { cout << "location " << fWhere << endl; } } } TStlProxy() : TBranchProxy() {} TStlProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TStlProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TStlProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TStlProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TStlProxy() {}; const TVirtualCollectionProxy* GetPtr() { if (!Read()) return 0; return GetCollection(); } Int_t GetEntries() { if (!ReadEntries()) return 0; return GetPtr()->Size(); } const TVirtualCollectionProxy* operator->() { return GetPtr(); } }; //______________________________________ // Template of the proxy around objects. template class TImpProxy : public TBranchProxy { public: void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) cout << "value? " << *(T*)GetStart() << endl; } TImpProxy() : TBranchProxy() {}; TImpProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TImpProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TImpProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TImpProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TImpProxy() {}; operator T() { if (!Read()) return 0; return *(T*)GetStart(); } // Make sure that the copy methods are really private #ifdef private #undef private #define private_was_replaced #endif // For now explicitly disable copying into the value (i.e. the proxy is read-only). private: TImpProxy(T); TImpProxy &operator=(T); #ifdef private_was_replaced #define private public #endif }; //____________________________________________ // Helper template to be able to determine and // use array dimentsions. template struct TArrayType { typedef T type_t; typedef T array_t[d]; }; //____________________________________________ // Helper class for proxy around multi dimension array template struct TArrayType { typedef T type_t; typedef T array_t; }; //____________________________________________ // Helper class for proxy around multi dimension array template struct TMultiArrayType { typedef typename T::type_t type_t; typedef typename T::array_t array_t[d]; }; //____________________________________________ // Template for concrete implementation of proxy around array of T template class TArrayProxy : public TBranchProxy { public: TArrayProxy() : TBranchProxy() {} TArrayProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TArrayProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TArrayProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TArrayProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TArrayProxy() {}; typedef typename T::array_t array_t; typedef typename T::type_t type_t; void Print() { TBranchProxy::Print(); cout << "fWhere " << GetWhere() << endl; if (GetWhere()) cout << "value? " << *(type_t*)GetWhere() << endl; } const array_t &At(UInt_t i) { static array_t default_val; if (!Read()) return default_val; // should add out-of bound test array_t *arr = 0; arr = (array_t*)((type_t*)(GetStart())); if (arr) return arr[i]; else return default_val; } const array_t &operator [](Int_t i) { return At(i); } const array_t &operator [](UInt_t i) { return At(i); } }; //_____________________________________________________________________________________ // Template of the Concrete Implementation of the branch proxy around TClonesArray of T template class TClaImpProxy : public TBranchProxy { public: void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) cout << "value? " << *(T*)GetStart() << endl; } TClaImpProxy() : TBranchProxy() {}; TClaImpProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TClaImpProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TClaImpProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TClaImpProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TClaImpProxy() {}; const T& At(UInt_t i) { static T default_val; if (!Read()) return default_val; if (fWhere==0) return default_val; T *temp = (T*)GetClaStart(i); if (temp) return *temp; else return default_val; } const T& operator [](Int_t i) { return At(i); } const T& operator [](UInt_t i) { return At(i); } // Make sure that the copy methods are really private #ifdef private #undef private #define private_was_replaced #endif // For now explicitly disable copying into the value (i.e. the proxy is read-only). private: TClaImpProxy(T); TClaImpProxy &operator=(T); #ifdef private_was_replaced #define private public #endif }; //_________________________________________________________________________________________ // Template of the Concrete Implementation of the branch proxy around an stl container of T template class TStlImpProxy : public TBranchProxy { public: void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) cout << "value? " << *(T*)GetStart() << endl; } TStlImpProxy() : TBranchProxy() {}; TStlImpProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TStlImpProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TStlImpProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TStlImpProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TStlImpProxy() {}; const T& At(UInt_t i) { static T default_val; if (!Read()) return default_val; if (fWhere==0) return default_val; T *temp = (T*)GetStlStart(i); if (temp) return *temp; else return default_val; } const T& operator [](Int_t i) { return At(i); } const T& operator [](UInt_t i) { return At(i); } // Make sure that the copy methods are really private #ifdef private #undef private #define private_was_replaced #endif // For now explicitly disable copying into the value (i.e. the proxy is read-only). private: TStlImpProxy(T); TStlImpProxy &operator=(T); #ifdef private_was_replaced #define private public #endif }; //_________________________________________________________________________________________________ // Template of the Concrete Implementation of the branch proxy around an TClonesArray of array of T template class TClaArrayProxy : public TBranchProxy { public: typedef typename T::array_t array_t; typedef typename T::type_t type_t; void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) cout << "value? " << *(type_t*)GetStart() << endl; } TClaArrayProxy() : TBranchProxy() {} TClaArrayProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TClaArrayProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TClaArrayProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TClaArrayProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TClaArrayProxy() {}; /* const */ array_t *At(UInt_t i) { static array_t default_val; if (!Read()) return &default_val; if (fWhere==0) return &default_val; return (array_t*)GetClaStart(i); } /* const */ array_t *operator [](Int_t i) { return At(i); } /* const */ array_t *operator [](UInt_t i) { return At(i); } }; //__________________________________________________________________________________________________ // Template of the Concrete Implementation of the branch proxy around an stl container of array of T template class TStlArrayProxy : public TBranchProxy { public: typedef typename T::array_t array_t; typedef typename T::type_t type_t; void Print() { TBranchProxy::Print(); cout << "fWhere " << fWhere << endl; if (fWhere) cout << "value? " << *(type_t*)GetStart() << endl; } TStlArrayProxy() : TBranchProxy() {} TStlArrayProxy(TBranchProxyDirector *director, const char *name) : TBranchProxy(director,name) {}; TStlArrayProxy(TBranchProxyDirector *director, const char *top, const char *name) : TBranchProxy(director,top,name) {}; TStlArrayProxy(TBranchProxyDirector *director, const char *top, const char *name, const char *data) : TBranchProxy(director,top,name,data) {}; TStlArrayProxy(TBranchProxyDirector *director, TBranchProxy *parent, const char *name, const char* top = 0, const char* mid = 0) : TBranchProxy(director,parent, name, top, mid) {}; ~TStlArrayProxy() {}; /* const */ array_t *At(UInt_t i) { static array_t default_val; if (!Read()) return &default_val; if (fWhere==0) return &default_val; return (array_t*)GetStlStart(i); } /* const */ array_t *operator [](Int_t i) { return At(i); } /* const */ array_t *operator [](UInt_t i) { return At(i); } }; //TImpProxy d; typedef TImpProxy TDoubleProxy; // Concrete Implementation of the branch proxy around the data members which are double typedef TImpProxy TDouble32Proxy; // Concrete Implementation of the branch proxy around the data members which are double32 typedef TImpProxy TFloatProxy; // Concrete Implementation of the branch proxy around the data members which are float typedef TImpProxy TFloat16Proxy; // Concrete Implementation of the branch proxy around the data members which are float16 typedef TImpProxy TUIntProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned int typedef TImpProxy TULongProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned long typedef TImpProxy TULong64Proxy; // Concrete Implementation of the branch proxy around the data members which are unsigned long long typedef TImpProxy TUShortProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned short typedef TImpProxy TUCharProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned char typedef TImpProxy TIntProxy; // Concrete Implementation of the branch proxy around the data members which are int typedef TImpProxy TLongProxy; // Concrete Implementation of the branch proxy around the data members which are long typedef TImpProxy TLong64Proxy; // Concrete Implementation of the branch proxy around the data members which are long long typedef TImpProxy TShortProxy; // Concrete Implementation of the branch proxy around the data members which are short typedef TImpProxy TCharProxy; // Concrete Implementation of the branch proxy around the data members which are char typedef TImpProxy TBoolProxy; // Concrete Implementation of the branch proxy around the data members which are bool typedef TArrayProxy > TArrayDoubleProxy; // Concrete Implementation of the branch proxy around the data members which are array of double typedef TArrayProxy > TArrayDouble32Proxy; // Concrete Implementation of the branch proxy around the data members which are array of double32 typedef TArrayProxy > TArrayFloatProxy; // Concrete Implementation of the branch proxy around the data members which are array of float typedef TArrayProxy > TArrayFloat16Proxy; // Concrete Implementation of the branch proxy around the data members which are array of float16 typedef TArrayProxy > TArrayUIntProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned int typedef TArrayProxy > TArrayULongProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned long typedef TArrayProxy > TArrayULong64Proxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned long long typedef TArrayProxy > TArrayUShortProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned short typedef TArrayProxy > TArrayUCharProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned char typedef TArrayProxy > TArrayIntProxy; // Concrete Implementation of the branch proxy around the data members which are array of int typedef TArrayProxy > TArrayLongProxy; // Concrete Implementation of the branch proxy around the data members which are array of long typedef TArrayProxy > TArrayLong64Proxy; // Concrete Implementation of the branch proxy around the data members which are array of long long typedef TArrayProxy > TArrayShortProxy; // Concrete Implementation of the branch proxy around the data members which are array of short //specialized ! typedef TArrayProxy > TArrayCharProxy; // Concrete Implementation of the branch proxy around the data members which are array of char typedef TArrayProxy > TArrayBoolProxy; // Concrete Implementation of the branch proxy around the data members which are array of bool typedef TClaImpProxy TClaDoubleProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are double typedef TClaImpProxy TClaDouble32Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are double32 typedef TClaImpProxy TClaFloatProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are float typedef TClaImpProxy TClaFloat16Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are float16 typedef TClaImpProxy TClaUIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned int typedef TClaImpProxy TClaULongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned long typedef TClaImpProxy TClaULong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned long long typedef TClaImpProxy TClaUShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned short typedef TClaImpProxy TClaUCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned char typedef TClaImpProxy TClaIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are int typedef TClaImpProxy TClaLongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are long typedef TClaImpProxy TClaLong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are long long typedef TClaImpProxy TClaShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are short typedef TClaImpProxy TClaCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are char typedef TClaImpProxy TClaBoolProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are bool typedef TClaArrayProxy > TClaArrayDoubleProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of double typedef TClaArrayProxy > TClaArrayDouble32Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of double32 typedef TClaArrayProxy > TClaArrayFloatProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of float typedef TClaArrayProxy > TClaArrayFloat16Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of float16 typedef TClaArrayProxy > TClaArrayUIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned int typedef TClaArrayProxy > TClaArrayULongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned long typedef TClaArrayProxy > TClaArrayULong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned long long typedef TClaArrayProxy > TClaArrayUShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned short typedef TClaArrayProxy > TClaArrayUCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of nsigned char typedef TClaArrayProxy > TClaArrayIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of int typedef TClaArrayProxy > TClaArrayLongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of long typedef TClaArrayProxy > TClaArrayLong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of long long typedef TClaArrayProxy > TClaArrayShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of short typedef TClaArrayProxy > TClaArrayCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of char typedef TClaArrayProxy > TClaArrayBoolProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of bool //specialized ! typedef TClaArrayProxy > TClaArrayCharProxy; typedef TStlImpProxy TStlDoubleProxy; // Concrete Implementation of the branch proxy around an stl container of double typedef TStlImpProxy TStlDouble32Proxy; // Concrete Implementation of the branch proxy around an stl container of double32 typedef TStlImpProxy TStlFloatProxy; // Concrete Implementation of the branch proxy around an stl container of float typedef TStlImpProxy TStlFloat16Proxy; // Concrete Implementation of the branch proxy around an stl container of float16_t typedef TStlImpProxy TStlUIntProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned int typedef TStlImpProxy TStlULongProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned long typedef TStlImpProxy TStlULong64Proxy; // Concrete Implementation of the branch proxy around an stl container of unsigned long long typedef TStlImpProxy TStlUShortProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned short typedef TStlImpProxy TStlUCharProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned char typedef TStlImpProxy TStlIntProxy; // Concrete Implementation of the branch proxy around an stl container of int typedef TStlImpProxy TStlLongProxy; // Concrete Implementation of the branch proxy around an stl container of long typedef TStlImpProxy TStlLong64Proxy; // Concrete Implementation of the branch proxy around an stl container of long long typedef TStlImpProxy TStlShortProxy; // Concrete Implementation of the branch proxy around an stl container of short typedef TStlImpProxy TStlCharProxy; // Concrete Implementation of the branch proxy around an stl container of char typedef TStlImpProxy TStlBoolProxy; // Concrete Implementation of the branch proxy around an stl container of bool typedef TStlArrayProxy > TStlArrayDoubleProxy; // Concrete Implementation of the branch proxy around an stl container of double typedef TStlArrayProxy > TStlArrayDouble32Proxy; // Concrete Implementation of the branch proxy around an stl container of double32 typedef TStlArrayProxy > TStlArrayFloatProxy; // Concrete Implementation of the branch proxy around an stl container of float typedef TStlArrayProxy > TStlArrayFloat16Proxy; // Concrete Implementation of the branch proxy around an stl container of float16_t typedef TStlArrayProxy > TStlArrayUIntProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned int typedef TStlArrayProxy > TStlArrayULongProxy; // Concrete Implementation of the branch proxy around an stl container of usigned long typedef TStlArrayProxy > TStlArrayULong64Proxy; // Concrete Implementation of the branch proxy around an stl contained of unsigned long long typedef TStlArrayProxy > TStlArrayUShortProxy; // Concrete Implementation of the branch proxy around an stl container of unisgned short typedef TStlArrayProxy > TStlArrayUCharProxy; // Concrete Implementation of the branch proxy around an stl container of unsingned char typedef TStlArrayProxy > TStlArrayIntProxy; // Concrete Implementation of the branch proxy around an stl container of int typedef TStlArrayProxy > TStlArrayLongProxy; // Concrete Implementation of the branch proxy around an stl container of long typedef TStlArrayProxy > TStlArrayLong64Proxy; // Concrete Implementation of the branch proxy around an stl container of long long typedef TStlArrayProxy > TStlArrayShortProxy; // Concrete Implementation of the branch proxy around an stl container of UShort_t typedef TStlArrayProxy > TStlArrayCharProxy; // Concrete Implementation of the branch proxy around an stl container of char typedef TStlArrayProxy > TStlArrayBoolProxy; // Concrete Implementation of the branch proxy around an stl container of bool } // namespace ROOT #endif