ROOT logo
// @(#)root/io:$Id: TEmulatedCollectionProxy.cxx 27255 2009-01-27 10:59:53Z pcanal $
// Author: Markus Frank 28/10/04

/*************************************************************************
 * 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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TEmulatedCollectionProxy
//
// Streamer 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 "TEmulatedCollectionProxy.h"
#include "TStreamerElement.h"
#include "TStreamerInfo.h"
#include "TClassEdit.h"
#include "TError.h"
#include "TROOT.h"
#include "Riostream.h"

#include "TVirtualMutex.h" // For R__LOCKGUARD

//
// Utility function to allow the creation of a TClass for a std::pair without
// a dictionary (See end of file for implementation
//

static TStreamerElement* R__CreateEmulatedElement(const char *dmName, const char *dmFull, Int_t offset);
static TStreamerInfo *R__GenerateTClassForPair(const string &f, const string &s);

TEmulatedCollectionProxy::TEmulatedCollectionProxy(const TEmulatedCollectionProxy& copy)
   : TGenCollectionProxy(copy)
{
   // Build a Streamer for an emulated vector whose type is 'name'.
}

TEmulatedCollectionProxy::TEmulatedCollectionProxy(const char* cl_name)
   : TGenCollectionProxy(typeid(std::vector<char>), sizeof(std::vector<char>::iterator))
{
   // Build a Streamer for a collection whose type is described by 'collectionClass'.

   fName = cl_name;
   this->TEmulatedCollectionProxy::InitializeEx();
   fCreateEnv = TGenCollectionProxy::Env_t::Create;
}

TEmulatedCollectionProxy::~TEmulatedCollectionProxy()
{
   // Standard destructor
   if ( fEnv && fEnv->fObject ) {
      Clear();
   }
}

TVirtualCollectionProxy* TEmulatedCollectionProxy::Generate() const
{
   // Virtual copy constructor

   if ( !fClass ) Initialize();
   return new TEmulatedCollectionProxy(*this);
}

void TEmulatedCollectionProxy::Destructor(void* p, Bool_t dtorOnly)
{
   // Virtual destructor

   if (!p) return;
   TVirtualCollectionProxy::TPushPop env(this, p);
   Clear();
   if (!dtorOnly) {
      delete (Cont_t*) p;
   }
}

void TEmulatedCollectionProxy::DeleteArray(void* p, Bool_t dtorOnly)
{
   // Virtual array destructor

   // Cannot implement this properly, we do not know
   // how many elements are in the array.
   Warning("DeleteArray", "Cannot properly delete emulated array of %s at %p, I don't know how many elements it has!", fClass->GetName(), p);
   if (!dtorOnly) {
      delete[] (Cont_t*) p;
   }
}

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


   TClass *cl = TClass::GetClass(fName.c_str());
   fEnv = 0;
   fKey = 0;
   if ( cl )  {
      int nested = 0;
      std::vector<std::string> inside;
      fPointers  = false;
      int num = TClassEdit::GetSplit(fName.c_str(),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());
         // std::cout << "Initialized " << typeid(*this).name() << ":" << fName << std::endl;
         int slong = sizeof(void*);
         switch ( fSTL_type )  {
            case TClassEdit::kMap:
            case TClassEdit::kMultiMap:
               nam = "pair<"+inside[1]+","+inside[2];
               nam += (nam[nam.length()-1]=='>') ? " >" : ">";
               if (0==TClass::GetClass(nam.c_str())) {
                  // We need to emulate the pair
                  R__GenerateTClassForPair(inside[1],inside[2]);
               }
               fValue = new Value(nam);
               fKey   = new Value(inside[1]);
               fVal   = new Value(inside[2]);
               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;
                  if (fVal->fCase != G__BIT_ISFUNDAMENTAL) {
                     fValDiff += (slong - fValDiff%slong)%slong;
                  }
               }
               break;
         }
         fPointers |= 0 != (fVal->fCase&G__BIT_ISPOINTER);
         fClass = cl;
         return this;
      }
      Fatal("TEmulatedCollectionProxy","Components of %s not analysed!",cl->GetName());
   }
   Fatal("TEmulatedCollectionProxy","Collection class %s not found!",fTypeinfo.name());
   return 0;
}

UInt_t TEmulatedCollectionProxy::Size() const
{
   // Return the current size of the container

   if ( fEnv && fEnv->fObject )   {
      return fEnv->fSize = PCont_t(fEnv->fObject)->size()/fValDiff;
   }
   Fatal("TEmulatedCollectionProxy","Size> Logic error - no proxy object set.");
   return 0;
}

void TEmulatedCollectionProxy::Clear(const char* opt)
{
   // Clear the emulated collection.
   Resize(0, opt && *opt=='f');
}

void TEmulatedCollectionProxy::Shrink(UInt_t nCurr, UInt_t left, Bool_t /* force */ )
{
   // Shrink the container

   typedef std::string  String_t;
   PCont_t c   = PCont_t(fEnv->fObject);
   char* addr  = ((char*)fEnv->fStart) + fValDiff*left;
   size_t i;

   switch ( fSTL_type )  {
      case TClassEdit::kMap:
      case TClassEdit::kMultiMap:
         addr = ((char*)fEnv->fStart) + fValDiff*left;
         switch(fKey->fCase)  {
            case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
            case G__BIT_ISENUM:
               break;
            case G__BIT_ISCLASS:
               for( i= fKey->fType ? left : nCurr; i<nCurr; ++i, addr += fValDiff ) {
                  // Call emulation in case non-compiled content
                  fKey->fType->Destructor(addr, kTRUE);
               }
               break;
            case kBIT_ISSTRING:
               for( i=left; i<nCurr; ++i, addr += fValDiff ) {
                  ((std::string*)addr)->~String_t();
               }
               break;
            case G__BIT_ISPOINTER|G__BIT_ISCLASS:
               for( i=left; i<nCurr; ++i, addr += fValDiff )  {
                  StreamHelper* h = (StreamHelper*)addr;
                  //Eventually we'll need to delete this
                  //(but only when needed).
                  //void* ptr = h->ptr();
                  //fKey->fType->Destructor(ptr);
                  h->set(0);
               }
            case G__BIT_ISPOINTER|kBIT_ISSTRING:
               for( i=nCurr; i<left; ++i, addr += fValDiff )   {
                  StreamHelper* h = (StreamHelper*)addr;
                  //Eventually we'll need to delete this
                  //(but only when needed).
                  //delete (std::string*)h->ptr();
                  h->set(0);
               }
               break;
            case G__BIT_ISPOINTER|kBIT_ISTSTRING|G__BIT_ISCLASS:
               for( i=nCurr; i<left; ++i, addr += fValDiff )   {
                  StreamHelper* h = (StreamHelper*)addr;
                  //delete (TString*)h->ptr();
                  h->set(0);
               }
               break;
         }
         addr = ((char*)fEnv->fStart)+fValOffset+fValDiff*left;
         // DO NOT break; just continue

         // General case for all values
      default:
         switch( fVal->fCase )  {
            case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
            case G__BIT_ISENUM:
               break;
            case G__BIT_ISCLASS:
               for( i=left; i<nCurr; ++i, addr += fValDiff )  {
                  // Call emulation in case non-compiled content
                  fVal->fType->Destructor(addr,kTRUE);
               }
               break;
            case kBIT_ISSTRING:
               for( i=left; i<nCurr; ++i, addr += fValDiff )
                  ((std::string*)addr)->~String_t();
               break;
            case G__BIT_ISPOINTER|G__BIT_ISCLASS:
               for( i=left; i<nCurr; ++i, addr += fValDiff )  {
                  StreamHelper* h = (StreamHelper*)addr;
                  void* p = h->ptr();
                  if ( p )  {
                     //fVal->fType->Destructor(p);
                  }
                  h->set(0);
               }
            case G__BIT_ISPOINTER|kBIT_ISSTRING:
               for( i=nCurr; i<left; ++i, addr += fValDiff )   {
                  StreamHelper* h = (StreamHelper*)addr;
                  //delete (std::string*)h->ptr();
                  h->set(0);
               }
               break;
            case G__BIT_ISPOINTER|kBIT_ISTSTRING|G__BIT_ISCLASS:
               for( i=nCurr; i<left; ++i, addr += fValDiff )   {
                  StreamHelper* h = (StreamHelper*)addr;
                  //delete (TString*)h->ptr();
                  h->set(0);
               }
               break;
         }
   }
   c->resize(left*fValDiff,0);
   fEnv->fStart = left>0 ? &(*c->begin()) : 0;
   return;
}

void TEmulatedCollectionProxy::Expand(UInt_t nCurr, UInt_t left)
{
   // Expand the container
   size_t i;
   PCont_t c   = PCont_t(fEnv->fObject);
   c->resize(left*fValDiff,0);
   void *oldstart = fEnv->fStart;
   fEnv->fStart = left>0 ? &(*c->begin()) : 0;

   char* addr = ((char*)fEnv->fStart) + fValDiff*nCurr;
   switch ( fSTL_type )  {
      case TClassEdit::kMap:
      case TClassEdit::kMultiMap:
         switch(fKey->fCase)  {
            case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
            case G__BIT_ISENUM:
               break;
            case G__BIT_ISCLASS:
               if (oldstart && oldstart != fEnv->fStart) {
                  Long_t offset = 0;
                  for( i=0; i<=nCurr; ++i, offset += fValDiff ) {
                     // For now 'Move' only register the change of location
                     // so per se this is wrong since the object are copied via memcpy
                     // rather than a copy (or move) constructor.
                     fKey->fType->Move(((char*)oldstart)+offset,((char*)fEnv->fStart)+offset);
                  }
               }
               for( i=nCurr; i<left; ++i, addr += fValDiff )
                  fKey->fType->New(addr);
               break;
            case kBIT_ISSTRING:
               for( i=nCurr; i<left; ++i, addr += fValDiff )
                  ::new(addr) std::string();
               break;
            case G__BIT_ISPOINTER|G__BIT_ISCLASS:
            case G__BIT_ISPOINTER|kBIT_ISSTRING:
            case G__BIT_ISPOINTER|kBIT_ISTSTRING|G__BIT_ISCLASS:
               for( i=nCurr; i<left; ++i, addr += fValDiff )
                  *(void**)addr = 0;
               break;
         }
         addr = ((char*)fEnv->fStart)+fValOffset+fValDiff*nCurr;
         // DO NOT break; just continue

         // General case for all values
      default:
         switch(fVal->fCase)  {
            case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
            case G__BIT_ISENUM:
               break;
            case G__BIT_ISCLASS:
               if (oldstart && oldstart != fEnv->fStart) {
                  Long_t offset = 0;
                  for( i=0; i<=nCurr; ++i, offset += fValDiff ) {
                     // For now 'Move' only register the change of location
                     // so per se this is wrong since the object are copied via memcpy
                     // rather than a copy (or move) constructor.
                     fVal->fType->Move(((char*)oldstart)+offset,((char*)fEnv->fStart)+offset);
                  }
               }
               for( i=nCurr; i<left; ++i, addr += fValDiff ) {
                  fVal->fType->New(addr);
               }
               break;
            case kBIT_ISSTRING:
               for( i=nCurr; i<left; ++i, addr += fValDiff )
                  ::new(addr) std::string();
               break;
            case G__BIT_ISPOINTER|G__BIT_ISCLASS:
            case G__BIT_ISPOINTER|kBIT_ISSTRING:
            case G__BIT_ISPOINTER|kBIT_ISTSTRING|G__BIT_ISCLASS:
               for( i=nCurr; i<left; ++i, addr += fValDiff )
                  *(void**)addr = 0;
               break;
         }
         break;
   }
}

void TEmulatedCollectionProxy::Resize(UInt_t left, Bool_t force)
{
   // Resize the container

   if ( fEnv && fEnv->fObject )   {
      size_t nCurr = Size();
      PCont_t c = PCont_t(fEnv->fObject);
      fEnv->fStart = nCurr>0 ? &(*c->begin()) : 0;
      if ( left == nCurr )  {
         return;
      }
      else if ( left < nCurr )  {
         Shrink(nCurr, left, force);
         return;
      }
      Expand(nCurr, left);
      return;
   }
   Fatal("TEmulatedCollectionProxy","Resize> Logic error - no proxy object set.");
}

void* TEmulatedCollectionProxy::At(UInt_t idx)
{
   // Return the address of the value at index 'idx'
   if ( fEnv && fEnv->fObject )   {
      PCont_t c = PCont_t(fEnv->fObject);
      size_t  s = c->size();
      if ( idx >= (s/fValDiff) )  {
         return 0;
      }
      return idx<(s/fValDiff) ? ((char*)&(*c->begin()))+idx*fValDiff : 0;
   }
   Fatal("TEmulatedCollectionProxy","At> Logic error - no proxy object set.");
   return 0;
}

void* TEmulatedCollectionProxy::Allocate(UInt_t n, Bool_t forceDelete)
{
   // Allocate the necessary space.

   Resize(n, forceDelete);
   return fEnv;
}

void TEmulatedCollectionProxy::Commit(void* /* env */ )
{
}

void TEmulatedCollectionProxy::ReadItems(int nElements, TBuffer &b)
{
   // Object input streamer
   Bool_t vsn3 = b.GetInfo() && b.GetInfo()->GetOldVersion()<=3;
   StreamHelper* itm = (StreamHelper*)At(0);
   switch (fVal->fCase) {
      case G__BIT_ISFUNDAMENTAL:  //  Only handle primitives this way
      case G__BIT_ISENUM:
         switch( int(fVal->fKind) )   {
            case kBool_t:    b.ReadFastArray(&itm->boolean   , nElements); break;
            case kChar_t:    b.ReadFastArray(&itm->s_char    , nElements); break;
            case kShort_t:   b.ReadFastArray(&itm->s_short   , nElements); break;
            case kInt_t:     b.ReadFastArray(&itm->s_int     , nElements); break;
            case kLong_t:    b.ReadFastArray(&itm->s_long    , nElements); break;
            case kLong64_t:  b.ReadFastArray(&itm->s_longlong, nElements); break;
            case kFloat_t:   b.ReadFastArray(&itm->flt       , nElements); break;
            case kFloat16_t: b.ReadFastArrayFloat16(&itm->flt, nElements); break;
            case kDouble_t:  b.ReadFastArray(&itm->dbl       , nElements); break;
            case kBOOL_t:    b.ReadFastArray(&itm->boolean   , nElements); break;
            case kUChar_t:   b.ReadFastArray(&itm->u_char    , nElements); break;
            case kUShort_t:  b.ReadFastArray(&itm->u_short   , nElements); break;
            case kUInt_t:    b.ReadFastArray(&itm->u_int     , nElements); break;
            case kULong_t:   b.ReadFastArray(&itm->u_long    , nElements); break;
            case kULong64_t: b.ReadFastArray(&itm->u_longlong, nElements); break;
            case kDouble32_t:b.ReadFastArrayDouble32(&itm->dbl,nElements); break;
            case kchar:
            case kNoType_t:
            case kOther_t:
               Error("TEmulatedCollectionProxy","fType %d is not supported yet!\n",fVal->fKind);
         }
         break;

#define DOLOOP(x) {int idx=0; while(idx<nElements) {StreamHelper* i=(StreamHelper*)(((char*)itm) + fValDiff*idx); { x ;} ++idx;} break;}

      case G__BIT_ISCLASS:
         DOLOOP( b.StreamObject(i,fVal->fType) );
      case kBIT_ISSTRING:
         DOLOOP( i->read_std_string(b) );
      case G__BIT_ISPOINTER|G__BIT_ISCLASS:
         DOLOOP( i->read_any_object(fVal,b) );
      case G__BIT_ISPOINTER|kBIT_ISSTRING:
         DOLOOP( i->read_std_string_pointer(b) );
      case G__BIT_ISPOINTER|kBIT_ISTSTRING|G__BIT_ISCLASS:
         DOLOOP( i->read_tstring_pointer(vsn3,b) );
   }

#undef DOLOOP

}

void TEmulatedCollectionProxy::WriteItems(int nElements, TBuffer &b)
{
   // Object output streamer
   StreamHelper* itm = (StreamHelper*)At(0);
   switch (fVal->fCase) {
      case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
      case G__BIT_ISENUM:
         itm = (StreamHelper*)At(0);
            switch( int(fVal->fKind) )   {
            case kBool_t:    b.WriteFastArray(&itm->boolean   , nElements); break;
            case kChar_t:    b.WriteFastArray(&itm->s_char    , nElements); break;
            case kShort_t:   b.WriteFastArray(&itm->s_short   , nElements); break;
            case kInt_t:     b.WriteFastArray(&itm->s_int     , nElements); break;
            case kLong_t:    b.WriteFastArray(&itm->s_long    , nElements); break;
            case kLong64_t:  b.WriteFastArray(&itm->s_longlong, nElements); break;
            case kFloat_t:   b.WriteFastArray(&itm->flt       , nElements); break;
            case kFloat16_t: b.WriteFastArrayFloat16(&itm->flt, nElements); break;
            case kDouble_t:  b.WriteFastArray(&itm->dbl       , nElements); break;
            case kBOOL_t:    b.WriteFastArray(&itm->boolean   , nElements); break;
            case kUChar_t:   b.WriteFastArray(&itm->u_char    , nElements); break;
            case kUShort_t:  b.WriteFastArray(&itm->u_short   , nElements); break;
            case kUInt_t:    b.WriteFastArray(&itm->u_int     , nElements); break;
            case kULong_t:   b.WriteFastArray(&itm->u_long    , nElements); break;
            case kULong64_t: b.WriteFastArray(&itm->u_longlong, nElements); break;
            case kDouble32_t:b.WriteFastArrayDouble32(&itm->dbl,nElements); break;
            case kchar:
            case kNoType_t:
            case kOther_t:
               Error("TEmulatedCollectionProxy","fType %d is not supported yet!\n",fVal->fKind);
         }
         break;
#define DOLOOP(x) {int idx=0; while(idx<nElements) {StreamHelper* i=(StreamHelper*)(((char*)itm) + fValDiff*idx); { x ;} ++idx;} break;}
      case G__BIT_ISCLASS:
         DOLOOP( b.StreamObject(i,fVal->fType) );
      case kBIT_ISSTRING:
         DOLOOP( TString(i->c_str()).Streamer(b) );
      case G__BIT_ISPOINTER|G__BIT_ISCLASS:
         DOLOOP( b.WriteObjectAny(i->ptr(),fVal->fType) );
      case kBIT_ISSTRING|G__BIT_ISPOINTER:
         DOLOOP( i->write_std_string_pointer(b) );
      case kBIT_ISTSTRING|G__BIT_ISCLASS|G__BIT_ISPOINTER:
         DOLOOP( i->write_tstring_pointer(b) );
   }
#undef DOLOOP
}

void TEmulatedCollectionProxy::Streamer(TBuffer &b)
{
   // TClassStreamer IO overload
   if ( b.IsReading() ) {  //Read mode
      int nElements = 0;
      b >> nElements;
      if ( fEnv->fObject )  {
         Resize(nElements,true);
      }
      if ( nElements > 0 )  {
         ReadItems(nElements, b);
      }
   }
   else {     // Write case
      int nElements = fEnv->fObject ? Size() : 0;
      b << nElements;
      if ( nElements > 0 )  {
         WriteItems(nElements, b);
      }
   }
}

//
// Utility functions
//
static TStreamerElement* R__CreateEmulatedElement(const char *dmName, const char *dmFull, Int_t offset)
{
   // Create a TStreamerElement for the type 'dmFull' and whose data member name is 'dmName'.

   TString s1( TClassEdit::ShortType(dmFull,0) );
   TString dmType( TClassEdit::ShortType(dmFull,1) );
   bool dmIsPtr = (s1 != dmType);
   const char *dmTitle = "Emulation";

   TDataType *dt = gROOT->GetType(dmType);
   if (dt && dt->GetType() > 0 ) {  // found a basic type
      Int_t dsize,dtype;
      dtype = dt->GetType();
      dsize = dt->Size();
      if (dmIsPtr && dtype != kCharStar) {
         Error("Pair Emulation Building","%s is not yet supported in pair emulation",
               dmFull);
         return 0;
      } else {
         TStreamerElement *el = new TStreamerBasicType(dmName,dmTitle,offset,dtype,dmFull);
         el->SetSize(dsize);
         return el;
      }
   } else {

      static const char *full_string_name = "basic_string<char,char_traits<char>,allocator<char> >";
      if (strcmp(dmType,"string") == 0 || strcmp(dmType,full_string_name)==0 ) {
         return new TStreamerSTLstring(dmName,dmTitle,offset,dmFull,dmIsPtr);
      }
      if (TClassEdit::IsSTLCont(dmType)) {
         return new TStreamerSTL(dmName,dmTitle,offset,dmFull,dmFull,dmIsPtr);
      }
      TClass *clm = TClass::GetClass(dmType);
      if (!clm) {
         // either we have an Emulated enum or a really unknown class!
         // let's just claim its an enum :(
         Int_t dtype = kInt_t;
         return new TStreamerBasicType(dmName,dmTitle,offset,dtype,dmFull);
      }
      // a pointer to a class
      if ( dmIsPtr ) {
         if (clm->InheritsFrom(TObject::Class())) {
            return new TStreamerObjectPointer(dmName,dmTitle,offset,dmFull);
         } else {
            return new TStreamerObjectAnyPointer(dmName,dmTitle,offset,dmFull);
         }
      }
      // a class
      if (clm->InheritsFrom(TObject::Class())) {
         return new TStreamerObject(dmName,dmTitle,offset,dmFull);
      } else if(clm == TString::Class() && !dmIsPtr) {
         return new TStreamerString(dmName,dmTitle,offset);
      } else {
         return new TStreamerObjectAny(dmName,dmTitle,offset,dmFull);
      }
   }
}


static TStreamerInfo *R__GenerateTClassForPair(const string &fname, const string &sname)
{
   // Generate a TStreamerInfo for a pair<fname,sname>
   // This TStreamerInfo is then used as if it was read from a file to generate
   // and emulated TClass.

   TStreamerInfo *i = (TStreamerInfo*)TClass::GetClass("pair<const int,int>")->GetStreamerInfo()->Clone();
   std::string pname = "pair<"+fname+","+sname;
   pname += (pname[pname.length()-1]=='>') ? " >" : ">";
   i->SetName(pname.c_str());
   i->SetClass(0);
   i->GetElements()->Delete();
   TStreamerElement *fel = R__CreateEmulatedElement("first", fname.c_str(), 0);
   i->GetElements()->Add( fel );
   Int_t size = 0;
   if (fel) {
      size = fel->GetSize();
      Int_t sp = sizeof(void *);
#if defined(R__SGI64)
      sp = 8;
#endif
      //align the non-basic data types (required on alpha and IRIX!!)
      if (size%sp != 0) size = size - size%sp + sp;
   }
   i->GetElements()->Add( R__CreateEmulatedElement("second", sname.c_str(), size) );
   Int_t oldlevel = gErrorIgnoreLevel;
   // Hide the warning about the missing pair dictionary.
   gErrorIgnoreLevel = kError;
   i->BuildCheck();
   gErrorIgnoreLevel = oldlevel;
   i->BuildOld();
   return i;
}
 TEmulatedCollectionProxy.cxx:1
 TEmulatedCollectionProxy.cxx:2
 TEmulatedCollectionProxy.cxx:3
 TEmulatedCollectionProxy.cxx:4
 TEmulatedCollectionProxy.cxx:5
 TEmulatedCollectionProxy.cxx:6
 TEmulatedCollectionProxy.cxx:7
 TEmulatedCollectionProxy.cxx:8
 TEmulatedCollectionProxy.cxx:9
 TEmulatedCollectionProxy.cxx:10
 TEmulatedCollectionProxy.cxx:11
 TEmulatedCollectionProxy.cxx:12
 TEmulatedCollectionProxy.cxx:13
 TEmulatedCollectionProxy.cxx:14
 TEmulatedCollectionProxy.cxx:15
 TEmulatedCollectionProxy.cxx:16
 TEmulatedCollectionProxy.cxx:17
 TEmulatedCollectionProxy.cxx:18
 TEmulatedCollectionProxy.cxx:19
 TEmulatedCollectionProxy.cxx:20
 TEmulatedCollectionProxy.cxx:21
 TEmulatedCollectionProxy.cxx:22
 TEmulatedCollectionProxy.cxx:23
 TEmulatedCollectionProxy.cxx:24
 TEmulatedCollectionProxy.cxx:25
 TEmulatedCollectionProxy.cxx:26
 TEmulatedCollectionProxy.cxx:27
 TEmulatedCollectionProxy.cxx:28
 TEmulatedCollectionProxy.cxx:29
 TEmulatedCollectionProxy.cxx:30
 TEmulatedCollectionProxy.cxx:31
 TEmulatedCollectionProxy.cxx:32
 TEmulatedCollectionProxy.cxx:33
 TEmulatedCollectionProxy.cxx:34
 TEmulatedCollectionProxy.cxx:35
 TEmulatedCollectionProxy.cxx:36
 TEmulatedCollectionProxy.cxx:37
 TEmulatedCollectionProxy.cxx:38
 TEmulatedCollectionProxy.cxx:39
 TEmulatedCollectionProxy.cxx:40
 TEmulatedCollectionProxy.cxx:41
 TEmulatedCollectionProxy.cxx:42
 TEmulatedCollectionProxy.cxx:43
 TEmulatedCollectionProxy.cxx:44
 TEmulatedCollectionProxy.cxx:45
 TEmulatedCollectionProxy.cxx:46
 TEmulatedCollectionProxy.cxx:47
 TEmulatedCollectionProxy.cxx:48
 TEmulatedCollectionProxy.cxx:49
 TEmulatedCollectionProxy.cxx:50
 TEmulatedCollectionProxy.cxx:51
 TEmulatedCollectionProxy.cxx:52
 TEmulatedCollectionProxy.cxx:53
 TEmulatedCollectionProxy.cxx:54
 TEmulatedCollectionProxy.cxx:55
 TEmulatedCollectionProxy.cxx:56
 TEmulatedCollectionProxy.cxx:57
 TEmulatedCollectionProxy.cxx:58
 TEmulatedCollectionProxy.cxx:59
 TEmulatedCollectionProxy.cxx:60
 TEmulatedCollectionProxy.cxx:61
 TEmulatedCollectionProxy.cxx:62
 TEmulatedCollectionProxy.cxx:63
 TEmulatedCollectionProxy.cxx:64
 TEmulatedCollectionProxy.cxx:65
 TEmulatedCollectionProxy.cxx:66
 TEmulatedCollectionProxy.cxx:67
 TEmulatedCollectionProxy.cxx:68
 TEmulatedCollectionProxy.cxx:69
 TEmulatedCollectionProxy.cxx:70
 TEmulatedCollectionProxy.cxx:71
 TEmulatedCollectionProxy.cxx:72
 TEmulatedCollectionProxy.cxx:73
 TEmulatedCollectionProxy.cxx:74
 TEmulatedCollectionProxy.cxx:75
 TEmulatedCollectionProxy.cxx:76
 TEmulatedCollectionProxy.cxx:77
 TEmulatedCollectionProxy.cxx:78
 TEmulatedCollectionProxy.cxx:79
 TEmulatedCollectionProxy.cxx:80
 TEmulatedCollectionProxy.cxx:81
 TEmulatedCollectionProxy.cxx:82
 TEmulatedCollectionProxy.cxx:83
 TEmulatedCollectionProxy.cxx:84
 TEmulatedCollectionProxy.cxx:85
 TEmulatedCollectionProxy.cxx:86
 TEmulatedCollectionProxy.cxx:87
 TEmulatedCollectionProxy.cxx:88
 TEmulatedCollectionProxy.cxx:89
 TEmulatedCollectionProxy.cxx:90
 TEmulatedCollectionProxy.cxx:91
 TEmulatedCollectionProxy.cxx:92
 TEmulatedCollectionProxy.cxx:93
 TEmulatedCollectionProxy.cxx:94
 TEmulatedCollectionProxy.cxx:95
 TEmulatedCollectionProxy.cxx:96
 TEmulatedCollectionProxy.cxx:97
 TEmulatedCollectionProxy.cxx:98
 TEmulatedCollectionProxy.cxx:99
 TEmulatedCollectionProxy.cxx:100
 TEmulatedCollectionProxy.cxx:101
 TEmulatedCollectionProxy.cxx:102
 TEmulatedCollectionProxy.cxx:103
 TEmulatedCollectionProxy.cxx:104
 TEmulatedCollectionProxy.cxx:105
 TEmulatedCollectionProxy.cxx:106
 TEmulatedCollectionProxy.cxx:107
 TEmulatedCollectionProxy.cxx:108
 TEmulatedCollectionProxy.cxx:109
 TEmulatedCollectionProxy.cxx:110
 TEmulatedCollectionProxy.cxx:111
 TEmulatedCollectionProxy.cxx:112
 TEmulatedCollectionProxy.cxx:113
 TEmulatedCollectionProxy.cxx:114
 TEmulatedCollectionProxy.cxx:115
 TEmulatedCollectionProxy.cxx:116
 TEmulatedCollectionProxy.cxx:117
 TEmulatedCollectionProxy.cxx:118
 TEmulatedCollectionProxy.cxx:119
 TEmulatedCollectionProxy.cxx:120
 TEmulatedCollectionProxy.cxx:121
 TEmulatedCollectionProxy.cxx:122
 TEmulatedCollectionProxy.cxx:123
 TEmulatedCollectionProxy.cxx:124
 TEmulatedCollectionProxy.cxx:125
 TEmulatedCollectionProxy.cxx:126
 TEmulatedCollectionProxy.cxx:127
 TEmulatedCollectionProxy.cxx:128
 TEmulatedCollectionProxy.cxx:129
 TEmulatedCollectionProxy.cxx:130
 TEmulatedCollectionProxy.cxx:131
 TEmulatedCollectionProxy.cxx:132
 TEmulatedCollectionProxy.cxx:133
 TEmulatedCollectionProxy.cxx:134
 TEmulatedCollectionProxy.cxx:135
 TEmulatedCollectionProxy.cxx:136
 TEmulatedCollectionProxy.cxx:137
 TEmulatedCollectionProxy.cxx:138
 TEmulatedCollectionProxy.cxx:139
 TEmulatedCollectionProxy.cxx:140
 TEmulatedCollectionProxy.cxx:141
 TEmulatedCollectionProxy.cxx:142
 TEmulatedCollectionProxy.cxx:143
 TEmulatedCollectionProxy.cxx:144
 TEmulatedCollectionProxy.cxx:145
 TEmulatedCollectionProxy.cxx:146
 TEmulatedCollectionProxy.cxx:147
 TEmulatedCollectionProxy.cxx:148
 TEmulatedCollectionProxy.cxx:149
 TEmulatedCollectionProxy.cxx:150
 TEmulatedCollectionProxy.cxx:151
 TEmulatedCollectionProxy.cxx:152
 TEmulatedCollectionProxy.cxx:153
 TEmulatedCollectionProxy.cxx:154
 TEmulatedCollectionProxy.cxx:155
 TEmulatedCollectionProxy.cxx:156
 TEmulatedCollectionProxy.cxx:157
 TEmulatedCollectionProxy.cxx:158
 TEmulatedCollectionProxy.cxx:159
 TEmulatedCollectionProxy.cxx:160
 TEmulatedCollectionProxy.cxx:161
 TEmulatedCollectionProxy.cxx:162
 TEmulatedCollectionProxy.cxx:163
 TEmulatedCollectionProxy.cxx:164
 TEmulatedCollectionProxy.cxx:165
 TEmulatedCollectionProxy.cxx:166
 TEmulatedCollectionProxy.cxx:167
 TEmulatedCollectionProxy.cxx:168
 TEmulatedCollectionProxy.cxx:169
 TEmulatedCollectionProxy.cxx:170
 TEmulatedCollectionProxy.cxx:171
 TEmulatedCollectionProxy.cxx:172
 TEmulatedCollectionProxy.cxx:173
 TEmulatedCollectionProxy.cxx:174
 TEmulatedCollectionProxy.cxx:175
 TEmulatedCollectionProxy.cxx:176
 TEmulatedCollectionProxy.cxx:177
 TEmulatedCollectionProxy.cxx:178
 TEmulatedCollectionProxy.cxx:179
 TEmulatedCollectionProxy.cxx:180
 TEmulatedCollectionProxy.cxx:181
 TEmulatedCollectionProxy.cxx:182
 TEmulatedCollectionProxy.cxx:183
 TEmulatedCollectionProxy.cxx:184
 TEmulatedCollectionProxy.cxx:185
 TEmulatedCollectionProxy.cxx:186
 TEmulatedCollectionProxy.cxx:187
 TEmulatedCollectionProxy.cxx:188
 TEmulatedCollectionProxy.cxx:189
 TEmulatedCollectionProxy.cxx:190
 TEmulatedCollectionProxy.cxx:191
 TEmulatedCollectionProxy.cxx:192
 TEmulatedCollectionProxy.cxx:193
 TEmulatedCollectionProxy.cxx:194
 TEmulatedCollectionProxy.cxx:195
 TEmulatedCollectionProxy.cxx:196
 TEmulatedCollectionProxy.cxx:197
 TEmulatedCollectionProxy.cxx:198
 TEmulatedCollectionProxy.cxx:199
 TEmulatedCollectionProxy.cxx:200
 TEmulatedCollectionProxy.cxx:201
 TEmulatedCollectionProxy.cxx:202
 TEmulatedCollectionProxy.cxx:203
 TEmulatedCollectionProxy.cxx:204
 TEmulatedCollectionProxy.cxx:205
 TEmulatedCollectionProxy.cxx:206
 TEmulatedCollectionProxy.cxx:207
 TEmulatedCollectionProxy.cxx:208
 TEmulatedCollectionProxy.cxx:209
 TEmulatedCollectionProxy.cxx:210
 TEmulatedCollectionProxy.cxx:211
 TEmulatedCollectionProxy.cxx:212
 TEmulatedCollectionProxy.cxx:213
 TEmulatedCollectionProxy.cxx:214
 TEmulatedCollectionProxy.cxx:215
 TEmulatedCollectionProxy.cxx:216
 TEmulatedCollectionProxy.cxx:217
 TEmulatedCollectionProxy.cxx:218
 TEmulatedCollectionProxy.cxx:219
 TEmulatedCollectionProxy.cxx:220
 TEmulatedCollectionProxy.cxx:221
 TEmulatedCollectionProxy.cxx:222
 TEmulatedCollectionProxy.cxx:223
 TEmulatedCollectionProxy.cxx:224
 TEmulatedCollectionProxy.cxx:225
 TEmulatedCollectionProxy.cxx:226
 TEmulatedCollectionProxy.cxx:227
 TEmulatedCollectionProxy.cxx:228
 TEmulatedCollectionProxy.cxx:229
 TEmulatedCollectionProxy.cxx:230
 TEmulatedCollectionProxy.cxx:231
 TEmulatedCollectionProxy.cxx:232
 TEmulatedCollectionProxy.cxx:233
 TEmulatedCollectionProxy.cxx:234
 TEmulatedCollectionProxy.cxx:235
 TEmulatedCollectionProxy.cxx:236
 TEmulatedCollectionProxy.cxx:237
 TEmulatedCollectionProxy.cxx:238
 TEmulatedCollectionProxy.cxx:239
 TEmulatedCollectionProxy.cxx:240
 TEmulatedCollectionProxy.cxx:241
 TEmulatedCollectionProxy.cxx:242
 TEmulatedCollectionProxy.cxx:243
 TEmulatedCollectionProxy.cxx:244
 TEmulatedCollectionProxy.cxx:245
 TEmulatedCollectionProxy.cxx:246
 TEmulatedCollectionProxy.cxx:247
 TEmulatedCollectionProxy.cxx:248
 TEmulatedCollectionProxy.cxx:249
 TEmulatedCollectionProxy.cxx:250
 TEmulatedCollectionProxy.cxx:251
 TEmulatedCollectionProxy.cxx:252
 TEmulatedCollectionProxy.cxx:253
 TEmulatedCollectionProxy.cxx:254
 TEmulatedCollectionProxy.cxx:255
 TEmulatedCollectionProxy.cxx:256
 TEmulatedCollectionProxy.cxx:257
 TEmulatedCollectionProxy.cxx:258
 TEmulatedCollectionProxy.cxx:259
 TEmulatedCollectionProxy.cxx:260
 TEmulatedCollectionProxy.cxx:261
 TEmulatedCollectionProxy.cxx:262
 TEmulatedCollectionProxy.cxx:263
 TEmulatedCollectionProxy.cxx:264
 TEmulatedCollectionProxy.cxx:265
 TEmulatedCollectionProxy.cxx:266
 TEmulatedCollectionProxy.cxx:267
 TEmulatedCollectionProxy.cxx:268
 TEmulatedCollectionProxy.cxx:269
 TEmulatedCollectionProxy.cxx:270
 TEmulatedCollectionProxy.cxx:271
 TEmulatedCollectionProxy.cxx:272
 TEmulatedCollectionProxy.cxx:273
 TEmulatedCollectionProxy.cxx:274
 TEmulatedCollectionProxy.cxx:275
 TEmulatedCollectionProxy.cxx:276
 TEmulatedCollectionProxy.cxx:277
 TEmulatedCollectionProxy.cxx:278
 TEmulatedCollectionProxy.cxx:279
 TEmulatedCollectionProxy.cxx:280
 TEmulatedCollectionProxy.cxx:281
 TEmulatedCollectionProxy.cxx:282
 TEmulatedCollectionProxy.cxx:283
 TEmulatedCollectionProxy.cxx:284
 TEmulatedCollectionProxy.cxx:285
 TEmulatedCollectionProxy.cxx:286
 TEmulatedCollectionProxy.cxx:287
 TEmulatedCollectionProxy.cxx:288
 TEmulatedCollectionProxy.cxx:289
 TEmulatedCollectionProxy.cxx:290
 TEmulatedCollectionProxy.cxx:291
 TEmulatedCollectionProxy.cxx:292
 TEmulatedCollectionProxy.cxx:293
 TEmulatedCollectionProxy.cxx:294
 TEmulatedCollectionProxy.cxx:295
 TEmulatedCollectionProxy.cxx:296
 TEmulatedCollectionProxy.cxx:297
 TEmulatedCollectionProxy.cxx:298
 TEmulatedCollectionProxy.cxx:299
 TEmulatedCollectionProxy.cxx:300
 TEmulatedCollectionProxy.cxx:301
 TEmulatedCollectionProxy.cxx:302
 TEmulatedCollectionProxy.cxx:303
 TEmulatedCollectionProxy.cxx:304
 TEmulatedCollectionProxy.cxx:305
 TEmulatedCollectionProxy.cxx:306
 TEmulatedCollectionProxy.cxx:307
 TEmulatedCollectionProxy.cxx:308
 TEmulatedCollectionProxy.cxx:309
 TEmulatedCollectionProxy.cxx:310
 TEmulatedCollectionProxy.cxx:311
 TEmulatedCollectionProxy.cxx:312
 TEmulatedCollectionProxy.cxx:313
 TEmulatedCollectionProxy.cxx:314
 TEmulatedCollectionProxy.cxx:315
 TEmulatedCollectionProxy.cxx:316
 TEmulatedCollectionProxy.cxx:317
 TEmulatedCollectionProxy.cxx:318
 TEmulatedCollectionProxy.cxx:319
 TEmulatedCollectionProxy.cxx:320
 TEmulatedCollectionProxy.cxx:321
 TEmulatedCollectionProxy.cxx:322
 TEmulatedCollectionProxy.cxx:323
 TEmulatedCollectionProxy.cxx:324
 TEmulatedCollectionProxy.cxx:325
 TEmulatedCollectionProxy.cxx:326
 TEmulatedCollectionProxy.cxx:327
 TEmulatedCollectionProxy.cxx:328
 TEmulatedCollectionProxy.cxx:329
 TEmulatedCollectionProxy.cxx:330
 TEmulatedCollectionProxy.cxx:331
 TEmulatedCollectionProxy.cxx:332
 TEmulatedCollectionProxy.cxx:333
 TEmulatedCollectionProxy.cxx:334
 TEmulatedCollectionProxy.cxx:335
 TEmulatedCollectionProxy.cxx:336
 TEmulatedCollectionProxy.cxx:337
 TEmulatedCollectionProxy.cxx:338
 TEmulatedCollectionProxy.cxx:339
 TEmulatedCollectionProxy.cxx:340
 TEmulatedCollectionProxy.cxx:341
 TEmulatedCollectionProxy.cxx:342
 TEmulatedCollectionProxy.cxx:343
 TEmulatedCollectionProxy.cxx:344
 TEmulatedCollectionProxy.cxx:345
 TEmulatedCollectionProxy.cxx:346
 TEmulatedCollectionProxy.cxx:347
 TEmulatedCollectionProxy.cxx:348
 TEmulatedCollectionProxy.cxx:349
 TEmulatedCollectionProxy.cxx:350
 TEmulatedCollectionProxy.cxx:351
 TEmulatedCollectionProxy.cxx:352
 TEmulatedCollectionProxy.cxx:353
 TEmulatedCollectionProxy.cxx:354
 TEmulatedCollectionProxy.cxx:355
 TEmulatedCollectionProxy.cxx:356
 TEmulatedCollectionProxy.cxx:357
 TEmulatedCollectionProxy.cxx:358
 TEmulatedCollectionProxy.cxx:359
 TEmulatedCollectionProxy.cxx:360
 TEmulatedCollectionProxy.cxx:361
 TEmulatedCollectionProxy.cxx:362
 TEmulatedCollectionProxy.cxx:363
 TEmulatedCollectionProxy.cxx:364
 TEmulatedCollectionProxy.cxx:365
 TEmulatedCollectionProxy.cxx:366
 TEmulatedCollectionProxy.cxx:367
 TEmulatedCollectionProxy.cxx:368
 TEmulatedCollectionProxy.cxx:369
 TEmulatedCollectionProxy.cxx:370
 TEmulatedCollectionProxy.cxx:371
 TEmulatedCollectionProxy.cxx:372
 TEmulatedCollectionProxy.cxx:373
 TEmulatedCollectionProxy.cxx:374
 TEmulatedCollectionProxy.cxx:375
 TEmulatedCollectionProxy.cxx:376
 TEmulatedCollectionProxy.cxx:377
 TEmulatedCollectionProxy.cxx:378
 TEmulatedCollectionProxy.cxx:379
 TEmulatedCollectionProxy.cxx:380
 TEmulatedCollectionProxy.cxx:381
 TEmulatedCollectionProxy.cxx:382
 TEmulatedCollectionProxy.cxx:383
 TEmulatedCollectionProxy.cxx:384
 TEmulatedCollectionProxy.cxx:385
 TEmulatedCollectionProxy.cxx:386
 TEmulatedCollectionProxy.cxx:387
 TEmulatedCollectionProxy.cxx:388
 TEmulatedCollectionProxy.cxx:389
 TEmulatedCollectionProxy.cxx:390
 TEmulatedCollectionProxy.cxx:391
 TEmulatedCollectionProxy.cxx:392
 TEmulatedCollectionProxy.cxx:393
 TEmulatedCollectionProxy.cxx:394
 TEmulatedCollectionProxy.cxx:395
 TEmulatedCollectionProxy.cxx:396
 TEmulatedCollectionProxy.cxx:397
 TEmulatedCollectionProxy.cxx:398
 TEmulatedCollectionProxy.cxx:399
 TEmulatedCollectionProxy.cxx:400
 TEmulatedCollectionProxy.cxx:401
 TEmulatedCollectionProxy.cxx:402
 TEmulatedCollectionProxy.cxx:403
 TEmulatedCollectionProxy.cxx:404
 TEmulatedCollectionProxy.cxx:405
 TEmulatedCollectionProxy.cxx:406
 TEmulatedCollectionProxy.cxx:407
 TEmulatedCollectionProxy.cxx:408
 TEmulatedCollectionProxy.cxx:409
 TEmulatedCollectionProxy.cxx:410
 TEmulatedCollectionProxy.cxx:411
 TEmulatedCollectionProxy.cxx:412
 TEmulatedCollectionProxy.cxx:413
 TEmulatedCollectionProxy.cxx:414
 TEmulatedCollectionProxy.cxx:415
 TEmulatedCollectionProxy.cxx:416
 TEmulatedCollectionProxy.cxx:417
 TEmulatedCollectionProxy.cxx:418
 TEmulatedCollectionProxy.cxx:419
 TEmulatedCollectionProxy.cxx:420
 TEmulatedCollectionProxy.cxx:421
 TEmulatedCollectionProxy.cxx:422
 TEmulatedCollectionProxy.cxx:423
 TEmulatedCollectionProxy.cxx:424
 TEmulatedCollectionProxy.cxx:425
 TEmulatedCollectionProxy.cxx:426
 TEmulatedCollectionProxy.cxx:427
 TEmulatedCollectionProxy.cxx:428
 TEmulatedCollectionProxy.cxx:429
 TEmulatedCollectionProxy.cxx:430
 TEmulatedCollectionProxy.cxx:431
 TEmulatedCollectionProxy.cxx:432
 TEmulatedCollectionProxy.cxx:433
 TEmulatedCollectionProxy.cxx:434
 TEmulatedCollectionProxy.cxx:435
 TEmulatedCollectionProxy.cxx:436
 TEmulatedCollectionProxy.cxx:437
 TEmulatedCollectionProxy.cxx:438
 TEmulatedCollectionProxy.cxx:439
 TEmulatedCollectionProxy.cxx:440
 TEmulatedCollectionProxy.cxx:441
 TEmulatedCollectionProxy.cxx:442
 TEmulatedCollectionProxy.cxx:443
 TEmulatedCollectionProxy.cxx:444
 TEmulatedCollectionProxy.cxx:445
 TEmulatedCollectionProxy.cxx:446
 TEmulatedCollectionProxy.cxx:447
 TEmulatedCollectionProxy.cxx:448
 TEmulatedCollectionProxy.cxx:449
 TEmulatedCollectionProxy.cxx:450
 TEmulatedCollectionProxy.cxx:451
 TEmulatedCollectionProxy.cxx:452
 TEmulatedCollectionProxy.cxx:453
 TEmulatedCollectionProxy.cxx:454
 TEmulatedCollectionProxy.cxx:455
 TEmulatedCollectionProxy.cxx:456
 TEmulatedCollectionProxy.cxx:457
 TEmulatedCollectionProxy.cxx:458
 TEmulatedCollectionProxy.cxx:459
 TEmulatedCollectionProxy.cxx:460
 TEmulatedCollectionProxy.cxx:461
 TEmulatedCollectionProxy.cxx:462
 TEmulatedCollectionProxy.cxx:463
 TEmulatedCollectionProxy.cxx:464
 TEmulatedCollectionProxy.cxx:465
 TEmulatedCollectionProxy.cxx:466
 TEmulatedCollectionProxy.cxx:467
 TEmulatedCollectionProxy.cxx:468
 TEmulatedCollectionProxy.cxx:469
 TEmulatedCollectionProxy.cxx:470
 TEmulatedCollectionProxy.cxx:471
 TEmulatedCollectionProxy.cxx:472
 TEmulatedCollectionProxy.cxx:473
 TEmulatedCollectionProxy.cxx:474
 TEmulatedCollectionProxy.cxx:475
 TEmulatedCollectionProxy.cxx:476
 TEmulatedCollectionProxy.cxx:477
 TEmulatedCollectionProxy.cxx:478
 TEmulatedCollectionProxy.cxx:479
 TEmulatedCollectionProxy.cxx:480
 TEmulatedCollectionProxy.cxx:481
 TEmulatedCollectionProxy.cxx:482
 TEmulatedCollectionProxy.cxx:483
 TEmulatedCollectionProxy.cxx:484
 TEmulatedCollectionProxy.cxx:485
 TEmulatedCollectionProxy.cxx:486
 TEmulatedCollectionProxy.cxx:487
 TEmulatedCollectionProxy.cxx:488
 TEmulatedCollectionProxy.cxx:489
 TEmulatedCollectionProxy.cxx:490
 TEmulatedCollectionProxy.cxx:491
 TEmulatedCollectionProxy.cxx:492
 TEmulatedCollectionProxy.cxx:493
 TEmulatedCollectionProxy.cxx:494
 TEmulatedCollectionProxy.cxx:495
 TEmulatedCollectionProxy.cxx:496
 TEmulatedCollectionProxy.cxx:497
 TEmulatedCollectionProxy.cxx:498
 TEmulatedCollectionProxy.cxx:499
 TEmulatedCollectionProxy.cxx:500
 TEmulatedCollectionProxy.cxx:501
 TEmulatedCollectionProxy.cxx:502
 TEmulatedCollectionProxy.cxx:503
 TEmulatedCollectionProxy.cxx:504
 TEmulatedCollectionProxy.cxx:505
 TEmulatedCollectionProxy.cxx:506
 TEmulatedCollectionProxy.cxx:507
 TEmulatedCollectionProxy.cxx:508
 TEmulatedCollectionProxy.cxx:509
 TEmulatedCollectionProxy.cxx:510
 TEmulatedCollectionProxy.cxx:511
 TEmulatedCollectionProxy.cxx:512
 TEmulatedCollectionProxy.cxx:513
 TEmulatedCollectionProxy.cxx:514
 TEmulatedCollectionProxy.cxx:515
 TEmulatedCollectionProxy.cxx:516
 TEmulatedCollectionProxy.cxx:517
 TEmulatedCollectionProxy.cxx:518
 TEmulatedCollectionProxy.cxx:519
 TEmulatedCollectionProxy.cxx:520
 TEmulatedCollectionProxy.cxx:521
 TEmulatedCollectionProxy.cxx:522
 TEmulatedCollectionProxy.cxx:523
 TEmulatedCollectionProxy.cxx:524
 TEmulatedCollectionProxy.cxx:525
 TEmulatedCollectionProxy.cxx:526
 TEmulatedCollectionProxy.cxx:527
 TEmulatedCollectionProxy.cxx:528
 TEmulatedCollectionProxy.cxx:529
 TEmulatedCollectionProxy.cxx:530
 TEmulatedCollectionProxy.cxx:531
 TEmulatedCollectionProxy.cxx:532
 TEmulatedCollectionProxy.cxx:533
 TEmulatedCollectionProxy.cxx:534
 TEmulatedCollectionProxy.cxx:535
 TEmulatedCollectionProxy.cxx:536
 TEmulatedCollectionProxy.cxx:537
 TEmulatedCollectionProxy.cxx:538
 TEmulatedCollectionProxy.cxx:539
 TEmulatedCollectionProxy.cxx:540
 TEmulatedCollectionProxy.cxx:541
 TEmulatedCollectionProxy.cxx:542
 TEmulatedCollectionProxy.cxx:543
 TEmulatedCollectionProxy.cxx:544
 TEmulatedCollectionProxy.cxx:545
 TEmulatedCollectionProxy.cxx:546
 TEmulatedCollectionProxy.cxx:547
 TEmulatedCollectionProxy.cxx:548
 TEmulatedCollectionProxy.cxx:549
 TEmulatedCollectionProxy.cxx:550
 TEmulatedCollectionProxy.cxx:551
 TEmulatedCollectionProxy.cxx:552
 TEmulatedCollectionProxy.cxx:553
 TEmulatedCollectionProxy.cxx:554
 TEmulatedCollectionProxy.cxx:555
 TEmulatedCollectionProxy.cxx:556
 TEmulatedCollectionProxy.cxx:557
 TEmulatedCollectionProxy.cxx:558
 TEmulatedCollectionProxy.cxx:559
 TEmulatedCollectionProxy.cxx:560
 TEmulatedCollectionProxy.cxx:561
 TEmulatedCollectionProxy.cxx:562
 TEmulatedCollectionProxy.cxx:563
 TEmulatedCollectionProxy.cxx:564
 TEmulatedCollectionProxy.cxx:565
 TEmulatedCollectionProxy.cxx:566
 TEmulatedCollectionProxy.cxx:567
 TEmulatedCollectionProxy.cxx:568
 TEmulatedCollectionProxy.cxx:569
 TEmulatedCollectionProxy.cxx:570
 TEmulatedCollectionProxy.cxx:571
 TEmulatedCollectionProxy.cxx:572
 TEmulatedCollectionProxy.cxx:573
 TEmulatedCollectionProxy.cxx:574
 TEmulatedCollectionProxy.cxx:575
 TEmulatedCollectionProxy.cxx:576
 TEmulatedCollectionProxy.cxx:577
 TEmulatedCollectionProxy.cxx:578
 TEmulatedCollectionProxy.cxx:579
 TEmulatedCollectionProxy.cxx:580
 TEmulatedCollectionProxy.cxx:581
 TEmulatedCollectionProxy.cxx:582
 TEmulatedCollectionProxy.cxx:583
 TEmulatedCollectionProxy.cxx:584
 TEmulatedCollectionProxy.cxx:585
 TEmulatedCollectionProxy.cxx:586
 TEmulatedCollectionProxy.cxx:587
 TEmulatedCollectionProxy.cxx:588
 TEmulatedCollectionProxy.cxx:589
 TEmulatedCollectionProxy.cxx:590
 TEmulatedCollectionProxy.cxx:591
 TEmulatedCollectionProxy.cxx:592
 TEmulatedCollectionProxy.cxx:593
 TEmulatedCollectionProxy.cxx:594
 TEmulatedCollectionProxy.cxx:595
 TEmulatedCollectionProxy.cxx:596
 TEmulatedCollectionProxy.cxx:597
 TEmulatedCollectionProxy.cxx:598
 TEmulatedCollectionProxy.cxx:599
 TEmulatedCollectionProxy.cxx:600
 TEmulatedCollectionProxy.cxx:601
 TEmulatedCollectionProxy.cxx:602
 TEmulatedCollectionProxy.cxx:603
 TEmulatedCollectionProxy.cxx:604
 TEmulatedCollectionProxy.cxx:605
 TEmulatedCollectionProxy.cxx:606
 TEmulatedCollectionProxy.cxx:607
 TEmulatedCollectionProxy.cxx:608
 TEmulatedCollectionProxy.cxx:609
 TEmulatedCollectionProxy.cxx:610
 TEmulatedCollectionProxy.cxx:611
 TEmulatedCollectionProxy.cxx:612
 TEmulatedCollectionProxy.cxx:613
 TEmulatedCollectionProxy.cxx:614
 TEmulatedCollectionProxy.cxx:615
 TEmulatedCollectionProxy.cxx:616
 TEmulatedCollectionProxy.cxx:617
 TEmulatedCollectionProxy.cxx:618
 TEmulatedCollectionProxy.cxx:619
 TEmulatedCollectionProxy.cxx:620
 TEmulatedCollectionProxy.cxx:621
 TEmulatedCollectionProxy.cxx:622
 TEmulatedCollectionProxy.cxx:623
 TEmulatedCollectionProxy.cxx:624
 TEmulatedCollectionProxy.cxx:625
 TEmulatedCollectionProxy.cxx:626
 TEmulatedCollectionProxy.cxx:627
 TEmulatedCollectionProxy.cxx:628
 TEmulatedCollectionProxy.cxx:629