ROOT logo
// @(#)root/io:$Id: TGenCollectionProxy.cxx 27406 2009-02-10 21:55:34Z pcanal $
// 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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// 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 "TGenCollectionProxy.h"
#include "TVirtualStreamerInfo.h"
#include "TStreamerElement.h"
#include "TClassEdit.h"
#include "TClass.h"
#include "TError.h"
#include "TROOT.h"
#include "TInterpreter.h"
#include "Riostream.h"
#include "TVirtualMutex.h"
#include <stdlib.h>

#define MESSAGE(which,text)

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  class TGenVectorProxy
//
//   Local optimization class.
//
//   Collection proxies get copied. On copy we switch the type of the
//   proxy to the concrete STL type. The concrete types are optimized
//   for element access.
//
//////////////////////////////////////////////////////////////////////////
class TGenVectorProxy : public TGenCollectionProxy {
public:
   // Standard Destructor
   TGenVectorProxy(const TGenCollectionProxy& c) : TGenCollectionProxy(c)
   {
   }
   // Standard Destructor
   virtual ~TGenVectorProxy()
{
   }
   // Return the address of the value at index 'idx'
   virtual void* At(UInt_t idx)
{
      if ( fEnv && fEnv->fObject ) {
         fEnv->fIdx = idx;
         switch( idx ) {
         case 0:
            return fEnv->fStart = fFirst.invoke(fEnv);
         default:
            if (! fEnv->fStart ) fEnv->fStart = fFirst.invoke(fEnv);
            return ((char*)fEnv->fStart) + fValDiff*idx;
         }
      }
      Fatal("TGenVectorProxy","At> Logic error - no proxy object set.");
      return 0;
   }
   // Call to delete/destruct individual item
   virtual void DeleteItem(bool force, void* ptr) const
   {
      if ( force && ptr ) {
         fVal->DeleteItem(ptr);
      }
   }
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  class TGenVectorBoolProxy
//
//   Local optimization class.
//
//   Collection proxies get copied. On copy we switch the type of the
//   proxy to the concrete STL type. The concrete types are optimized
//   for element access.
//
//////////////////////////////////////////////////////////////////////////
class TGenVectorBoolProxy : public TGenCollectionProxy {
   bool fLastValue;
   
public:
   TGenVectorBoolProxy(const TGenCollectionProxy& c) : TGenCollectionProxy(c), fLastValue(false)
   {
      // Standard Constructor.
   }
   virtual ~TGenVectorBoolProxy()
   {
      // Standard Destructor.
   }
   virtual void* At(UInt_t idx)
   {
      // Return the address of the value at index 'idx'
      
      // However we can 'take' the address of the content of vector<bool>.
      if ( fEnv && fEnv->fObject ) {
         switch( idx ) {
            case 0:
               fEnv->fStart = fFirst.invoke(fEnv);
               fEnv->fIdx = idx;
               break;
            default:
               fEnv->fIdx = idx - fEnv->fIdx;
               if (! fEnv->fStart ) fEnv->fStart = fFirst.invoke(fEnv);
               fNext.invoke(fEnv);
               fEnv->fIdx = idx;
               break;
         }
         typedef ROOT::TCollectionProxyInfo::Type<std::vector<bool> >::Env_t EnvType_t;
         EnvType_t *e = (EnvType_t*)fEnv;
         fLastValue = *(e->iter());
         return &fLastValue;
      }
      Fatal("TGenVectorProxy","At> Logic error - no proxy object set.");
      return 0;
   }

   virtual void DeleteItem(bool force, void* ptr) const
   {
      // Call to delete/destruct individual item
      if ( force && ptr ) {
         fVal->DeleteItem(ptr);
      }
   }
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  class TGenListProxy
//
//   Localoptimization class.
//
//   Collection proxies get copied. On copy we switch the type of the
//   proxy to the concrete STL type. The concrete types are optimized
//   for element access.
//
//////////////////////////////////////////////////////////////////////////
class TGenListProxy : public TGenVectorProxy {
public:
   // Standard Destructor
   TGenListProxy(const TGenCollectionProxy& c) : TGenVectorProxy(c)
{
   }
   // Standard Destructor
   virtual ~TGenListProxy()
{
   }
   // Return the address of the value at index 'idx'
   void* At(UInt_t idx)
{
      if ( fEnv && fEnv->fObject ) {
         switch( idx ) {
         case 0:
            fEnv->fIdx = idx;
            return fEnv->fStart = fFirst.invoke(fEnv);
         default:  {
            fEnv->fIdx = idx - fEnv->fIdx;
            if (! fEnv->fStart ) fEnv->fStart = fFirst.invoke(fEnv);
            void* result = fNext.invoke(fEnv);
            fEnv->fIdx = idx;
            return result;
         }
         }
      }
      Fatal("TGenListProxy","At> Logic error - no proxy object set.");
      return 0;
   }
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// class TGenSetProxy
//
//   Localoptimization class.
//
//   Collection proxies get copied. On copy we switch the type of the
//   proxy to the concrete STL type. The concrete types are optimized
//   for element access.
//
//////////////////////////////////////////////////////////////////////////
class TGenSetProxy : public TGenVectorProxy {
public:
   // Standard Destructor
   TGenSetProxy(const TGenCollectionProxy& c) : TGenVectorProxy(c)
{
   }
   // Standard Destructor
   virtual ~TGenSetProxy()
{
   }
   // Return the address of the value at index 'idx'
   void* At(UInt_t idx)
{
      if ( fEnv && fEnv->fObject ) {
         if ( fEnv->fUseTemp ) {
            return (((char*)fEnv->fTemp)+idx*fValDiff);
         }
         switch( idx ) {
         case 0:
            fEnv->fIdx = idx;
            return fEnv->fStart = fFirst.invoke(fEnv);
         default:  {
            fEnv->fIdx = idx - fEnv->fIdx;
            if (! fEnv->fStart ) fEnv->fStart = fFirst.invoke(fEnv);
            void* result = fNext.invoke(fEnv);
            fEnv->fIdx = idx;
            return result;
         }
         }
      }
      Fatal("TGenSetProxy","At> Logic error - no proxy object set.");
      return 0;
   }
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  class TGenMapProxy
//
//   Localoptimization class.
//
//   Collection proxies get copied. On copy we switch the type of the
//   proxy to the concrete STL type. The concrete types are optimized
//   for element access.
//
//////////////////////////////////////////////////////////////////////////
class TGenMapProxy : public TGenSetProxy {
public:
   // Standard Destructor
   TGenMapProxy(const TGenCollectionProxy& c) : TGenSetProxy(c)
{
   }
   // Standard Destructor
   virtual ~TGenMapProxy()
{
   }
   // Call to delete/destruct individual item
   virtual void DeleteItem(Bool_t /* force */, void* ptr) const
   {
      if ( fKey->fCase&G__BIT_ISPOINTER ) {
         fKey->DeleteItem(*(void**)ptr);
      }
      if ( fVal->fCase&G__BIT_ISPOINTER ) {
         char *addr = ((char*)ptr)+fValOffset;
         fVal->DeleteItem(*(void**)addr);
      }
   }
};


//______________________________________________________________________________
TGenCollectionProxy::Value::Value(const Value& copy)
{
   // Constructor.

   fType   = copy.fType;
   fCase   = copy.fCase;
   fKind   = copy.fKind;
   fSize   = copy.fSize;
   fCtor   = copy.fCtor;
   fDtor   = copy.fDtor;
   fDelete = copy.fDelete;
}

//______________________________________________________________________________
TGenCollectionProxy::Value::Value(const std::string& inside_type)
{
   // Constructor.

   std::string inside = (inside_type.find("const ")==0) ? inside_type.substr(6) : inside_type;
   fCase = 0;
   fCtor = 0;
   fDtor = 0;
   fDelete = 0;
   fSize = std::string::npos;
   fKind = kNoType_t;
   std::string intype = TClassEdit::ShortType(inside.c_str(),TClassEdit::kDropTrailStar );
   if ( inside.substr(0,6) == "string" || inside.substr(0,11) == "std::string" ) {
      fCase = kBIT_ISSTRING;
      fType = TClass::GetClass("string");
      fCtor = fType->GetNew();
      fDtor = fType->GetDestructor();
      fDelete = fType->GetDelete();
      switch(inside[inside.length()-1]) {
      case '*':
         fCase |= G__BIT_ISPOINTER;
         fSize = sizeof(void*);
         break;
      default:
         fSize = sizeof(std::string);
         break;
      }
   }
   else {
      // In the case where we have an emulated class,
      // if the class is nested (in a class or a namespace),
      // calling G__TypeInfo ti(inside.c_str());
      // might fail because CINT does not known the nesting
      // scope, so let's first look for an emulated class:
      fType = TClass::GetClass(intype.c_str());
      if (fType && !fType->IsLoaded()) {
         if (intype != inside) {
            fCase |= G__BIT_ISPOINTER;
            fSize = sizeof(void*);
         }
         fCase  |= G__BIT_ISCLASS;
         fCtor   = fType->GetNew();
         fDtor   = fType->GetDestructor();
         fDelete = fType->GetDelete();
      } else {
#if defined(NOT_YET)
         // Because the TStreamerInfo of the contained classes
         // is stored only when tbere at least one element in
         // the collection, we might not even have an emulated
         // class.  So go the long route to avoid errors
         // issued by CINT ....
         G__value gval = G__string2type_body(inside.c_str(),2);
         G__TypeInfo ti(gval);
#else
         //G__TypeInfo ti(inside.c_str());
         TypeInfo_t *ti = gCint->TypeInfo_Factory();
         gCint->TypeInfo_Init(ti,inside.c_str());
#endif   
         if ( !gCint->TypeInfo_IsValid(ti) ) {
            if (intype != inside) {
               fCase |= G__BIT_ISPOINTER;
               fSize = sizeof(void*);
            }
            fType = TClass::GetClass(intype.c_str());
            if (fType) {
               fCase  |= G__BIT_ISCLASS;
               fCtor   = fType->GetNew();
               fDtor   = fType->GetDestructor();
               fDelete = fType->GetDelete();
            }
            else {
               // either we have an Emulated enum or a really unknown class!
               // let's just claim its an enum :(
               fCase = G__BIT_ISENUM;
               fSize = sizeof(Int_t);
               fKind = kInt_t;
            }
         }
         else {
            Long_t prop = gCint->TypeInfo_Property(ti);
            if ( prop&G__BIT_ISPOINTER ) {
               fSize = sizeof(void*);
            }
            if ( prop&G__BIT_ISSTRUCT ) {
               prop |= G__BIT_ISCLASS;
            }
            if ( prop&G__BIT_ISCLASS ) {
               fType = TClass::GetClass(intype.c_str());
               R__ASSERT(fType);
               fCtor   = fType->GetNew();
               fDtor   = fType->GetDestructor();
               fDelete = fType->GetDelete();
            }
            else if ( prop&G__BIT_ISFUNDAMENTAL ) {
               TDataType *fundType = gROOT->GetType( intype.c_str() );
               if (fundType==0) {
                  if (intype != "long double") {
                     Error("TGenCollectionProxy","Unknown fundamental type %s",intype.c_str());
                  }
                  fSize = sizeof(int);
                  fKind = kInt_t;
               } else {
                  fKind = (EDataType)fundType->GetType();
                  if ( 0 == strcmp("bool",fundType->GetFullTypeName()) ) {
                     fKind = (EDataType)kBOOL_t;
                  }
                  fSize = gCint->TypeInfo_Size(ti);
                  R__ASSERT((fKind>0 && fKind<0x16) || (fKind==-1&&(prop&G__BIT_ISPOINTER)) );
               }
            }
            else if ( prop&G__BIT_ISENUM ) {
               fSize = sizeof(int);
               fKind = kInt_t;
            }
            fCase = prop & (G__BIT_ISPOINTER|G__BIT_ISFUNDAMENTAL|G__BIT_ISENUM|G__BIT_ISCLASS);
            if (fType == TString::Class() && (fCase&G__BIT_ISPOINTER)) {
               fCase |= kBIT_ISTSTRING;
            }
         }
         gCint->TypeInfo_Delete(ti);
      }
   }
   if ( fSize == std::string::npos ) {
      if ( fType == 0 ) {
         Fatal("TGenCollectionProxy","Could not find %s!",inside.c_str());
      }
      fSize = fType->Size();
   }
}

void TGenCollectionProxy::Value::DeleteItem(void* ptr)
{
   // Delete an item.

   if ( ptr && fCase&G__BIT_ISPOINTER ) {
      if ( fDelete ) {
         (*fDelete)(ptr);
      }
      else if ( fType ) {
         fType->Destructor(ptr);
      }
      else {
         ::operator delete(ptr);
      }
   }
}

//______________________________________________________________________________
TGenCollectionProxy::TGenCollectionProxy(const TGenCollectionProxy& copy)
   : TVirtualCollectionProxy(copy.fClass),
     fTypeinfo(copy.fTypeinfo)
{
   // Build a proxy for an emulated container.
   fEnv            = 0;
   fName           = copy.fName;
   fPointers       = copy.fPointers;
   fSTL_type       = copy.fSTL_type;
   fSize.call      = copy.fSize.call;
   fNext.call      = copy.fNext.call;
   fFirst.call     = copy.fFirst.call;
   fClear.call     = copy.fClear.call;
   fResize.call    = copy.fResize.call;
   fDestruct.call  = copy.fDestruct.call;
   fConstruct.call = copy.fConstruct.call;
   fFeed.call      = copy.fFeed.call;
   fCollect.call   = copy.fCollect.call;
   fCreateEnv.call = copy.fCreateEnv.call;
   fValOffset      = copy.fValOffset;
   fValDiff        = copy.fValDiff;
   fValue          = copy.fValue ? new Value(*copy.fValue) : 0;
   fVal            = copy.fVal   ? new Value(*copy.fVal)   : 0;
   fKey            = copy.fKey   ? new Value(*copy.fKey)   : 0;
}

//______________________________________________________________________________
TGenCollectionProxy::TGenCollectionProxy(Info_t info, size_t iter_size)
   : TVirtualCollectionProxy(0),
     fTypeinfo(info)
{
   // Build a proxy for a collection whose type is described by 'collectionClass'.
   fEnv             = 0;
   fSize.call       = 0;
   fFirst.call      = 0;
   fNext.call       = 0;
   fClear.call      = 0;
   fResize.call     = 0;
   fDestruct.call   = 0;
   fConstruct.call  = 0;
   fCollect.call    = 0;
   fCreateEnv.call  = 0;
   fFeed.call       = 0;
   fValue           = 0;
   fKey             = 0;
   fVal             = 0;
   fValOffset       = 0;
   fValDiff         = 0;
   fPointers        = false;
   Env_t e;
   if ( iter_size > sizeof(e.fIterator) ) {
      Fatal("TGenCollectionProxy",
            "%s %s are too large:%d bytes. Maximum is:%d bytes",
            "Iterators for collection",
            fClass->GetName(),
            iter_size,
            sizeof(e.fIterator));
   }
}

//______________________________________________________________________________
TGenCollectionProxy::TGenCollectionProxy(const ROOT::TCollectionProxyInfo &info, TClass *cl)
   : TVirtualCollectionProxy(cl),
     fTypeinfo(info.fInfo)
{
   // Build a proxy for a collection whose type is described by 'collectionClass'.
   fEnv            = 0;
   fValDiff        = info.fValueDiff;
   fValOffset      = info.fValueOffset;
   fSize.call      = info.fSizeFunc;
   fResize.call    = info.fResizeFunc;
   fNext.call      = info.fNextFunc;
   fFirst.call     = info.fFirstFunc;
   fClear.call     = info.fClearFunc;
   fConstruct.call = info.fConstructFunc;
   fDestruct.call  = info.fDestructFunc;
   fFeed.call      = info.fFeedFunc;
   fCollect.call   = info.fCollectFunc;
   fCreateEnv.call = info.fCreateEnv;
   
   if (cl) {
      fName = cl->GetName();
   }
   CheckFunctions();

   fValue           = 0;
   fKey             = 0;
   fVal             = 0;
   fPointers        = false;

   Env_t e;
   if ( info.fIterSize > sizeof(e.fIterator) ) {
      Fatal("TGenCollectionProxy",
            "%s %s are too large:%d bytes. Maximum is:%d bytes",
            "Iterators for collection",
            fClass->GetName(),
            info.fIterSize,
            sizeof(e.fIterator));
   }
}

namespace {
   typedef std::vector<ROOT::TCollectionProxyInfo::EnvironBase* > Proxies_t;
   void clearProxies(Proxies_t& v)
   {
      // Clear out the proxies.

      for(Proxies_t::iterator i=v.begin(); i != v.end(); ++i) {
         ROOT::TCollectionProxyInfo::EnvironBase *e = *i;
         if ( e ) {
            if ( e->fTemp ) ::free(e->fTemp);
            delete e;
         }
      }
      v.clear();
   }
}
//______________________________________________________________________________
TGenCollectionProxy::~TGenCollectionProxy()
{
   // Standard destructor
   clearProxies(fProxyList);
   clearProxies(fProxyKept);

   if ( fValue ) delete fValue;
   if ( fVal   ) delete fVal;
   if ( fKey   ) delete fKey;
}

//______________________________________________________________________________
TVirtualCollectionProxy* TGenCollectionProxy::Generate() const
{
   // Virtual copy constructor
   if ( !fValue ) Initialize();

   if( fPointers )
      return new TGenCollectionProxy(*this);

   switch(fSTL_type) {
   case TClassEdit::kVector: {
      if (fValue->fKind == (EDataType)kBOOL_t) {
         return new TGenVectorBoolProxy(*this);
      } else {
         return new TGenVectorProxy(*this);
      }         
   }
   case TClassEdit::kList:
      return new TGenListProxy(*this);
   case TClassEdit::kMap:
   case TClassEdit::kMultiMap:
      return new TGenMapProxy(*this);
   case TClassEdit::kSet:
   case TClassEdit::kMultiSet:
      return new TGenSetProxy(*this);
   default:
      return new TGenCollectionProxy(*this);
   }
}

//______________________________________________________________________________
TGenCollectionProxy *TGenCollectionProxy::Initialize() const
{
   // Proxy initializer
   TGenCollectionProxy* p = const_cast<TGenCollectionProxy*>(this);
   if ( fValue ) return p;
   return p->InitializeEx();
}

//______________________________________________________________________________
void TGenCollectionProxy::CheckFunctions() const
{
   // Check existence of function pointers
   if ( 0 == fSize.call ) {
      Fatal("TGenCollectionProxy","No 'size' function pointer for class %s present.",fName.c_str());
   }
   if ( 0 == fResize.call ) {
      Fatal("TGenCollectionProxy","No 'resize' function for class %s present.",fName.c_str());
   }
   if ( 0 == fNext.call  ) {
      Fatal("TGenCollectionProxy","No 'next' function for class %s present.",fName.c_str());
   }
   if ( 0 == fFirst.call ) {
      Fatal("TGenCollectionProxy","No 'begin' function for class %s present.",fName.c_str());
   }
   if ( 0 == fClear.call ) {
      Fatal("TGenCollectionProxy","No 'clear' function for class %s present.",fName.c_str());
   }
   if ( 0 == fConstruct.call ) {
      Fatal("TGenCollectionProxy","No 'block constructor' function for class %s present.",fName.c_str());
   }
   if ( 0 == fDestruct.call ) {
      Fatal("TGenCollectionProxy","No 'block destructor' function for class %s present.",fName.c_str());
   }
   if ( 0 == fFeed.call ) {
      Fatal("TGenCollectionProxy","No 'data feed' function for class %s present.",fName.c_str());
   }
   if ( 0 == fCollect.call ) {
      Fatal("TGenCollectionProxy","No 'data collect' function for class %s present.",fName.c_str());
   }
   if (0 == fCreateEnv.call ) {
      Fatal("TGenCollectionProxy","No 'environment creation' function for class %s present.",fName.c_str());
   }
}

//______________________________________________________________________________
TGenCollectionProxy *TGenCollectionProxy::InitializeEx()
{
   // Proxy initializer
   R__LOCKGUARD2(gCollectionMutex);
   if (fValue) return this;

   TClass *cl = fClass ? fClass.GetClass() : TClass::GetClass(fTypeinfo);
   if ( cl ) {
      fEnv    = 0;
      fName   = cl->GetName();
      fPointers  = false;
      int nested = 0;
      std::vector<std::string> inside;
      int num = TClassEdit::GetSplit(cl->GetName(),inside,nested);
      if ( num > 1 ) {
         std::string nam;
         if ( inside[0].find("stdext::hash_") != std::string::npos )
            inside[0].replace(3,10,"::");
         if ( inside[0].find("__gnu_cxx::hash_") != std::string::npos )
            inside[0].replace(0,16,"std::");
         fSTL_type = TClassEdit::STLKind(inside[0].c_str());
         int slong = sizeof(void*);
         switch ( fSTL_type ) {
         case TClassEdit::kMap:
         case TClassEdit::kMultiMap:
            nam = "pair<"+inside[1]+","+inside[2];
            nam += (nam[nam.length()-1]=='>') ? " >" : ">";
            fValue = new Value(nam);

            fVal   = new Value(inside[2]);
            fKey   = new Value(inside[1]);
            fPointers = fPointers || (0 != (fKey->fCase&G__BIT_ISPOINTER));
            if ( 0 == fValDiff ) {
               fValDiff = fKey->fSize + fVal->fSize;
               fValDiff += (slong - fKey->fSize%slong)%slong;
               fValDiff += (slong - fValDiff%slong)%slong;
            }
            if ( 0 == fValOffset ) {
               fValOffset = fKey->fSize;
               fValOffset += (slong - fKey->fSize%slong)%slong;
            }
            break;
         default:
            fValue = new Value(inside[1]);

            fVal   = new Value(*fValue);
            if ( 0 == fValDiff ) {
               fValDiff = fVal->fSize;
               fValDiff += (slong - fValDiff%slong)%slong;
            }
            break;
         }

         // Optimizing does not work with member wise streaming
         if (TVirtualStreamerInfo::GetStreamMemberWise() && fValue->fType.GetClass()) {
            Bool_t optim = TVirtualStreamerInfo::CanOptimize();
            TVirtualStreamerInfo::Optimize(kFALSE);
            fValue->fType.GetClass()->GetStreamerInfo()->Compile();
            TVirtualStreamerInfo::Optimize(optim);
         }

         fPointers = fPointers || (0 != (fVal->fCase&G__BIT_ISPOINTER));
         fClass = cl;
         return this;
      }
      Fatal("TGenCollectionProxy","Components of %s not analysed!",cl->GetName());
   }
   Fatal("TGenCollectionProxy","Collection class %s not found!",fTypeinfo.name());
   return 0;
}

//______________________________________________________________________________
TClass *TGenCollectionProxy::GetCollectionClass()
{
   // Return a pointer to the TClass representing the container
   return fClass ? fClass : Initialize()->fClass;
}

//______________________________________________________________________________
UInt_t TGenCollectionProxy::Sizeof() const
{
   // Return the sizeof the collection object.
   return fClass->Size();
}

//______________________________________________________________________________
Bool_t TGenCollectionProxy::HasPointers() const
{
   // Return true if the content is of type 'pointer to'

   // Initialize proxy in case it hasn't been initialized yet
   if( !fValue )
      Initialize();

   // The content of a map and multimap is always a 'pair' and hence
   // fPointers means "Flag to indicate if containee has pointers (key or value)"
   // so we need to ignore its value for map and multimap;
   return fPointers && !(fSTL_type == TClassEdit::kMap || fSTL_type == TClassEdit::kMultiMap);
}

//______________________________________________________________________________
TClass *TGenCollectionProxy::GetValueClass()
{
   // Return a pointer to the TClass representing the content.

   if (!fValue) Initialize();
   return fValue ? fValue->fType.GetClass() : 0;
}

//______________________________________________________________________________
void TGenCollectionProxy::SetValueClass(TClass *new_Value_type)
{
   // Set pointer to the TClass representing the content.

   if (!fValue) Initialize();
   fValue->fType = new_Value_type;
}

//______________________________________________________________________________
EDataType TGenCollectionProxy::GetType()
{
   // If the content is a simple numerical value, return its type (see TDataType)

   if ( !fValue ) Initialize();
   return fValue->fKind;
}

//______________________________________________________________________________
void* TGenCollectionProxy::At(UInt_t idx)
{
   // Return the address of the value at index 'idx'
   if ( fEnv && fEnv->fObject ) {
      switch (fSTL_type) {
      case TClassEdit::kVector:
         fEnv->fIdx = idx;
         switch( idx ) {
         case 0:
            return fEnv->fStart = fFirst.invoke(fEnv);
         default:
            if (! fEnv->fStart ) fEnv->fStart = fFirst.invoke(fEnv);
            return ((char*)fEnv->fStart) + fValDiff*idx;
         }
      case TClassEdit::kSet:
      case TClassEdit::kMultiSet:
      case TClassEdit::kMap:
      case TClassEdit::kMultiMap:
         if ( fEnv->fUseTemp ) {
            return (((char*)fEnv->fTemp)+idx*fValDiff);
         }
      default:
         switch( idx ) {
         case 0:
            fEnv->fIdx = idx;
            return fEnv->fStart = fFirst.invoke(fEnv);
         default:  {
            fEnv->fIdx = idx - fEnv->fIdx;
            if (! fEnv->fStart ) fEnv->fStart = fFirst.invoke(fEnv);
            void* result = fNext.invoke(fEnv);
            fEnv->fIdx = idx;
            return result;
         }
         }
      }
   }
   Fatal("TGenCollectionProxy","At> Logic error - no proxy object set.");
   return 0;
}

//______________________________________________________________________________
void TGenCollectionProxy::Clear(const char* opt)
{
   // Clear the emulated collection.
   if ( fEnv && fEnv->fObject ) {
      if ( fPointers && opt && *opt=='f' ) {
         size_t i, n = *(size_t*)fSize.invoke(fEnv);
         if ( n > 0 ) {
            for (i=0; i<n; ++i)
               DeleteItem(true, TGenCollectionProxy::At(i));
         }
      }
      fClear.invoke(fEnv);
   }
}

//______________________________________________________________________________
UInt_t TGenCollectionProxy::Size() const
{
   // Return the current size of the container
   if ( fEnv && fEnv->fObject ) {
      return *(size_t*)fSize.invoke(fEnv);
   }
   Fatal("TGenCollectionProxy","Size> Logic error - no proxy object set.");
   return 0;
}

//______________________________________________________________________________
void TGenCollectionProxy::Resize(UInt_t n, Bool_t force)
{
   // Resize the container
   if ( fEnv && fEnv->fObject ) {
      if ( force && fPointers ) {
         size_t i, nold = *(size_t*)fSize.invoke(fEnv);
         if ( n != nold ) {
            for (i=n; i<nold; ++i)
               DeleteItem(true, *(void**)TGenCollectionProxy::At(i));
         }
      }
      MESSAGE(3, "Resize(n)" );
      fEnv->fSize = n;
      fResize.invoke(fEnv);
      return;
   }
   Fatal("TGenCollectionProxy","Resize> Logic error - no proxy object set.");
}

//______________________________________________________________________________
void* TGenCollectionProxy::Allocate(UInt_t n, Bool_t /* forceDelete */ )
{
   // Allocate the needed space.

   if ( fEnv && fEnv->fObject ) {
      switch ( fSTL_type ) {
      case TClassEdit::kSet:
      case TClassEdit::kMultiSet:
      case TClassEdit::kMap:
      case TClassEdit::kMultiMap:
         if ( fPointers )
            Clear("force");
         else
            fClear.invoke(fEnv);
         ++fEnv->fRefCount;
         fEnv->fSize  = n;
         if ( fEnv->fSpace < fValDiff*n ) {
            fEnv->fTemp = fEnv->fTemp ? ::realloc(fEnv->fTemp,fValDiff*n) : ::malloc(fValDiff*n);
            fEnv->fSpace = fValDiff*n;
         }
         fEnv->fUseTemp = kTRUE;
         fEnv->fStart = fEnv->fTemp;
         fConstruct.invoke(fEnv);
         return fEnv;
      case TClassEdit::kVector:
      case TClassEdit::kList:
      case TClassEdit::kDeque:
         if( fPointers ) {
            Clear("force");
         }
         fEnv->fSize = n;
         fResize.invoke(fEnv);
         return fEnv;
      }
   }
   return 0;
}

//______________________________________________________________________________
void TGenCollectionProxy::Commit(void* env)
{
   // Commit the change.

   switch (fSTL_type) {
   case TClassEdit::kVector:
   case TClassEdit::kList:
   case TClassEdit::kDeque:
      return;
   case TClassEdit::kMap:
   case TClassEdit::kMultiMap:
   case TClassEdit::kSet:
   case TClassEdit::kMultiSet:
      if ( env ) {
         EnvironBase_t* e = (EnvironBase_t*)env;
         if ( e->fObject ) {
            e->fStart = e->fTemp;
            fFeed.invoke(e);
         }
         fDestruct.invoke(e);
         e->fStart = 0;
         --e->fRefCount;
      }
      return;
   default:
      return;
   }
}

//______________________________________________________________________________
void TGenCollectionProxy::PushProxy(void *objstart)
{
   // Add an object.

   if ( !fValue ) Initialize();
   if ( !fProxyList.empty() ) {
      EnvironBase_t* back = fProxyList.back();
      if ( back->fObject == objstart ) {
         ++back->fRefCount;
         fProxyList.push_back(back);
         fEnv = back;
         return;
      }
   }
   EnvironBase_t* e    = 0;
   if ( fProxyKept.empty() ) {
      e = (EnvironBase_t*)fCreateEnv.invoke();
      e->fSpace = 0;
      e->fTemp  = 0;
      e->fUseTemp = kFALSE;
   }
   else {
      e = fProxyKept.back();
      fProxyKept.pop_back();
   }
   e->fSize     = 0;
   e->fRefCount = 1;
   e->fObject   = objstart;
   e->fStart    = 0;
   e->fIdx      = 0;
   // ::memset(e->buff,0,sizeof(e->buff));
   fProxyList.push_back(e);
   fEnv = e;
}

//______________________________________________________________________________
void TGenCollectionProxy::PopProxy()
{
   // Remove the last object.

   if ( !fProxyList.empty() ) {
      EnvironBase_t* e = fProxyList.back();
      if ( --e->fRefCount <= 0 ) {
         fProxyKept.push_back(e);
         e->fUseTemp = kFALSE;
      }
      fProxyList.pop_back();
   }
   fEnv = fProxyList.empty() ? 0 : fProxyList.back();
}

//______________________________________________________________________________
void TGenCollectionProxy::DeleteItem(Bool_t force, void* ptr) const
{
   // Call to delete/destruct individual item.
   if ( force && ptr ) {
      switch (fSTL_type) {
      case TClassEdit::kMap:
      case TClassEdit::kMultiMap:
         if ( fKey->fCase&G__BIT_ISPOINTER ) {
            fKey->DeleteItem(*(void**)ptr);
         }
         if ( fVal->fCase&G__BIT_ISPOINTER ) {
            char *addr = ((char*)ptr)+fValOffset;
            fVal->DeleteItem(*(void**)addr);
         }
         break;
      default:
         if ( fVal->fCase&G__BIT_ISPOINTER ) {
            fVal->DeleteItem(*(void**)ptr);
         }
         break;
      }
   }
}

//______________________________________________________________________________
void TGenCollectionProxy::Streamer(TBuffer &buff)
{
   // Streamer Function.
   if ( fEnv ) {
      GetCollectionClass()->Streamer( fEnv->fObject, buff );
      return;
   }
   Fatal("TGenCollectionProxy","Streamer> Logic error - no proxy object set.");
}

//______________________________________________________________________________
void TGenCollectionProxy::Streamer(TBuffer &buff, void *objp, int /* siz */ )
{
   // Streamer I/O overload
   TPushPop env(this, objp);
   Streamer(buff);
}

//______________________________________________________________________________
void TGenCollectionProxy::operator()(TBuffer &b, void *objp)
{
   // TClassStreamer IO overload
   Streamer(b, objp, 0);
}

 TGenCollectionProxy.cxx:1
 TGenCollectionProxy.cxx:2
 TGenCollectionProxy.cxx:3
 TGenCollectionProxy.cxx:4
 TGenCollectionProxy.cxx:5
 TGenCollectionProxy.cxx:6
 TGenCollectionProxy.cxx:7
 TGenCollectionProxy.cxx:8
 TGenCollectionProxy.cxx:9
 TGenCollectionProxy.cxx:10
 TGenCollectionProxy.cxx:11
 TGenCollectionProxy.cxx:12
 TGenCollectionProxy.cxx:13
 TGenCollectionProxy.cxx:14
 TGenCollectionProxy.cxx:15
 TGenCollectionProxy.cxx:16
 TGenCollectionProxy.cxx:17
 TGenCollectionProxy.cxx:18
 TGenCollectionProxy.cxx:19
 TGenCollectionProxy.cxx:20
 TGenCollectionProxy.cxx:21
 TGenCollectionProxy.cxx:22
 TGenCollectionProxy.cxx:23
 TGenCollectionProxy.cxx:24
 TGenCollectionProxy.cxx:25
 TGenCollectionProxy.cxx:26
 TGenCollectionProxy.cxx:27
 TGenCollectionProxy.cxx:28
 TGenCollectionProxy.cxx:29
 TGenCollectionProxy.cxx:30
 TGenCollectionProxy.cxx:31
 TGenCollectionProxy.cxx:32
 TGenCollectionProxy.cxx:33
 TGenCollectionProxy.cxx:34
 TGenCollectionProxy.cxx:35
 TGenCollectionProxy.cxx:36
 TGenCollectionProxy.cxx:37
 TGenCollectionProxy.cxx:38
 TGenCollectionProxy.cxx:39
 TGenCollectionProxy.cxx:40
 TGenCollectionProxy.cxx:41
 TGenCollectionProxy.cxx:42
 TGenCollectionProxy.cxx:43
 TGenCollectionProxy.cxx:44
 TGenCollectionProxy.cxx:45
 TGenCollectionProxy.cxx:46
 TGenCollectionProxy.cxx:47
 TGenCollectionProxy.cxx:48
 TGenCollectionProxy.cxx:49
 TGenCollectionProxy.cxx:50
 TGenCollectionProxy.cxx:51
 TGenCollectionProxy.cxx:52
 TGenCollectionProxy.cxx:53
 TGenCollectionProxy.cxx:54
 TGenCollectionProxy.cxx:55
 TGenCollectionProxy.cxx:56
 TGenCollectionProxy.cxx:57
 TGenCollectionProxy.cxx:58
 TGenCollectionProxy.cxx:59
 TGenCollectionProxy.cxx:60
 TGenCollectionProxy.cxx:61
 TGenCollectionProxy.cxx:62
 TGenCollectionProxy.cxx:63
 TGenCollectionProxy.cxx:64
 TGenCollectionProxy.cxx:65
 TGenCollectionProxy.cxx:66
 TGenCollectionProxy.cxx:67
 TGenCollectionProxy.cxx:68
 TGenCollectionProxy.cxx:69
 TGenCollectionProxy.cxx:70
 TGenCollectionProxy.cxx:71
 TGenCollectionProxy.cxx:72
 TGenCollectionProxy.cxx:73
 TGenCollectionProxy.cxx:74
 TGenCollectionProxy.cxx:75
 TGenCollectionProxy.cxx:76
 TGenCollectionProxy.cxx:77
 TGenCollectionProxy.cxx:78
 TGenCollectionProxy.cxx:79
 TGenCollectionProxy.cxx:80
 TGenCollectionProxy.cxx:81
 TGenCollectionProxy.cxx:82
 TGenCollectionProxy.cxx:83
 TGenCollectionProxy.cxx:84
 TGenCollectionProxy.cxx:85
 TGenCollectionProxy.cxx:86
 TGenCollectionProxy.cxx:87
 TGenCollectionProxy.cxx:88
 TGenCollectionProxy.cxx:89
 TGenCollectionProxy.cxx:90
 TGenCollectionProxy.cxx:91
 TGenCollectionProxy.cxx:92
 TGenCollectionProxy.cxx:93
 TGenCollectionProxy.cxx:94
 TGenCollectionProxy.cxx:95
 TGenCollectionProxy.cxx:96
 TGenCollectionProxy.cxx:97
 TGenCollectionProxy.cxx:98
 TGenCollectionProxy.cxx:99
 TGenCollectionProxy.cxx:100
 TGenCollectionProxy.cxx:101
 TGenCollectionProxy.cxx:102
 TGenCollectionProxy.cxx:103
 TGenCollectionProxy.cxx:104
 TGenCollectionProxy.cxx:105
 TGenCollectionProxy.cxx:106
 TGenCollectionProxy.cxx:107
 TGenCollectionProxy.cxx:108
 TGenCollectionProxy.cxx:109
 TGenCollectionProxy.cxx:110
 TGenCollectionProxy.cxx:111
 TGenCollectionProxy.cxx:112
 TGenCollectionProxy.cxx:113
 TGenCollectionProxy.cxx:114
 TGenCollectionProxy.cxx:115
 TGenCollectionProxy.cxx:116
 TGenCollectionProxy.cxx:117
 TGenCollectionProxy.cxx:118
 TGenCollectionProxy.cxx:119
 TGenCollectionProxy.cxx:120
 TGenCollectionProxy.cxx:121
 TGenCollectionProxy.cxx:122
 TGenCollectionProxy.cxx:123
 TGenCollectionProxy.cxx:124
 TGenCollectionProxy.cxx:125
 TGenCollectionProxy.cxx:126
 TGenCollectionProxy.cxx:127
 TGenCollectionProxy.cxx:128
 TGenCollectionProxy.cxx:129
 TGenCollectionProxy.cxx:130
 TGenCollectionProxy.cxx:131
 TGenCollectionProxy.cxx:132
 TGenCollectionProxy.cxx:133
 TGenCollectionProxy.cxx:134
 TGenCollectionProxy.cxx:135
 TGenCollectionProxy.cxx:136
 TGenCollectionProxy.cxx:137
 TGenCollectionProxy.cxx:138
 TGenCollectionProxy.cxx:139
 TGenCollectionProxy.cxx:140
 TGenCollectionProxy.cxx:141
 TGenCollectionProxy.cxx:142
 TGenCollectionProxy.cxx:143
 TGenCollectionProxy.cxx:144
 TGenCollectionProxy.cxx:145
 TGenCollectionProxy.cxx:146
 TGenCollectionProxy.cxx:147
 TGenCollectionProxy.cxx:148
 TGenCollectionProxy.cxx:149
 TGenCollectionProxy.cxx:150
 TGenCollectionProxy.cxx:151
 TGenCollectionProxy.cxx:152
 TGenCollectionProxy.cxx:153
 TGenCollectionProxy.cxx:154
 TGenCollectionProxy.cxx:155
 TGenCollectionProxy.cxx:156
 TGenCollectionProxy.cxx:157
 TGenCollectionProxy.cxx:158
 TGenCollectionProxy.cxx:159
 TGenCollectionProxy.cxx:160
 TGenCollectionProxy.cxx:161
 TGenCollectionProxy.cxx:162
 TGenCollectionProxy.cxx:163
 TGenCollectionProxy.cxx:164
 TGenCollectionProxy.cxx:165
 TGenCollectionProxy.cxx:166
 TGenCollectionProxy.cxx:167
 TGenCollectionProxy.cxx:168
 TGenCollectionProxy.cxx:169
 TGenCollectionProxy.cxx:170
 TGenCollectionProxy.cxx:171
 TGenCollectionProxy.cxx:172
 TGenCollectionProxy.cxx:173
 TGenCollectionProxy.cxx:174
 TGenCollectionProxy.cxx:175
 TGenCollectionProxy.cxx:176
 TGenCollectionProxy.cxx:177
 TGenCollectionProxy.cxx:178
 TGenCollectionProxy.cxx:179
 TGenCollectionProxy.cxx:180
 TGenCollectionProxy.cxx:181
 TGenCollectionProxy.cxx:182
 TGenCollectionProxy.cxx:183
 TGenCollectionProxy.cxx:184
 TGenCollectionProxy.cxx:185
 TGenCollectionProxy.cxx:186
 TGenCollectionProxy.cxx:187
 TGenCollectionProxy.cxx:188
 TGenCollectionProxy.cxx:189
 TGenCollectionProxy.cxx:190
 TGenCollectionProxy.cxx:191
 TGenCollectionProxy.cxx:192
 TGenCollectionProxy.cxx:193
 TGenCollectionProxy.cxx:194
 TGenCollectionProxy.cxx:195
 TGenCollectionProxy.cxx:196
 TGenCollectionProxy.cxx:197
 TGenCollectionProxy.cxx:198
 TGenCollectionProxy.cxx:199
 TGenCollectionProxy.cxx:200
 TGenCollectionProxy.cxx:201
 TGenCollectionProxy.cxx:202
 TGenCollectionProxy.cxx:203
 TGenCollectionProxy.cxx:204
 TGenCollectionProxy.cxx:205
 TGenCollectionProxy.cxx:206
 TGenCollectionProxy.cxx:207
 TGenCollectionProxy.cxx:208
 TGenCollectionProxy.cxx:209
 TGenCollectionProxy.cxx:210
 TGenCollectionProxy.cxx:211
 TGenCollectionProxy.cxx:212
 TGenCollectionProxy.cxx:213
 TGenCollectionProxy.cxx:214
 TGenCollectionProxy.cxx:215
 TGenCollectionProxy.cxx:216
 TGenCollectionProxy.cxx:217
 TGenCollectionProxy.cxx:218
 TGenCollectionProxy.cxx:219
 TGenCollectionProxy.cxx:220
 TGenCollectionProxy.cxx:221
 TGenCollectionProxy.cxx:222
 TGenCollectionProxy.cxx:223
 TGenCollectionProxy.cxx:224
 TGenCollectionProxy.cxx:225
 TGenCollectionProxy.cxx:226
 TGenCollectionProxy.cxx:227
 TGenCollectionProxy.cxx:228
 TGenCollectionProxy.cxx:229
 TGenCollectionProxy.cxx:230
 TGenCollectionProxy.cxx:231
 TGenCollectionProxy.cxx:232
 TGenCollectionProxy.cxx:233
 TGenCollectionProxy.cxx:234
 TGenCollectionProxy.cxx:235
 TGenCollectionProxy.cxx:236
 TGenCollectionProxy.cxx:237
 TGenCollectionProxy.cxx:238
 TGenCollectionProxy.cxx:239
 TGenCollectionProxy.cxx:240
 TGenCollectionProxy.cxx:241
 TGenCollectionProxy.cxx:242
 TGenCollectionProxy.cxx:243
 TGenCollectionProxy.cxx:244
 TGenCollectionProxy.cxx:245
 TGenCollectionProxy.cxx:246
 TGenCollectionProxy.cxx:247
 TGenCollectionProxy.cxx:248
 TGenCollectionProxy.cxx:249
 TGenCollectionProxy.cxx:250
 TGenCollectionProxy.cxx:251
 TGenCollectionProxy.cxx:252
 TGenCollectionProxy.cxx:253
 TGenCollectionProxy.cxx:254
 TGenCollectionProxy.cxx:255
 TGenCollectionProxy.cxx:256
 TGenCollectionProxy.cxx:257
 TGenCollectionProxy.cxx:258
 TGenCollectionProxy.cxx:259
 TGenCollectionProxy.cxx:260
 TGenCollectionProxy.cxx:261
 TGenCollectionProxy.cxx:262
 TGenCollectionProxy.cxx:263
 TGenCollectionProxy.cxx:264
 TGenCollectionProxy.cxx:265
 TGenCollectionProxy.cxx:266
 TGenCollectionProxy.cxx:267
 TGenCollectionProxy.cxx:268
 TGenCollectionProxy.cxx:269
 TGenCollectionProxy.cxx:270
 TGenCollectionProxy.cxx:271
 TGenCollectionProxy.cxx:272
 TGenCollectionProxy.cxx:273
 TGenCollectionProxy.cxx:274
 TGenCollectionProxy.cxx:275
 TGenCollectionProxy.cxx:276
 TGenCollectionProxy.cxx:277
 TGenCollectionProxy.cxx:278
 TGenCollectionProxy.cxx:279
 TGenCollectionProxy.cxx:280
 TGenCollectionProxy.cxx:281
 TGenCollectionProxy.cxx:282
 TGenCollectionProxy.cxx:283
 TGenCollectionProxy.cxx:284
 TGenCollectionProxy.cxx:285
 TGenCollectionProxy.cxx:286
 TGenCollectionProxy.cxx:287
 TGenCollectionProxy.cxx:288
 TGenCollectionProxy.cxx:289
 TGenCollectionProxy.cxx:290
 TGenCollectionProxy.cxx:291
 TGenCollectionProxy.cxx:292
 TGenCollectionProxy.cxx:293
 TGenCollectionProxy.cxx:294
 TGenCollectionProxy.cxx:295
 TGenCollectionProxy.cxx:296
 TGenCollectionProxy.cxx:297
 TGenCollectionProxy.cxx:298
 TGenCollectionProxy.cxx:299
 TGenCollectionProxy.cxx:300
 TGenCollectionProxy.cxx:301
 TGenCollectionProxy.cxx:302
 TGenCollectionProxy.cxx:303
 TGenCollectionProxy.cxx:304
 TGenCollectionProxy.cxx:305
 TGenCollectionProxy.cxx:306
 TGenCollectionProxy.cxx:307
 TGenCollectionProxy.cxx:308
 TGenCollectionProxy.cxx:309
 TGenCollectionProxy.cxx:310
 TGenCollectionProxy.cxx:311
 TGenCollectionProxy.cxx:312
 TGenCollectionProxy.cxx:313
 TGenCollectionProxy.cxx:314
 TGenCollectionProxy.cxx:315
 TGenCollectionProxy.cxx:316
 TGenCollectionProxy.cxx:317
 TGenCollectionProxy.cxx:318
 TGenCollectionProxy.cxx:319
 TGenCollectionProxy.cxx:320
 TGenCollectionProxy.cxx:321
 TGenCollectionProxy.cxx:322
 TGenCollectionProxy.cxx:323
 TGenCollectionProxy.cxx:324
 TGenCollectionProxy.cxx:325
 TGenCollectionProxy.cxx:326
 TGenCollectionProxy.cxx:327
 TGenCollectionProxy.cxx:328
 TGenCollectionProxy.cxx:329
 TGenCollectionProxy.cxx:330
 TGenCollectionProxy.cxx:331
 TGenCollectionProxy.cxx:332
 TGenCollectionProxy.cxx:333
 TGenCollectionProxy.cxx:334
 TGenCollectionProxy.cxx:335
 TGenCollectionProxy.cxx:336
 TGenCollectionProxy.cxx:337
 TGenCollectionProxy.cxx:338
 TGenCollectionProxy.cxx:339
 TGenCollectionProxy.cxx:340
 TGenCollectionProxy.cxx:341
 TGenCollectionProxy.cxx:342
 TGenCollectionProxy.cxx:343
 TGenCollectionProxy.cxx:344
 TGenCollectionProxy.cxx:345
 TGenCollectionProxy.cxx:346
 TGenCollectionProxy.cxx:347
 TGenCollectionProxy.cxx:348
 TGenCollectionProxy.cxx:349
 TGenCollectionProxy.cxx:350
 TGenCollectionProxy.cxx:351
 TGenCollectionProxy.cxx:352
 TGenCollectionProxy.cxx:353
 TGenCollectionProxy.cxx:354
 TGenCollectionProxy.cxx:355
 TGenCollectionProxy.cxx:356
 TGenCollectionProxy.cxx:357
 TGenCollectionProxy.cxx:358
 TGenCollectionProxy.cxx:359
 TGenCollectionProxy.cxx:360
 TGenCollectionProxy.cxx:361
 TGenCollectionProxy.cxx:362
 TGenCollectionProxy.cxx:363
 TGenCollectionProxy.cxx:364
 TGenCollectionProxy.cxx:365
 TGenCollectionProxy.cxx:366
 TGenCollectionProxy.cxx:367
 TGenCollectionProxy.cxx:368
 TGenCollectionProxy.cxx:369
 TGenCollectionProxy.cxx:370
 TGenCollectionProxy.cxx:371
 TGenCollectionProxy.cxx:372
 TGenCollectionProxy.cxx:373
 TGenCollectionProxy.cxx:374
 TGenCollectionProxy.cxx:375
 TGenCollectionProxy.cxx:376
 TGenCollectionProxy.cxx:377
 TGenCollectionProxy.cxx:378
 TGenCollectionProxy.cxx:379
 TGenCollectionProxy.cxx:380
 TGenCollectionProxy.cxx:381
 TGenCollectionProxy.cxx:382
 TGenCollectionProxy.cxx:383
 TGenCollectionProxy.cxx:384
 TGenCollectionProxy.cxx:385
 TGenCollectionProxy.cxx:386
 TGenCollectionProxy.cxx:387
 TGenCollectionProxy.cxx:388
 TGenCollectionProxy.cxx:389
 TGenCollectionProxy.cxx:390
 TGenCollectionProxy.cxx:391
 TGenCollectionProxy.cxx:392
 TGenCollectionProxy.cxx:393
 TGenCollectionProxy.cxx:394
 TGenCollectionProxy.cxx:395
 TGenCollectionProxy.cxx:396
 TGenCollectionProxy.cxx:397
 TGenCollectionProxy.cxx:398
 TGenCollectionProxy.cxx:399
 TGenCollectionProxy.cxx:400
 TGenCollectionProxy.cxx:401
 TGenCollectionProxy.cxx:402
 TGenCollectionProxy.cxx:403
 TGenCollectionProxy.cxx:404
 TGenCollectionProxy.cxx:405
 TGenCollectionProxy.cxx:406
 TGenCollectionProxy.cxx:407
 TGenCollectionProxy.cxx:408
 TGenCollectionProxy.cxx:409
 TGenCollectionProxy.cxx:410
 TGenCollectionProxy.cxx:411
 TGenCollectionProxy.cxx:412
 TGenCollectionProxy.cxx:413
 TGenCollectionProxy.cxx:414
 TGenCollectionProxy.cxx:415
 TGenCollectionProxy.cxx:416
 TGenCollectionProxy.cxx:417
 TGenCollectionProxy.cxx:418
 TGenCollectionProxy.cxx:419
 TGenCollectionProxy.cxx:420
 TGenCollectionProxy.cxx:421
 TGenCollectionProxy.cxx:422
 TGenCollectionProxy.cxx:423
 TGenCollectionProxy.cxx:424
 TGenCollectionProxy.cxx:425
 TGenCollectionProxy.cxx:426
 TGenCollectionProxy.cxx:427
 TGenCollectionProxy.cxx:428
 TGenCollectionProxy.cxx:429
 TGenCollectionProxy.cxx:430
 TGenCollectionProxy.cxx:431
 TGenCollectionProxy.cxx:432
 TGenCollectionProxy.cxx:433
 TGenCollectionProxy.cxx:434
 TGenCollectionProxy.cxx:435
 TGenCollectionProxy.cxx:436
 TGenCollectionProxy.cxx:437
 TGenCollectionProxy.cxx:438
 TGenCollectionProxy.cxx:439
 TGenCollectionProxy.cxx:440
 TGenCollectionProxy.cxx:441
 TGenCollectionProxy.cxx:442
 TGenCollectionProxy.cxx:443
 TGenCollectionProxy.cxx:444
 TGenCollectionProxy.cxx:445
 TGenCollectionProxy.cxx:446
 TGenCollectionProxy.cxx:447
 TGenCollectionProxy.cxx:448
 TGenCollectionProxy.cxx:449
 TGenCollectionProxy.cxx:450
 TGenCollectionProxy.cxx:451
 TGenCollectionProxy.cxx:452
 TGenCollectionProxy.cxx:453
 TGenCollectionProxy.cxx:454
 TGenCollectionProxy.cxx:455
 TGenCollectionProxy.cxx:456
 TGenCollectionProxy.cxx:457
 TGenCollectionProxy.cxx:458
 TGenCollectionProxy.cxx:459
 TGenCollectionProxy.cxx:460
 TGenCollectionProxy.cxx:461
 TGenCollectionProxy.cxx:462
 TGenCollectionProxy.cxx:463
 TGenCollectionProxy.cxx:464
 TGenCollectionProxy.cxx:465
 TGenCollectionProxy.cxx:466
 TGenCollectionProxy.cxx:467
 TGenCollectionProxy.cxx:468
 TGenCollectionProxy.cxx:469
 TGenCollectionProxy.cxx:470
 TGenCollectionProxy.cxx:471
 TGenCollectionProxy.cxx:472
 TGenCollectionProxy.cxx:473
 TGenCollectionProxy.cxx:474
 TGenCollectionProxy.cxx:475
 TGenCollectionProxy.cxx:476
 TGenCollectionProxy.cxx:477
 TGenCollectionProxy.cxx:478
 TGenCollectionProxy.cxx:479
 TGenCollectionProxy.cxx:480
 TGenCollectionProxy.cxx:481
 TGenCollectionProxy.cxx:482
 TGenCollectionProxy.cxx:483
 TGenCollectionProxy.cxx:484
 TGenCollectionProxy.cxx:485
 TGenCollectionProxy.cxx:486
 TGenCollectionProxy.cxx:487
 TGenCollectionProxy.cxx:488
 TGenCollectionProxy.cxx:489
 TGenCollectionProxy.cxx:490
 TGenCollectionProxy.cxx:491
 TGenCollectionProxy.cxx:492
 TGenCollectionProxy.cxx:493
 TGenCollectionProxy.cxx:494
 TGenCollectionProxy.cxx:495
 TGenCollectionProxy.cxx:496
 TGenCollectionProxy.cxx:497
 TGenCollectionProxy.cxx:498
 TGenCollectionProxy.cxx:499
 TGenCollectionProxy.cxx:500
 TGenCollectionProxy.cxx:501
 TGenCollectionProxy.cxx:502
 TGenCollectionProxy.cxx:503
 TGenCollectionProxy.cxx:504
 TGenCollectionProxy.cxx:505
 TGenCollectionProxy.cxx:506
 TGenCollectionProxy.cxx:507
 TGenCollectionProxy.cxx:508
 TGenCollectionProxy.cxx:509
 TGenCollectionProxy.cxx:510
 TGenCollectionProxy.cxx:511
 TGenCollectionProxy.cxx:512
 TGenCollectionProxy.cxx:513
 TGenCollectionProxy.cxx:514
 TGenCollectionProxy.cxx:515
 TGenCollectionProxy.cxx:516
 TGenCollectionProxy.cxx:517
 TGenCollectionProxy.cxx:518
 TGenCollectionProxy.cxx:519
 TGenCollectionProxy.cxx:520
 TGenCollectionProxy.cxx:521
 TGenCollectionProxy.cxx:522
 TGenCollectionProxy.cxx:523
 TGenCollectionProxy.cxx:524
 TGenCollectionProxy.cxx:525
 TGenCollectionProxy.cxx:526
 TGenCollectionProxy.cxx:527
 TGenCollectionProxy.cxx:528
 TGenCollectionProxy.cxx:529
 TGenCollectionProxy.cxx:530
 TGenCollectionProxy.cxx:531
 TGenCollectionProxy.cxx:532
 TGenCollectionProxy.cxx:533
 TGenCollectionProxy.cxx:534
 TGenCollectionProxy.cxx:535
 TGenCollectionProxy.cxx:536
 TGenCollectionProxy.cxx:537
 TGenCollectionProxy.cxx:538
 TGenCollectionProxy.cxx:539
 TGenCollectionProxy.cxx:540
 TGenCollectionProxy.cxx:541
 TGenCollectionProxy.cxx:542
 TGenCollectionProxy.cxx:543
 TGenCollectionProxy.cxx:544
 TGenCollectionProxy.cxx:545
 TGenCollectionProxy.cxx:546
 TGenCollectionProxy.cxx:547
 TGenCollectionProxy.cxx:548
 TGenCollectionProxy.cxx:549
 TGenCollectionProxy.cxx:550
 TGenCollectionProxy.cxx:551
 TGenCollectionProxy.cxx:552
 TGenCollectionProxy.cxx:553
 TGenCollectionProxy.cxx:554
 TGenCollectionProxy.cxx:555
 TGenCollectionProxy.cxx:556
 TGenCollectionProxy.cxx:557
 TGenCollectionProxy.cxx:558
 TGenCollectionProxy.cxx:559
 TGenCollectionProxy.cxx:560
 TGenCollectionProxy.cxx:561
 TGenCollectionProxy.cxx:562
 TGenCollectionProxy.cxx:563
 TGenCollectionProxy.cxx:564
 TGenCollectionProxy.cxx:565
 TGenCollectionProxy.cxx:566
 TGenCollectionProxy.cxx:567
 TGenCollectionProxy.cxx:568
 TGenCollectionProxy.cxx:569
 TGenCollectionProxy.cxx:570
 TGenCollectionProxy.cxx:571
 TGenCollectionProxy.cxx:572
 TGenCollectionProxy.cxx:573
 TGenCollectionProxy.cxx:574
 TGenCollectionProxy.cxx:575
 TGenCollectionProxy.cxx:576
 TGenCollectionProxy.cxx:577
 TGenCollectionProxy.cxx:578
 TGenCollectionProxy.cxx:579
 TGenCollectionProxy.cxx:580
 TGenCollectionProxy.cxx:581
 TGenCollectionProxy.cxx:582
 TGenCollectionProxy.cxx:583
 TGenCollectionProxy.cxx:584
 TGenCollectionProxy.cxx:585
 TGenCollectionProxy.cxx:586
 TGenCollectionProxy.cxx:587
 TGenCollectionProxy.cxx:588
 TGenCollectionProxy.cxx:589
 TGenCollectionProxy.cxx:590
 TGenCollectionProxy.cxx:591
 TGenCollectionProxy.cxx:592
 TGenCollectionProxy.cxx:593
 TGenCollectionProxy.cxx:594
 TGenCollectionProxy.cxx:595
 TGenCollectionProxy.cxx:596
 TGenCollectionProxy.cxx:597
 TGenCollectionProxy.cxx:598
 TGenCollectionProxy.cxx:599
 TGenCollectionProxy.cxx:600
 TGenCollectionProxy.cxx:601
 TGenCollectionProxy.cxx:602
 TGenCollectionProxy.cxx:603
 TGenCollectionProxy.cxx:604
 TGenCollectionProxy.cxx:605
 TGenCollectionProxy.cxx:606
 TGenCollectionProxy.cxx:607
 TGenCollectionProxy.cxx:608
 TGenCollectionProxy.cxx:609
 TGenCollectionProxy.cxx:610
 TGenCollectionProxy.cxx:611
 TGenCollectionProxy.cxx:612
 TGenCollectionProxy.cxx:613
 TGenCollectionProxy.cxx:614
 TGenCollectionProxy.cxx:615
 TGenCollectionProxy.cxx:616
 TGenCollectionProxy.cxx:617
 TGenCollectionProxy.cxx:618
 TGenCollectionProxy.cxx:619
 TGenCollectionProxy.cxx:620
 TGenCollectionProxy.cxx:621
 TGenCollectionProxy.cxx:622
 TGenCollectionProxy.cxx:623
 TGenCollectionProxy.cxx:624
 TGenCollectionProxy.cxx:625
 TGenCollectionProxy.cxx:626
 TGenCollectionProxy.cxx:627
 TGenCollectionProxy.cxx:628
 TGenCollectionProxy.cxx:629
 TGenCollectionProxy.cxx:630
 TGenCollectionProxy.cxx:631
 TGenCollectionProxy.cxx:632
 TGenCollectionProxy.cxx:633
 TGenCollectionProxy.cxx:634
 TGenCollectionProxy.cxx:635
 TGenCollectionProxy.cxx:636
 TGenCollectionProxy.cxx:637
 TGenCollectionProxy.cxx:638
 TGenCollectionProxy.cxx:639
 TGenCollectionProxy.cxx:640
 TGenCollectionProxy.cxx:641
 TGenCollectionProxy.cxx:642
 TGenCollectionProxy.cxx:643
 TGenCollectionProxy.cxx:644
 TGenCollectionProxy.cxx:645
 TGenCollectionProxy.cxx:646
 TGenCollectionProxy.cxx:647
 TGenCollectionProxy.cxx:648
 TGenCollectionProxy.cxx:649
 TGenCollectionProxy.cxx:650
 TGenCollectionProxy.cxx:651
 TGenCollectionProxy.cxx:652
 TGenCollectionProxy.cxx:653
 TGenCollectionProxy.cxx:654
 TGenCollectionProxy.cxx:655
 TGenCollectionProxy.cxx:656
 TGenCollectionProxy.cxx:657
 TGenCollectionProxy.cxx:658
 TGenCollectionProxy.cxx:659
 TGenCollectionProxy.cxx:660
 TGenCollectionProxy.cxx:661
 TGenCollectionProxy.cxx:662
 TGenCollectionProxy.cxx:663
 TGenCollectionProxy.cxx:664
 TGenCollectionProxy.cxx:665
 TGenCollectionProxy.cxx:666
 TGenCollectionProxy.cxx:667
 TGenCollectionProxy.cxx:668
 TGenCollectionProxy.cxx:669
 TGenCollectionProxy.cxx:670
 TGenCollectionProxy.cxx:671
 TGenCollectionProxy.cxx:672
 TGenCollectionProxy.cxx:673
 TGenCollectionProxy.cxx:674
 TGenCollectionProxy.cxx:675
 TGenCollectionProxy.cxx:676
 TGenCollectionProxy.cxx:677
 TGenCollectionProxy.cxx:678
 TGenCollectionProxy.cxx:679
 TGenCollectionProxy.cxx:680
 TGenCollectionProxy.cxx:681
 TGenCollectionProxy.cxx:682
 TGenCollectionProxy.cxx:683
 TGenCollectionProxy.cxx:684
 TGenCollectionProxy.cxx:685
 TGenCollectionProxy.cxx:686
 TGenCollectionProxy.cxx:687
 TGenCollectionProxy.cxx:688
 TGenCollectionProxy.cxx:689
 TGenCollectionProxy.cxx:690
 TGenCollectionProxy.cxx:691
 TGenCollectionProxy.cxx:692
 TGenCollectionProxy.cxx:693
 TGenCollectionProxy.cxx:694
 TGenCollectionProxy.cxx:695
 TGenCollectionProxy.cxx:696
 TGenCollectionProxy.cxx:697
 TGenCollectionProxy.cxx:698
 TGenCollectionProxy.cxx:699
 TGenCollectionProxy.cxx:700
 TGenCollectionProxy.cxx:701
 TGenCollectionProxy.cxx:702
 TGenCollectionProxy.cxx:703
 TGenCollectionProxy.cxx:704
 TGenCollectionProxy.cxx:705
 TGenCollectionProxy.cxx:706
 TGenCollectionProxy.cxx:707
 TGenCollectionProxy.cxx:708
 TGenCollectionProxy.cxx:709
 TGenCollectionProxy.cxx:710
 TGenCollectionProxy.cxx:711
 TGenCollectionProxy.cxx:712
 TGenCollectionProxy.cxx:713
 TGenCollectionProxy.cxx:714
 TGenCollectionProxy.cxx:715
 TGenCollectionProxy.cxx:716
 TGenCollectionProxy.cxx:717
 TGenCollectionProxy.cxx:718
 TGenCollectionProxy.cxx:719
 TGenCollectionProxy.cxx:720
 TGenCollectionProxy.cxx:721
 TGenCollectionProxy.cxx:722
 TGenCollectionProxy.cxx:723
 TGenCollectionProxy.cxx:724
 TGenCollectionProxy.cxx:725
 TGenCollectionProxy.cxx:726
 TGenCollectionProxy.cxx:727
 TGenCollectionProxy.cxx:728
 TGenCollectionProxy.cxx:729
 TGenCollectionProxy.cxx:730
 TGenCollectionProxy.cxx:731
 TGenCollectionProxy.cxx:732
 TGenCollectionProxy.cxx:733
 TGenCollectionProxy.cxx:734
 TGenCollectionProxy.cxx:735
 TGenCollectionProxy.cxx:736
 TGenCollectionProxy.cxx:737
 TGenCollectionProxy.cxx:738
 TGenCollectionProxy.cxx:739
 TGenCollectionProxy.cxx:740
 TGenCollectionProxy.cxx:741
 TGenCollectionProxy.cxx:742
 TGenCollectionProxy.cxx:743
 TGenCollectionProxy.cxx:744
 TGenCollectionProxy.cxx:745
 TGenCollectionProxy.cxx:746
 TGenCollectionProxy.cxx:747
 TGenCollectionProxy.cxx:748
 TGenCollectionProxy.cxx:749
 TGenCollectionProxy.cxx:750
 TGenCollectionProxy.cxx:751
 TGenCollectionProxy.cxx:752
 TGenCollectionProxy.cxx:753
 TGenCollectionProxy.cxx:754
 TGenCollectionProxy.cxx:755
 TGenCollectionProxy.cxx:756
 TGenCollectionProxy.cxx:757
 TGenCollectionProxy.cxx:758
 TGenCollectionProxy.cxx:759
 TGenCollectionProxy.cxx:760
 TGenCollectionProxy.cxx:761
 TGenCollectionProxy.cxx:762
 TGenCollectionProxy.cxx:763
 TGenCollectionProxy.cxx:764
 TGenCollectionProxy.cxx:765
 TGenCollectionProxy.cxx:766
 TGenCollectionProxy.cxx:767
 TGenCollectionProxy.cxx:768
 TGenCollectionProxy.cxx:769
 TGenCollectionProxy.cxx:770
 TGenCollectionProxy.cxx:771
 TGenCollectionProxy.cxx:772
 TGenCollectionProxy.cxx:773
 TGenCollectionProxy.cxx:774
 TGenCollectionProxy.cxx:775
 TGenCollectionProxy.cxx:776
 TGenCollectionProxy.cxx:777
 TGenCollectionProxy.cxx:778
 TGenCollectionProxy.cxx:779
 TGenCollectionProxy.cxx:780
 TGenCollectionProxy.cxx:781
 TGenCollectionProxy.cxx:782
 TGenCollectionProxy.cxx:783
 TGenCollectionProxy.cxx:784
 TGenCollectionProxy.cxx:785
 TGenCollectionProxy.cxx:786
 TGenCollectionProxy.cxx:787
 TGenCollectionProxy.cxx:788
 TGenCollectionProxy.cxx:789
 TGenCollectionProxy.cxx:790
 TGenCollectionProxy.cxx:791
 TGenCollectionProxy.cxx:792
 TGenCollectionProxy.cxx:793
 TGenCollectionProxy.cxx:794
 TGenCollectionProxy.cxx:795
 TGenCollectionProxy.cxx:796
 TGenCollectionProxy.cxx:797
 TGenCollectionProxy.cxx:798
 TGenCollectionProxy.cxx:799
 TGenCollectionProxy.cxx:800
 TGenCollectionProxy.cxx:801
 TGenCollectionProxy.cxx:802
 TGenCollectionProxy.cxx:803
 TGenCollectionProxy.cxx:804
 TGenCollectionProxy.cxx:805
 TGenCollectionProxy.cxx:806
 TGenCollectionProxy.cxx:807
 TGenCollectionProxy.cxx:808
 TGenCollectionProxy.cxx:809
 TGenCollectionProxy.cxx:810
 TGenCollectionProxy.cxx:811
 TGenCollectionProxy.cxx:812
 TGenCollectionProxy.cxx:813
 TGenCollectionProxy.cxx:814
 TGenCollectionProxy.cxx:815
 TGenCollectionProxy.cxx:816
 TGenCollectionProxy.cxx:817
 TGenCollectionProxy.cxx:818
 TGenCollectionProxy.cxx:819
 TGenCollectionProxy.cxx:820
 TGenCollectionProxy.cxx:821
 TGenCollectionProxy.cxx:822
 TGenCollectionProxy.cxx:823
 TGenCollectionProxy.cxx:824
 TGenCollectionProxy.cxx:825
 TGenCollectionProxy.cxx:826
 TGenCollectionProxy.cxx:827
 TGenCollectionProxy.cxx:828
 TGenCollectionProxy.cxx:829
 TGenCollectionProxy.cxx:830
 TGenCollectionProxy.cxx:831
 TGenCollectionProxy.cxx:832
 TGenCollectionProxy.cxx:833
 TGenCollectionProxy.cxx:834
 TGenCollectionProxy.cxx:835
 TGenCollectionProxy.cxx:836
 TGenCollectionProxy.cxx:837
 TGenCollectionProxy.cxx:838
 TGenCollectionProxy.cxx:839
 TGenCollectionProxy.cxx:840
 TGenCollectionProxy.cxx:841
 TGenCollectionProxy.cxx:842
 TGenCollectionProxy.cxx:843
 TGenCollectionProxy.cxx:844
 TGenCollectionProxy.cxx:845
 TGenCollectionProxy.cxx:846
 TGenCollectionProxy.cxx:847
 TGenCollectionProxy.cxx:848
 TGenCollectionProxy.cxx:849
 TGenCollectionProxy.cxx:850
 TGenCollectionProxy.cxx:851
 TGenCollectionProxy.cxx:852
 TGenCollectionProxy.cxx:853
 TGenCollectionProxy.cxx:854
 TGenCollectionProxy.cxx:855
 TGenCollectionProxy.cxx:856
 TGenCollectionProxy.cxx:857
 TGenCollectionProxy.cxx:858
 TGenCollectionProxy.cxx:859
 TGenCollectionProxy.cxx:860
 TGenCollectionProxy.cxx:861
 TGenCollectionProxy.cxx:862
 TGenCollectionProxy.cxx:863
 TGenCollectionProxy.cxx:864
 TGenCollectionProxy.cxx:865
 TGenCollectionProxy.cxx:866
 TGenCollectionProxy.cxx:867
 TGenCollectionProxy.cxx:868
 TGenCollectionProxy.cxx:869
 TGenCollectionProxy.cxx:870
 TGenCollectionProxy.cxx:871
 TGenCollectionProxy.cxx:872
 TGenCollectionProxy.cxx:873
 TGenCollectionProxy.cxx:874
 TGenCollectionProxy.cxx:875
 TGenCollectionProxy.cxx:876
 TGenCollectionProxy.cxx:877
 TGenCollectionProxy.cxx:878
 TGenCollectionProxy.cxx:879
 TGenCollectionProxy.cxx:880
 TGenCollectionProxy.cxx:881
 TGenCollectionProxy.cxx:882
 TGenCollectionProxy.cxx:883
 TGenCollectionProxy.cxx:884
 TGenCollectionProxy.cxx:885
 TGenCollectionProxy.cxx:886
 TGenCollectionProxy.cxx:887
 TGenCollectionProxy.cxx:888
 TGenCollectionProxy.cxx:889
 TGenCollectionProxy.cxx:890
 TGenCollectionProxy.cxx:891
 TGenCollectionProxy.cxx:892
 TGenCollectionProxy.cxx:893
 TGenCollectionProxy.cxx:894
 TGenCollectionProxy.cxx:895
 TGenCollectionProxy.cxx:896
 TGenCollectionProxy.cxx:897
 TGenCollectionProxy.cxx:898
 TGenCollectionProxy.cxx:899
 TGenCollectionProxy.cxx:900
 TGenCollectionProxy.cxx:901
 TGenCollectionProxy.cxx:902
 TGenCollectionProxy.cxx:903
 TGenCollectionProxy.cxx:904
 TGenCollectionProxy.cxx:905
 TGenCollectionProxy.cxx:906
 TGenCollectionProxy.cxx:907
 TGenCollectionProxy.cxx:908
 TGenCollectionProxy.cxx:909
 TGenCollectionProxy.cxx:910
 TGenCollectionProxy.cxx:911
 TGenCollectionProxy.cxx:912
 TGenCollectionProxy.cxx:913
 TGenCollectionProxy.cxx:914
 TGenCollectionProxy.cxx:915
 TGenCollectionProxy.cxx:916
 TGenCollectionProxy.cxx:917
 TGenCollectionProxy.cxx:918
 TGenCollectionProxy.cxx:919
 TGenCollectionProxy.cxx:920
 TGenCollectionProxy.cxx:921
 TGenCollectionProxy.cxx:922
 TGenCollectionProxy.cxx:923
 TGenCollectionProxy.cxx:924
 TGenCollectionProxy.cxx:925
 TGenCollectionProxy.cxx:926
 TGenCollectionProxy.cxx:927
 TGenCollectionProxy.cxx:928
 TGenCollectionProxy.cxx:929
 TGenCollectionProxy.cxx:930
 TGenCollectionProxy.cxx:931
 TGenCollectionProxy.cxx:932
 TGenCollectionProxy.cxx:933
 TGenCollectionProxy.cxx:934
 TGenCollectionProxy.cxx:935
 TGenCollectionProxy.cxx:936
 TGenCollectionProxy.cxx:937
 TGenCollectionProxy.cxx:938
 TGenCollectionProxy.cxx:939
 TGenCollectionProxy.cxx:940
 TGenCollectionProxy.cxx:941
 TGenCollectionProxy.cxx:942
 TGenCollectionProxy.cxx:943
 TGenCollectionProxy.cxx:944
 TGenCollectionProxy.cxx:945
 TGenCollectionProxy.cxx:946
 TGenCollectionProxy.cxx:947
 TGenCollectionProxy.cxx:948
 TGenCollectionProxy.cxx:949
 TGenCollectionProxy.cxx:950
 TGenCollectionProxy.cxx:951
 TGenCollectionProxy.cxx:952
 TGenCollectionProxy.cxx:953
 TGenCollectionProxy.cxx:954
 TGenCollectionProxy.cxx:955
 TGenCollectionProxy.cxx:956
 TGenCollectionProxy.cxx:957
 TGenCollectionProxy.cxx:958
 TGenCollectionProxy.cxx:959
 TGenCollectionProxy.cxx:960
 TGenCollectionProxy.cxx:961
 TGenCollectionProxy.cxx:962
 TGenCollectionProxy.cxx:963
 TGenCollectionProxy.cxx:964
 TGenCollectionProxy.cxx:965
 TGenCollectionProxy.cxx:966
 TGenCollectionProxy.cxx:967
 TGenCollectionProxy.cxx:968
 TGenCollectionProxy.cxx:969
 TGenCollectionProxy.cxx:970
 TGenCollectionProxy.cxx:971
 TGenCollectionProxy.cxx:972
 TGenCollectionProxy.cxx:973
 TGenCollectionProxy.cxx:974
 TGenCollectionProxy.cxx:975
 TGenCollectionProxy.cxx:976
 TGenCollectionProxy.cxx:977
 TGenCollectionProxy.cxx:978
 TGenCollectionProxy.cxx:979
 TGenCollectionProxy.cxx:980
 TGenCollectionProxy.cxx:981
 TGenCollectionProxy.cxx:982
 TGenCollectionProxy.cxx:983
 TGenCollectionProxy.cxx:984
 TGenCollectionProxy.cxx:985
 TGenCollectionProxy.cxx:986
 TGenCollectionProxy.cxx:987
 TGenCollectionProxy.cxx:988
 TGenCollectionProxy.cxx:989
 TGenCollectionProxy.cxx:990
 TGenCollectionProxy.cxx:991
 TGenCollectionProxy.cxx:992
 TGenCollectionProxy.cxx:993
 TGenCollectionProxy.cxx:994
 TGenCollectionProxy.cxx:995
 TGenCollectionProxy.cxx:996
 TGenCollectionProxy.cxx:997
 TGenCollectionProxy.cxx:998
 TGenCollectionProxy.cxx:999
 TGenCollectionProxy.cxx:1000
 TGenCollectionProxy.cxx:1001
 TGenCollectionProxy.cxx:1002
 TGenCollectionProxy.cxx:1003
 TGenCollectionProxy.cxx:1004
 TGenCollectionProxy.cxx:1005
 TGenCollectionProxy.cxx:1006
 TGenCollectionProxy.cxx:1007
 TGenCollectionProxy.cxx:1008
 TGenCollectionProxy.cxx:1009
 TGenCollectionProxy.cxx:1010
 TGenCollectionProxy.cxx:1011
 TGenCollectionProxy.cxx:1012
 TGenCollectionProxy.cxx:1013
 TGenCollectionProxy.cxx:1014
 TGenCollectionProxy.cxx:1015
 TGenCollectionProxy.cxx:1016
 TGenCollectionProxy.cxx:1017
 TGenCollectionProxy.cxx:1018
 TGenCollectionProxy.cxx:1019
 TGenCollectionProxy.cxx:1020
 TGenCollectionProxy.cxx:1021
 TGenCollectionProxy.cxx:1022
 TGenCollectionProxy.cxx:1023