ROOT logo
// @(#)root/io:$Id: TGenCollectionProxy.h 29225 2009-06-25 15:17:04Z brun $
// Author: Markus Frank  28/10/04

/*************************************************************************
 * 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_TGenCollectionProxy
#define ROOT_TGenCollectionProxy

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGenCollectionProxy
//
// Proxy around an arbitrary container, which implements basic
// functionality and iteration.
//
// In particular this is used to implement splitting and abstract
// element access of any container. Access to compiled code is necessary
// to implement the abstract iteration sequence and functionality like
// size(), clear(), resize(). resize() may be a void operation.
//
//////////////////////////////////////////////////////////////////////////

#include "TVirtualCollectionProxy.h"
#include "TCollectionProxyFactory.h"
#include <typeinfo>
#include <string>

class TGenCollectionProxy
   : public TVirtualCollectionProxy
{

   // Friend declaration
   friend class TCollectionProxyFactory;

public:

#ifdef R__HPUX
   typedef const type_info&      Info_t;
#else
   typedef const std::type_info& Info_t;
#endif

   enum {
      // Those 'bits' are used in conjunction with CINT's bit to store the 'type'
      // info into one int
      kBIT_ISSTRING   = 0x20000000,  // We can optimized a value operation when the content are strings
      kBIT_ISTSTRING  = 0x40000000,
      kBOOL_t = 21
   };


   /** @class TGenCollectionProxy::Value TGenCollectionProxy.h TGenCollectionProxy.h
    *
    * Small helper to describe the Value_type or the key_type
    * of an STL container.
    *
    * @author  M.Frank
    * @version 1.0
    * @date    10/10/2004
    */
   struct Value  {
      ROOT::NewFunc_t fCtor;       // Method cache for containee constructor
      ROOT::DesFunc_t fDtor;       // Method cache for containee destructor
      ROOT::DelFunc_t fDelete;     // Method cache for containee delete
      unsigned int    fCase;       // type of data of Value_type
      TClassRef       fType;       // TClass reference of Value_type in collection
      EDataType       fKind;       // kind of ROOT-fundamental type
      size_t          fSize;       // fSize of the contained object

      // Copy constructor
      Value(const Value& inside);
      // Initializing constructor
      Value(const std::string& info);
      // Delete individual item from STL container
      void DeleteItem(void* ptr);
   };

   /**@class StreamHelper
    *
    * Helper class to facilitate I/O
    *
    * @author  M.Frank
    * @version 1.0
    * @date    10/10/2004
    */
   union StreamHelper  {
      Bool_t       boolean;
      Char_t       s_char;
      Short_t      s_short;
      Int_t        s_int;
      Long_t       s_long;
      Long64_t     s_longlong;
      Float_t      flt;
      Double_t     dbl;
      UChar_t      u_char;
      UShort_t     u_short;
      UInt_t       u_int;
      ULong_t      u_long;
      ULong64_t    u_longlong;
      void*        p_void;
      void**       pp_void;
      char*        kchar;
      TString*     tstr;
      void* ptr()  {
         return *(&this->p_void);
      }
      std::string* str()  {
         return (std::string*)this;
      }
      const char* c_str()  {
         return ((std::string*)this)->c_str();
      }
      const char* c_pstr()  {
         return (*(std::string**)this)->c_str();
      }
      void set(void* p)  {
         *(&this->p_void) = p;
      }
      void read_std_string(TBuffer& b) {
         TString s;
         s.Streamer(b);
         ((std::string*)this)->assign(s.Data());
      }
      void* read_tstring(TBuffer& b)  {
         *((TString*)this) = "";
         ((TString*)this)->Streamer(b);
         return this;
      }
      void read_std_string_pointer(TBuffer& b) {
         TString s;
         std::string* str2 = (std::string*)ptr();
         if (!str2) str2 = new std::string();
         s.Streamer(b);
         *str2 = s;
         set(str2);
      }
      void write_std_string_pointer(TBuffer& b)  {
         const char* c;
         if (ptr()) {
            std::string* strptr = (*(std::string**)this);
            c = (const char*)(strptr->c_str());
         } else c = "";
         TString(c).Streamer(b);
      }
      void read_any_object(Value* v, TBuffer& b)  {
         void* p = ptr();
         if ( p )  {
            if ( v->fDelete )  {    // Compiled content: call Destructor
               (*v->fDelete)(p);
            }
            else if ( v->fType )  { // Emulated content: call TClass::Delete
               v->fType->Destructor(p);
            }
            else if ( v->fDtor )  {
               (*v->fDtor)(p);
               ::operator delete(p);
            }
            else  {
               ::operator delete(p);
            }
         }
         set( b.ReadObjectAny(v->fType) );
      }

      void read_tstring_pointer(Bool_t vsn3, TBuffer& b)  {
         TString* s = (TString*)ptr();
         if ( vsn3 )  {
            if ( !s ) s = new TString();
            s->Replace(0, s->Length(), 0, 0);
            s->Streamer(b);
            set(s);
            return;
         }
         if ( s ) delete s;
         set( b.ReadObjectAny(TString::Class()) );
      }
      void write_tstring_pointer(TBuffer& b)  {
         b.WriteObjectAny(ptr(), TString::Class());
      }
   };

   /** @class TGenCollectionProxy::Method TGenCollectionProxy.h TGenCollectionProxy.h
    *
    * Small helper to execute (compiler) generated function for the
    * access to STL or other containers.
    *
    * @author  M.Frank
    * @version 1.0
    * @date    10/10/2004
    */
   class Method  {
   public:
      typedef void* (*Call_t)(void*);
      Call_t call;
      Method() : call(0)                       {      }
      Method(Call_t c) : call(c)               {      }
      Method(const Method& m) : call(m.call)   {      }
      void* invoke(void* obj) const { return (*call)(obj); }
   };

   /** @class TGenCollectionProxy::Method TGenCollectionProxy.h TGenCollectionProxy.h
    *
    * Small helper to execute (compiler) generated function for the
    * access to STL or other containers.
    *
    * @author  M.Frank
    * @version 1.0
    * @date    10/10/2004
    */
   class Method0  {
   public:
      typedef void* (*Call_t)();
      Call_t call;
      Method0() : call(0)                       {      }
      Method0(Call_t c) : call(c)               {      }
      Method0(const Method0& m) : call(m.call)   {      }
      void* invoke() const { return (*call)(); }
   };
   
protected:
   typedef ROOT::TCollectionProxyInfo::Environ<char[64]> Env_t;
   typedef ROOT::TCollectionProxyInfo::EnvironBase EnvironBase_t;
   typedef std::vector<EnvironBase_t*>     Proxies_t;

   std::string   fName;      // Name of the class being proxied.
   Bool_t        fPointers;  // Flag to indicate if containee has pointers (key or value)
   Method        fClear;     // Method cache for container accessors: clear container
   Method        fSize;      // Container accessors: size of container
   Method        fResize;    // Container accessors: resize container
   Method        fFirst;     // Container accessors: generic iteration: first
   Method        fNext;      // Container accessors: generic iteration: next
   Method        fConstruct; // Container accessors: block construct
   Method        fDestruct;  // Container accessors: block destruct
   Method        fFeed;      // Container accessors: block feed
   Method        fCollect;   // Method to collect objects from container
   Method0       fCreateEnv; // Method to allocate an Environment holder.
   Value*        fValue;     // Descriptor of the container value type
   Value*        fVal;       // Descriptor of the Value_type
   Value*        fKey;       // Descriptor of the key_type
   EnvironBase_t*fEnv;       // Address of the currently proxied object
   int           fValOffset; // Offset from key to value (in maps)
   int           fValDiff;   // Offset between two consecutive value_types (memory layout).
   Proxies_t     fProxyList; // Stack of recursive proxies
   Proxies_t     fProxyKept; // Optimization: Keep proxies once they were created
   int           fSTL_type;  // STL container type
   Info_t        fTypeinfo;  // Type information
   TClass*       fOnFileClass; // On file class

   // Late initialization of collection proxy
   TGenCollectionProxy* Initialize() const;
   // Some hack to avoid const-ness.
   virtual TGenCollectionProxy* InitializeEx();
   // Call to delete/destruct individual contained item.
   virtual void DeleteItem(Bool_t force, void* ptr) const;
   // Allow to check function pointers.
   void CheckFunctions()  const;

public:

   // Virtual copy constructor.
   virtual TVirtualCollectionProxy* Generate() const;

   // Copy constructor.
   TGenCollectionProxy(const TGenCollectionProxy& copy);

   // Initializing constructor
   TGenCollectionProxy(Info_t typ, size_t iter_size);
   TGenCollectionProxy(const ROOT::TCollectionProxyInfo &info, TClass *cl);

   // Standard destructor.
   virtual ~TGenCollectionProxy();

   // Return a pointer to the TClass representing the container.
   virtual TClass *GetCollectionClass();

   // Return the sizeof the collection object.
   virtual UInt_t Sizeof() const;

   // Push new proxy environment.
   virtual void PushProxy(void *objstart);

   // Pop old proxy environment.
   virtual void PopProxy();

   // Return true if the content is of type 'pointer to'.
   virtual Bool_t HasPointers() const;

   // Return a pointer to the TClass representing the content.
   virtual TClass *GetValueClass();

   // Set pointer to the TClass representing the content.
   virtual void SetValueClass(TClass *newcl);

   // If the content is a simple numerical value, return its type (see TDataType).
   virtual EDataType GetType();

   // Return the address of the value at index 'idx'.
   virtual void *At(UInt_t idx);

   // Clear the container.
   virtual void Clear(const char *opt = "");

   // Resize the container.
   virtual void Resize(UInt_t n, Bool_t force_delete);

   // Return the current size of the container.
   virtual UInt_t Size() const;

   // Block allocation of containees.
   virtual void* Allocate(UInt_t n, Bool_t forceDelete);

   // Block commit of containees.
   virtual void Commit(void* env);

   // Streamer function.
   virtual void Streamer(TBuffer &refBuffer);

   // Streamer I/O overload.
   virtual void Streamer(TBuffer &refBuffer, void *pObject, int siz);

   // TClassStreamer I/O overload.
   virtual void operator()(TBuffer &refBuffer, void *pObject);

   virtual void SetOnFileClass( TClass* cl ) { fOnFileClass = cl; }
   virtual TClass* GetOnFileClass() const { return fOnFileClass; }
};

template <typename T>
struct AnyCollectionProxy : public TGenCollectionProxy  {
   AnyCollectionProxy()
      : TGenCollectionProxy(typeid(T::Cont_t),sizeof(T::Iter_t))
   {
      // Constructor.
      fValDiff        = sizeof(T::Value_t);
      fValOffset      = T::value_offset();
      fSize.call      = T::size;
      fResize.call    = T::resize;
      fNext.call      = T::next;
      fFirst.call     = T::first;
      fClear.call     = T::clear;
      fConstruct.call = T::construct;
      fDestruct.call  = T::destruct;
      fFeed.call      = T::feed;
      CheckFunctions();
   }
   virtual ~AnyCollectionProxy() {  }
};

#endif

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