ROOT logo
// @(#)root/io:$Id$
// Author: Rene Brun   12/10/2000

/*************************************************************************
 * Copyright (C) 1995-2000, 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_TStreamerInfo
#define ROOT_TStreamerInfo


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TStreamerInfo                                                        //
//                                                                      //
// Describe Streamer information for one class version                  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
#if __cplusplus >= 201103L
#include <atomic>
#endif

#ifndef ROOT_TVirtualStreamerInfo
#include "TVirtualStreamerInfo.h"
#endif

#ifndef ROOT_ThreadLocalStorage
#include "ThreadLocalStorage.h"
#endif

#include "TVirtualCollectionProxy.h"

#if (defined(_MSC_VER) && (_MSC_VER < 1300)) || defined(R__ALPHA) || \
    (defined(R__MACOSX) && defined(R__GNU) && __GNUC__==3 && __GNUC_MINOR__<=3) || \
    (defined(R__MACOSX) && defined(__xlC__))
#error C++ template support is insufficient (member function template)
#endif

class TFile;
class TClass;
class TClonesArray;
class TDataMember;
class TMemberStreamer;
class TStreamerElement;
class TStreamerBasicType;
class TClassStreamer;
class TVirtualArray;
namespace ROOT { class TCollectionProxyInfo; }

namespace TStreamerInfoActions { class TActionSequence; }

class TStreamerInfo : public TVirtualStreamerInfo {

   class TCompInfo {
   // Class used to cache information (see fComp)
   private:
      // TCompInfo(const TCompInfo&) = default;
      // TCompInfo& operator=(const TCompInfo&) = default;
   public:
      Int_t             fType;
      Int_t             fNewType;
      Int_t             fOffset;
      Int_t             fLength;
      TStreamerElement *fElem;     // Not Owned
      ULong_t           fMethod;
      TClass           *fClass;    // Not Owned
      TClass           *fNewClass; // Not Owned
      TString           fClassName;
      TMemberStreamer  *fStreamer; // Not Owned
      TCompInfo() : fType(-1), fNewType(0), fOffset(0), fLength(0), fElem(0), fMethod(0),
                    fClass(0), fNewClass(0), fClassName(), fStreamer(0) {};
      ~TCompInfo() {};
      void Update(const TClass *oldcl, TClass *newcl);
   };
   friend class TStreamerInfoActions::TActionSequence;

public:
   // make the opaque pointer public.
   typedef TCompInfo TCompInfo_t;

protected:
   //---------------------------------------------------------------------------
   // Adapter class used to handle streaming collection of pointers
   //---------------------------------------------------------------------------
   class TPointerCollectionAdapter
   {
   public:
      TPointerCollectionAdapter( TVirtualCollectionProxy *proxy ):
         fProxy( proxy ) {}

      char* operator[]( UInt_t idx ) const
      {
         char **el = (char**)fProxy->At(idx);
         return *el;
      }
   private:
      TVirtualCollectionProxy *fProxy;
   };

private:
   UInt_t            fCheckSum;          //checksum of original class
   Int_t             fClassVersion;      //Class version identifier
   Int_t             fOnFileClassVersion;//!Class version identifier as stored on file.
   Int_t             fNumber;            //!Unique identifier
   Int_t             fSize;              //!size of the persistent class
   Int_t             fNdata;             //!number of optimized elements
   Int_t             fNfulldata;         //!number of elements
   Int_t             fNslots;            //!total numbrer of slots in fComp.
   TCompInfo        *fComp;              //![fNslots with less than fElements->GetEntries()*1.5 used] Compiled info
   TCompInfo       **fCompOpt;           //![fNdata]
   TCompInfo       **fCompFull;          //![fElements->GetEntries()]
   TClass           *fClass;             //!pointer to class
   TObjArray        *fElements;          //Array of TStreamerElements
   Version_t         fOldVersion;        //! Version of the TStreamerInfo object read from the file
   Int_t             fNVirtualInfoLoc;   //! Number of virtual info location to update.
   ULong_t          *fVirtualInfoLoc;    //![fNVirtualInfoLoc] Location of the pointer to the TStreamerInfo inside the object (when emulated)
#if __cplusplus >= 201103L
   std::atomic<ULong_t> fLiveCount;      //! Number of outstanding pointer to this StreamerInfo.
#else
   ULong_t           fLiveCount;         //! Number of outstanding pointer to this StreamerInfo.
#endif
   TStreamerInfoActions::TActionSequence *fReadObjectWise;        //! List of read action resulting from the compilation.
   TStreamerInfoActions::TActionSequence *fReadMemberWise;        //! List of read action resulting from the compilation for use in member wise streaming.
   TStreamerInfoActions::TActionSequence *fReadMemberWiseVecPtr;  //! List of read action resulting from the compilation for use in member wise streaming.
   TStreamerInfoActions::TActionSequence *fWriteObjectWise;       //! List of write action resulting from the compilation.
   TStreamerInfoActions::TActionSequence *fWriteMemberWise;       //! List of write action resulting from the compilation for use in member wise streaming.
   TStreamerInfoActions::TActionSequence *fWriteMemberWiseVecPtr; //! List of write action resulting from the compilation for use in member wise streaming.

#if __cplusplus >= 201103L
   static std::atomic<Int_t>             fgCount;     //Number of TStreamerInfo instances
#else
   static  Int_t     fgCount;            //Number of TStreamerInfo instances
#endif

   template <typename T> static T GetTypedValueAux(Int_t type, void *ladd, int k, Int_t len);
   static void       PrintValueAux(char *ladd, Int_t atype, TStreamerElement * aElement, Int_t aleng, Int_t *count);

   UInt_t            GenerateIncludes(FILE *fp, char *inclist, const TList *extrainfos);
   void              GenerateDeclaration(FILE *fp, FILE *sfp, const TList *subClasses, Bool_t top = kTRUE);
   void              InsertArtificialElements(const TObjArray *rules);
   void              DestructorImpl(void* p, Bool_t dtorOnly);

private:
   TStreamerInfo(const TStreamerInfo&);            // TStreamerInfo are copiable.  Not Implemented.
   TStreamerInfo& operator=(const TStreamerInfo&); // TStreamerInfo are copiable.  Not Implemented.
   void AddReadAction(TStreamerInfoActions::TActionSequence *readSequence, Int_t index, TCompInfo *compinfo);
   void AddWriteAction(TStreamerInfoActions::TActionSequence *writeSequence, Int_t index, TCompInfo *compinfo);
   void AddReadMemberWiseVecPtrAction(TStreamerInfoActions::TActionSequence *readSequence, Int_t index, TCompInfo *compinfo);
   void AddWriteMemberWiseVecPtrAction(TStreamerInfoActions::TActionSequence *writeSequence, Int_t index, TCompInfo *compinfo);

public:

   //status bits
   enum { kCannotOptimize        = BIT(12),
          kIgnoreTObjectStreamer = BIT(13),  // eventhough BIT(13) is taken up by TObject (to preserverse forward compatibility)
          kRecovered             = BIT(14),
          kNeedCheck             = BIT(15),
          kIsCompiled            = BIT(16),
          kBuildOldUsed          = BIT(17)
   };

   enum EReadWrite {
      kBase        =  0,  kOffsetL = 20,  kOffsetP = 40,  kCounter =  6,  kCharStar = 7,
      kChar        =  1,  kShort   =  2,  kInt     =  3,  kLong    =  4,  kFloat    = 5,
      kDouble      =  8,  kDouble32=  9,
      kLegacyChar  = 10,  // Equal to TDataType's kchar
      kUChar       = 11,  kUShort  = 12,  kUInt    = 13,  kULong   = 14,  kBits     = 15,
      kLong64      = 16,  kULong64 = 17,  kBool    = 18,  kFloat16 = 19,
      kObject      = 61,  kAny     = 62,  kObjectp = 63,  kObjectP = 64,  kTString  = 65,
      kTObject     = 66,  kTNamed  = 67,  kAnyp    = 68,  kAnyP    = 69,  kAnyPnoVT = 70,
      kSTLp        = 71,
      kSkip        = 100, kSkipL = 120, kSkipP   = 140,
      kConv        = 200, kConvL = 220, kConvP   = 240,
      kSTL         = 300, kSTLstring = 365,
      kStreamer    = 500, kStreamLoop = 501,
      kCache       = 600,  // Cache the value in memory than is not part of the object but is accessible via a SchemaRule
      kArtificial  = 1000,
      kCacheNew    = 1001,
      kCacheDelete = 1002,
      kMissing     = 99999
   };

// Some comments about EReadWrite
// kBase    : base class element
// kOffsetL : fixed size array
// kOffsetP : pointer to object
// kCounter : counter for array size
// kCharStar: pointer to array of char
// kBits    : TObject::fBits in case of a referenced object
// kObject  : Class  derived from TObject
// kObjectp : Class* derived from TObject and with    comment field //->Class
// kObjectP : Class* derived from TObject and with NO comment field //->Class
// kAny     : Class  not derived from TObject
// kAnyp    : Class* not derived from TObject with    comment field //->Class
// kAnyP    : Class* not derived from TObject with NO comment field //->Class
// kAnyPnoVT: Class* not derived from TObject with NO comment field //->Class and Class has NO virtual table
// kSTLp    : Pointer to STL container.
// kTString : TString, special case
// kTObject : TObject, special case
// kTNamed  : TNamed , special case



   TStreamerInfo();
   TStreamerInfo(TClass *cl);
   virtual            ~TStreamerInfo();
   void                Build();
   void                BuildCheck(TFile *file = 0);
   void                BuildEmulated(TFile *file);
   void                BuildOld();
   virtual Bool_t      BuildFor( const TClass *cl );
   void                CallShowMembers(void* obj, TMemberInspector &insp) const;
   void                Clear(Option_t *);
   TObject            *Clone(const char *newname = "") const;
   Bool_t              CompareContent(TClass *cl,TVirtualStreamerInfo *info, Bool_t warn, Bool_t complete, TFile *file);
   void                Compile();
   void                ComputeSize();
   void                ForceWriteInfo(TFile *file, Bool_t force=kFALSE);
   Int_t               GenerateHeaderFile(const char *dirname, const TList *subClasses = 0, const TList *extrainfos = 0);
   TClass             *GetActualClass(const void *obj) const;
   TClass             *GetClass() const {return fClass;}
   UInt_t              GetCheckSum() const {return fCheckSum;}
   UInt_t              GetCheckSum(TClass::ECheckSum code) const;
   Int_t               GetClassVersion() const {return fClassVersion;}
   Int_t               GetDataMemberOffset(TDataMember *dm, TMemberStreamer *&streamer) const;
   TObjArray          *GetElements() const {return fElements;}
   TStreamerElement   *GetElem(Int_t id) const {return fComp[id].fElem;}  // Return the element for the list of optimized elements (max GetNdata())
   TStreamerElement   *GetElement(Int_t id) const {return (TStreamerElement*)fElements->At(id);} // Return the element for the complete list of elements (max GetElements()->GetEntries())
   Int_t               GetElementOffset(Int_t id) const {return fCompFull[id]->fOffset;}
   TStreamerInfoActions::TActionSequence *GetReadMemberWiseActions(Bool_t forCollection) { return forCollection ? fReadMemberWiseVecPtr : fReadMemberWise; }
   TStreamerInfoActions::TActionSequence *GetReadObjectWiseActions() { return fReadObjectWise; }
   TStreamerInfoActions::TActionSequence *GetWriteMemberWiseActions(Bool_t forCollection) { return forCollection ? fWriteMemberWiseVecPtr : fWriteMemberWise; }
   TStreamerInfoActions::TActionSequence *GetWriteObjectWiseActions() { return fWriteObjectWise; }
   Int_t               GetNdata()   const {return fNdata;}
   Int_t               GetNelement() const { return fElements->GetEntries(); }
   Int_t               GetNumber()  const {return fNumber;}
   Int_t               GetLength(Int_t id) const {return fComp[id].fLength;}
   ULong_t             GetMethod(Int_t id) const {return fComp[id].fMethod;}
   Int_t               GetNewType(Int_t id) const {return fComp[id].fNewType;}
   Int_t               GetOffset(const char *) const;
   Int_t               GetOffset(Int_t id) const {return fComp[id].fOffset;}
   Version_t           GetOldVersion() const {return fOldVersion;}
   Int_t               GetOnFileClassVersion() const {return fOnFileClassVersion;}
   Int_t               GetSize()    const;
   Int_t               GetSizeElements()    const;
   TStreamerElement   *GetStreamerElement(const char*datamember, Int_t& offset) const;
   TStreamerElement   *GetStreamerElementReal(Int_t i, Int_t j) const;
   Int_t               GetType(Int_t id)   const {return fComp[id].fType;}
   template <typename T> T GetTypedValue(char *pointer, Int_t i, Int_t j, Int_t len) const;
   template <typename T> T GetTypedValueClones(TClonesArray *clones, Int_t i, Int_t j, Int_t k, Int_t eoffset) const;
   template <typename T> T GetTypedValueSTL(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const;
   template <typename T> T GetTypedValueSTLP(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const;
   Double_t            GetValue(char *pointer, Int_t i, Int_t j, Int_t len) const { return GetTypedValue<Double_t>(pointer, i, j, len); }
   Double_t            GetValueClones(TClonesArray *clones, Int_t i, Int_t j, Int_t k, Int_t eoffset) const { return GetTypedValueClones<Double_t>(clones, i, j, k, eoffset); }
   Double_t            GetValueSTL(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const { return GetTypedValueSTL<Double_t>(cont, i, j, k, eoffset); }
   Double_t            GetValueSTLP(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const { return GetTypedValueSTLP<Double_t>(cont, i, j, k, eoffset); }
   void                ls(Option_t *option="") const;
   Bool_t              MatchLegacyCheckSum(UInt_t checksum) const;
   TVirtualStreamerInfo *NewInfo(TClass *cl) {return new TStreamerInfo(cl);}
   void               *New(void *obj = 0);
   void               *NewArray(Long_t nElements, void* ary = 0);
   void                Destructor(void* p, Bool_t dtorOnly = kFALSE);
   void                DeleteArray(void* p, Bool_t dtorOnly = kFALSE);
   void                PrintValue(const char *name, char *pointer, Int_t i, Int_t len, Int_t lenmax=1000) const;
   void                PrintValueClones(const char *name, TClonesArray *clones, Int_t i, Int_t eoffset, Int_t lenmax=1000) const;
   void                PrintValueSTL(const char *name, TVirtualCollectionProxy *cont, Int_t i, Int_t eoffset, Int_t lenmax=1000) const;

   template <class T>
   Int_t               ReadBuffer(TBuffer &b, const T &arrptr, TCompInfo *const*const compinfo, Int_t first, Int_t last, Int_t narr=1,Int_t eoffset=0,Int_t mode=0);
   template <class T>
   Int_t               ReadBufferSkip(TBuffer &b, const T &arrptr, const TCompInfo *compinfo,Int_t kase, TStreamerElement *aElement, Int_t narr, Int_t eoffset);
   template <class T>
   Int_t               ReadBufferConv(TBuffer &b, const T &arrptr, const TCompInfo *compinfo,Int_t kase, TStreamerElement *aElement, Int_t narr, Int_t eoffset);
   template <class T>
   Int_t               ReadBufferArtificial(TBuffer &b, const T &arrptr, TStreamerElement *aElement, Int_t narr, Int_t eoffset);

   Int_t               ReadBufferClones(TBuffer &b, TClonesArray *clones, Int_t nc, Int_t first, Int_t eoffset);
   Int_t               ReadBufferSTL(TBuffer &b, TVirtualCollectionProxy *cont, Int_t nc, Int_t eoffset, Bool_t v7 = kTRUE );
   void                SetCheckSum(UInt_t checksum) {fCheckSum = checksum;}
   void                SetClass(TClass *cl) {fClass = cl;}
   void                SetClassVersion(Int_t vers) {fClassVersion=vers;}
   void                SetOnFileClassVersion(Int_t vers) {fOnFileClassVersion=vers;}
   void                TagFile(TFile *fFile);
private:
   // Try to remove those functions from the public interface.
   Int_t               WriteBuffer(TBuffer &b, char *pointer, Int_t first);
   Int_t               WriteBufferClones(TBuffer &b, TClonesArray *clones, Int_t nc, Int_t first, Int_t eoffset);
   Int_t               WriteBufferSTL   (TBuffer &b, TVirtualCollectionProxy *cont,   Int_t nc);
   Int_t               WriteBufferSTLPtrs( TBuffer &b, TVirtualCollectionProxy *cont, Int_t nc, Int_t first, Int_t eoffset);
public:
   virtual void        Update(const TClass *oldClass, TClass *newClass);

   virtual TVirtualCollectionProxy *GenEmulatedProxy(const char* class_name, Bool_t silent);
   virtual TClassStreamer *GenEmulatedClassStreamer(const char* class_name, Bool_t silent);
   virtual TVirtualCollectionProxy *GenExplicitProxy( const ::ROOT::TCollectionProxyInfo &info, TClass *cl );
   virtual TClassStreamer *GenExplicitClassStreamer( const ::ROOT::TCollectionProxyInfo &info, TClass *cl );

   static TStreamerElement   *GetCurrentElement();

public:
   // For access by the StreamerInfoActions.
   template <class T>
   Int_t               WriteBufferAux      (TBuffer &b, const T &arr, TCompInfo *const*const compinfo, Int_t first, Int_t last, Int_t narr,Int_t eoffset,Int_t mode);

   //WARNING this class version must be the same as TVirtualStreamerInfo
   ClassDef(TStreamerInfo,9)  //Streamer information for one class version
};


#endif
 TStreamerInfo.h:1
 TStreamerInfo.h:2
 TStreamerInfo.h:3
 TStreamerInfo.h:4
 TStreamerInfo.h:5
 TStreamerInfo.h:6
 TStreamerInfo.h:7
 TStreamerInfo.h:8
 TStreamerInfo.h:9
 TStreamerInfo.h:10
 TStreamerInfo.h:11
 TStreamerInfo.h:12
 TStreamerInfo.h:13
 TStreamerInfo.h:14
 TStreamerInfo.h:15
 TStreamerInfo.h:16
 TStreamerInfo.h:17
 TStreamerInfo.h:18
 TStreamerInfo.h:19
 TStreamerInfo.h:20
 TStreamerInfo.h:21
 TStreamerInfo.h:22
 TStreamerInfo.h:23
 TStreamerInfo.h:24
 TStreamerInfo.h:25
 TStreamerInfo.h:26
 TStreamerInfo.h:27
 TStreamerInfo.h:28
 TStreamerInfo.h:29
 TStreamerInfo.h:30
 TStreamerInfo.h:31
 TStreamerInfo.h:32
 TStreamerInfo.h:33
 TStreamerInfo.h:34
 TStreamerInfo.h:35
 TStreamerInfo.h:36
 TStreamerInfo.h:37
 TStreamerInfo.h:38
 TStreamerInfo.h:39
 TStreamerInfo.h:40
 TStreamerInfo.h:41
 TStreamerInfo.h:42
 TStreamerInfo.h:43
 TStreamerInfo.h:44
 TStreamerInfo.h:45
 TStreamerInfo.h:46
 TStreamerInfo.h:47
 TStreamerInfo.h:48
 TStreamerInfo.h:49
 TStreamerInfo.h:50
 TStreamerInfo.h:51
 TStreamerInfo.h:52
 TStreamerInfo.h:53
 TStreamerInfo.h:54
 TStreamerInfo.h:55
 TStreamerInfo.h:56
 TStreamerInfo.h:57
 TStreamerInfo.h:58
 TStreamerInfo.h:59
 TStreamerInfo.h:60
 TStreamerInfo.h:61
 TStreamerInfo.h:62
 TStreamerInfo.h:63
 TStreamerInfo.h:64
 TStreamerInfo.h:65
 TStreamerInfo.h:66
 TStreamerInfo.h:67
 TStreamerInfo.h:68
 TStreamerInfo.h:69
 TStreamerInfo.h:70
 TStreamerInfo.h:71
 TStreamerInfo.h:72
 TStreamerInfo.h:73
 TStreamerInfo.h:74
 TStreamerInfo.h:75
 TStreamerInfo.h:76
 TStreamerInfo.h:77
 TStreamerInfo.h:78
 TStreamerInfo.h:79
 TStreamerInfo.h:80
 TStreamerInfo.h:81
 TStreamerInfo.h:82
 TStreamerInfo.h:83
 TStreamerInfo.h:84
 TStreamerInfo.h:85
 TStreamerInfo.h:86
 TStreamerInfo.h:87
 TStreamerInfo.h:88
 TStreamerInfo.h:89
 TStreamerInfo.h:90
 TStreamerInfo.h:91
 TStreamerInfo.h:92
 TStreamerInfo.h:93
 TStreamerInfo.h:94
 TStreamerInfo.h:95
 TStreamerInfo.h:96
 TStreamerInfo.h:97
 TStreamerInfo.h:98
 TStreamerInfo.h:99
 TStreamerInfo.h:100
 TStreamerInfo.h:101
 TStreamerInfo.h:102
 TStreamerInfo.h:103
 TStreamerInfo.h:104
 TStreamerInfo.h:105
 TStreamerInfo.h:106
 TStreamerInfo.h:107
 TStreamerInfo.h:108
 TStreamerInfo.h:109
 TStreamerInfo.h:110
 TStreamerInfo.h:111
 TStreamerInfo.h:112
 TStreamerInfo.h:113
 TStreamerInfo.h:114
 TStreamerInfo.h:115
 TStreamerInfo.h:116
 TStreamerInfo.h:117
 TStreamerInfo.h:118
 TStreamerInfo.h:119
 TStreamerInfo.h:120
 TStreamerInfo.h:121
 TStreamerInfo.h:122
 TStreamerInfo.h:123
 TStreamerInfo.h:124
 TStreamerInfo.h:125
 TStreamerInfo.h:126
 TStreamerInfo.h:127
 TStreamerInfo.h:128
 TStreamerInfo.h:129
 TStreamerInfo.h:130
 TStreamerInfo.h:131
 TStreamerInfo.h:132
 TStreamerInfo.h:133
 TStreamerInfo.h:134
 TStreamerInfo.h:135
 TStreamerInfo.h:136
 TStreamerInfo.h:137
 TStreamerInfo.h:138
 TStreamerInfo.h:139
 TStreamerInfo.h:140
 TStreamerInfo.h:141
 TStreamerInfo.h:142
 TStreamerInfo.h:143
 TStreamerInfo.h:144
 TStreamerInfo.h:145
 TStreamerInfo.h:146
 TStreamerInfo.h:147
 TStreamerInfo.h:148
 TStreamerInfo.h:149
 TStreamerInfo.h:150
 TStreamerInfo.h:151
 TStreamerInfo.h:152
 TStreamerInfo.h:153
 TStreamerInfo.h:154
 TStreamerInfo.h:155
 TStreamerInfo.h:156
 TStreamerInfo.h:157
 TStreamerInfo.h:158
 TStreamerInfo.h:159
 TStreamerInfo.h:160
 TStreamerInfo.h:161
 TStreamerInfo.h:162
 TStreamerInfo.h:163
 TStreamerInfo.h:164
 TStreamerInfo.h:165
 TStreamerInfo.h:166
 TStreamerInfo.h:167
 TStreamerInfo.h:168
 TStreamerInfo.h:169
 TStreamerInfo.h:170
 TStreamerInfo.h:171
 TStreamerInfo.h:172
 TStreamerInfo.h:173
 TStreamerInfo.h:174
 TStreamerInfo.h:175
 TStreamerInfo.h:176
 TStreamerInfo.h:177
 TStreamerInfo.h:178
 TStreamerInfo.h:179
 TStreamerInfo.h:180
 TStreamerInfo.h:181
 TStreamerInfo.h:182
 TStreamerInfo.h:183
 TStreamerInfo.h:184
 TStreamerInfo.h:185
 TStreamerInfo.h:186
 TStreamerInfo.h:187
 TStreamerInfo.h:188
 TStreamerInfo.h:189
 TStreamerInfo.h:190
 TStreamerInfo.h:191
 TStreamerInfo.h:192
 TStreamerInfo.h:193
 TStreamerInfo.h:194
 TStreamerInfo.h:195
 TStreamerInfo.h:196
 TStreamerInfo.h:197
 TStreamerInfo.h:198
 TStreamerInfo.h:199
 TStreamerInfo.h:200
 TStreamerInfo.h:201
 TStreamerInfo.h:202
 TStreamerInfo.h:203
 TStreamerInfo.h:204
 TStreamerInfo.h:205
 TStreamerInfo.h:206
 TStreamerInfo.h:207
 TStreamerInfo.h:208
 TStreamerInfo.h:209
 TStreamerInfo.h:210
 TStreamerInfo.h:211
 TStreamerInfo.h:212
 TStreamerInfo.h:213
 TStreamerInfo.h:214
 TStreamerInfo.h:215
 TStreamerInfo.h:216
 TStreamerInfo.h:217
 TStreamerInfo.h:218
 TStreamerInfo.h:219
 TStreamerInfo.h:220
 TStreamerInfo.h:221
 TStreamerInfo.h:222
 TStreamerInfo.h:223
 TStreamerInfo.h:224
 TStreamerInfo.h:225
 TStreamerInfo.h:226
 TStreamerInfo.h:227
 TStreamerInfo.h:228
 TStreamerInfo.h:229
 TStreamerInfo.h:230
 TStreamerInfo.h:231
 TStreamerInfo.h:232
 TStreamerInfo.h:233
 TStreamerInfo.h:234
 TStreamerInfo.h:235
 TStreamerInfo.h:236
 TStreamerInfo.h:237
 TStreamerInfo.h:238
 TStreamerInfo.h:239
 TStreamerInfo.h:240
 TStreamerInfo.h:241
 TStreamerInfo.h:242
 TStreamerInfo.h:243
 TStreamerInfo.h:244
 TStreamerInfo.h:245
 TStreamerInfo.h:246
 TStreamerInfo.h:247
 TStreamerInfo.h:248
 TStreamerInfo.h:249
 TStreamerInfo.h:250
 TStreamerInfo.h:251
 TStreamerInfo.h:252
 TStreamerInfo.h:253
 TStreamerInfo.h:254
 TStreamerInfo.h:255
 TStreamerInfo.h:256
 TStreamerInfo.h:257
 TStreamerInfo.h:258
 TStreamerInfo.h:259
 TStreamerInfo.h:260
 TStreamerInfo.h:261
 TStreamerInfo.h:262
 TStreamerInfo.h:263
 TStreamerInfo.h:264
 TStreamerInfo.h:265
 TStreamerInfo.h:266
 TStreamerInfo.h:267
 TStreamerInfo.h:268
 TStreamerInfo.h:269
 TStreamerInfo.h:270
 TStreamerInfo.h:271
 TStreamerInfo.h:272
 TStreamerInfo.h:273
 TStreamerInfo.h:274
 TStreamerInfo.h:275
 TStreamerInfo.h:276
 TStreamerInfo.h:277
 TStreamerInfo.h:278
 TStreamerInfo.h:279
 TStreamerInfo.h:280
 TStreamerInfo.h:281
 TStreamerInfo.h:282
 TStreamerInfo.h:283
 TStreamerInfo.h:284
 TStreamerInfo.h:285
 TStreamerInfo.h:286
 TStreamerInfo.h:287
 TStreamerInfo.h:288
 TStreamerInfo.h:289
 TStreamerInfo.h:290
 TStreamerInfo.h:291
 TStreamerInfo.h:292
 TStreamerInfo.h:293
 TStreamerInfo.h:294
 TStreamerInfo.h:295
 TStreamerInfo.h:296
 TStreamerInfo.h:297
 TStreamerInfo.h:298
 TStreamerInfo.h:299
 TStreamerInfo.h:300
 TStreamerInfo.h:301
 TStreamerInfo.h:302
 TStreamerInfo.h:303
 TStreamerInfo.h:304
 TStreamerInfo.h:305
 TStreamerInfo.h:306
 TStreamerInfo.h:307
 TStreamerInfo.h:308
 TStreamerInfo.h:309
 TStreamerInfo.h:310
 TStreamerInfo.h:311
 TStreamerInfo.h:312
 TStreamerInfo.h:313
 TStreamerInfo.h:314