31 static TStreamerElement* &CurrentElement()
 
   36    TTHREAD_TLS(TStreamerElement*) fgElement(0);
 
   45 TStreamerElement *TStreamerInfo::GetCurrentElement()
 
   47    return CurrentElement();
 
   52 #define DOLOOP for(Int_t k=0; k<narr; ++k) 
   54 #define ReadBasicTypeElem(name,index)           \ 
   56       name *x=(name*)(arr[index]+ioffset);      \ 
   60 #define ReadBasicType(name)                     \ 
   62       ReadBasicTypeElem(name,0);                \ 
   65 #define ReadBasicTypeLoop(name)                                \ 
   67       for(Int_t k=0; k<narr; ++k) ReadBasicTypeElem(name,k);   \ 
   70 #define ReadBasicArrayElem(name,index)          \ 
   72       name *x=(name*)(arr[index]+ioffset);      \ 
   73       b.ReadFastArray(x,compinfo[i]->fLength);            \ 
   76 #define ReadBasicArray(name)                     \ 
   78       ReadBasicArrayElem(name,0);                \ 
   81 #define ReadBasicArrayLoop(name)                               \ 
   83       for(Int_t k=0; k<narr; ++k) ReadBasicArrayElem(name,k)   \ 
   86 #define ReadBasicPointerElem(name,index)        \ 
   90       Int_t *l = (Int_t*)(arr[index]+imethod);  \ 
   91       if (*l < 0 || *l > b.BufferSize()) continue;     \ 
   92       name **f = (name**)(arr[index]+ioffset);  \ 
   94       if (isArray) for(j=0;j<compinfo[i]->fLength;j++) {  \ 
   96          f[j] = 0; if (*l <=0) continue;        \ 
   97          f[j] = new name[*l];                   \ 
   98          b.ReadFastArray(f[j],*l);              \ 
  100       else for(j=0;j<compinfo[i]->fLength;j++) {  \ 
  106 #define ReadBasicPointer(name)                  \ 
  108       const int imethod = compinfo[i]->fMethod+eoffset;   \ 
  109       ReadBasicPointerElem(name,0);             \ 
  112 #define ReadBasicPointerLoop(name)              \ 
  114       int imethod = compinfo[i]->fMethod+eoffset;         \ 
  115       for(int k=0; k<narr; ++k) {               \ 
  116          ReadBasicPointerElem(name,k);          \ 
  120 #define SkipCBasicType(name)                    \ 
  123       DOLOOP{ b >> dummy; }                     \ 
  127 #define SkipCFloat16(name)                       \ 
  130       DOLOOP { b.ReadFloat16(&dummy,aElement); } \ 
  134 #define SkipCDouble32(name)                      \ 
  137       DOLOOP { b.ReadDouble32(&dummy,aElement); }\ 
  141 #define SkipCBasicArray(name,ReadArrayFunc)              \ 
  143       name* readbuf = new name[compinfo->fLength];              \ 
  145           b.ReadArrayFunc(readbuf, compinfo->fLength);          \ 
  151 #define SkipCBasicPointer(name,ReadArrayFunc)                             \ 
  153       Int_t addCounter = -111;                                            \ 
  154       if ((imethod>0) && (compinfo->fMethod>0)) addCounter = -1;                 \ 
  155       if((addCounter<-1) && (aElement!=0) && (aElement->IsA()==TStreamerBasicPointer::Class())) { \ 
  156          TStreamerElement* elemCounter = (TStreamerElement*) thisVar->GetElements()->FindObject(((TStreamerBasicPointer*)aElement)->GetCountName()); \ 
  157          if (elemCounter) addCounter = elemCounter->GetTObjectOffset();   \ 
  159       if (addCounter>=-1) {                                               \ 
  160          int len = aElement->GetArrayDim()?aElement->GetArrayLength():1;  \ 
  164             char *arr_k = arr[k];                                         \ 
  165             Int_t *l = (addCounter==-1 && arr_k) ? (Int_t*)(arr_k+imethod) : &addCounter;  \ 
  167                name* readbuf = new name[*l];                              \ 
  168                for (int j=0;j<len;j++)                                    \ 
  169                   b.ReadArrayFunc(readbuf, *l);                           \ 
  181 Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, 
const T &arr, 
const TCompInfo *compinfo, Int_t kase,
 
  182                                     TStreamerElement *aElement, Int_t narr,
 
  185    TStreamerInfo* thisVar = 
this;
 
  189    TClass* cle = compinfo->fClass;
 
  191    Int_t imethod = compinfo->fMethod+eoffset;
 
  196       case TStreamerInfo::kSkip + TStreamerInfo::kBool:      SkipCBasicType(Bool_t);
 
  197       case TStreamerInfo::kSkip + TStreamerInfo::kChar:      SkipCBasicType(Char_t);
 
  198       case TStreamerInfo::kSkip + TStreamerInfo::kShort:     SkipCBasicType(Short_t);
 
  199       case TStreamerInfo::kSkip + TStreamerInfo::kInt:       SkipCBasicType(Int_t);
 
  200       case TStreamerInfo::kSkip + TStreamerInfo::kLong:      SkipCBasicType(Long_t);
 
  201       case TStreamerInfo::kSkip + TStreamerInfo::kLong64:    SkipCBasicType(Long64_t);
 
  202       case TStreamerInfo::kSkip + TStreamerInfo::kFloat:     SkipCBasicType(Float_t);
 
  203       case TStreamerInfo::kSkip + TStreamerInfo::kFloat16:   SkipCFloat16(Float_t);
 
  204       case TStreamerInfo::kSkip + TStreamerInfo::kDouble:    SkipCBasicType(Double_t);
 
  205       case TStreamerInfo::kSkip + TStreamerInfo::kDouble32:  SkipCDouble32(Double32_t)
 
  206       case TStreamerInfo::kSkip + TStreamerInfo::kUChar:     SkipCBasicType(UChar_t);
 
  207       case TStreamerInfo::kSkip + TStreamerInfo::kUShort:    SkipCBasicType(UShort_t);
 
  208       case TStreamerInfo::kSkip + TStreamerInfo::kUInt:      SkipCBasicType(UInt_t);
 
  209       case TStreamerInfo::kSkip + TStreamerInfo::kULong:     SkipCBasicType(ULong_t);
 
  210       case TStreamerInfo::kSkip + TStreamerInfo::kULong64:   SkipCBasicType(ULong64_t);
 
  211       case TStreamerInfo::kSkip + TStreamerInfo::kBits:      {
 
  215             if ((dummy & kIsReferenced) != 0) {
 
  224       case TStreamerInfo::kSkipL + TStreamerInfo::kBool:     SkipCBasicArray(Bool_t,ReadFastArray);
 
  225       case TStreamerInfo::kSkipL + TStreamerInfo::kChar:     SkipCBasicArray(Char_t,ReadFastArray);
 
  226       case TStreamerInfo::kSkipL + TStreamerInfo::kShort:    SkipCBasicArray(Short_t,ReadFastArray);
 
  227       case TStreamerInfo::kSkipL + TStreamerInfo::kInt:      SkipCBasicArray(Int_t,ReadFastArray);
 
  228       case TStreamerInfo::kSkipL + TStreamerInfo::kLong:     SkipCBasicArray(Long_t,ReadFastArray);
 
  229       case TStreamerInfo::kSkipL + TStreamerInfo::kLong64:   SkipCBasicArray(Long64_t,ReadFastArray);
 
  230       case TStreamerInfo::kSkipL + TStreamerInfo::kFloat16:  SkipCBasicArray(Float_t,ReadFastArrayFloat16);
 
  231       case TStreamerInfo::kSkipL + TStreamerInfo::kFloat:    SkipCBasicArray(Float_t,ReadFastArray);
 
  232       case TStreamerInfo::kSkipL + TStreamerInfo::kDouble32: SkipCBasicArray(Double_t,ReadFastArrayDouble32)
 
  233       case TStreamerInfo::kSkipL + TStreamerInfo::kDouble:   SkipCBasicArray(Double_t,ReadFastArray);
 
  234       case TStreamerInfo::kSkipL + TStreamerInfo::kUChar:    SkipCBasicArray(UChar_t,ReadFastArray);
 
  235       case TStreamerInfo::kSkipL + TStreamerInfo::kUShort:   SkipCBasicArray(UShort_t,ReadFastArray);
 
  236       case TStreamerInfo::kSkipL + TStreamerInfo::kUInt:     SkipCBasicArray(UInt_t,ReadFastArray);
 
  237       case TStreamerInfo::kSkipL + TStreamerInfo::kULong:    SkipCBasicArray(ULong_t,ReadFastArray);
 
  238       case TStreamerInfo::kSkipL + TStreamerInfo::kULong64:  SkipCBasicArray(ULong64_t,ReadFastArray);
 
  241       case TStreamerInfo::kSkipP + TStreamerInfo::kBool:     SkipCBasicPointer(Bool_t,ReadFastArray);
 
  242       case TStreamerInfo::kSkipP + TStreamerInfo::kChar:     SkipCBasicPointer(Char_t,ReadFastArray);
 
  243       case TStreamerInfo::kSkipP + TStreamerInfo::kShort:    SkipCBasicPointer(Short_t,ReadFastArray);
 
  244       case TStreamerInfo::kSkipP + TStreamerInfo::kInt:      SkipCBasicPointer(Int_t,ReadFastArray);
 
  245       case TStreamerInfo::kSkipP + TStreamerInfo::kLong:     SkipCBasicPointer(Long_t,ReadFastArray);
 
  246       case TStreamerInfo::kSkipP + TStreamerInfo::kLong64:   SkipCBasicPointer(Long64_t,ReadFastArray);
 
  247       case TStreamerInfo::kSkipP + TStreamerInfo::kFloat:    SkipCBasicPointer(Float_t,ReadFastArray);
 
  248       case TStreamerInfo::kSkipP + TStreamerInfo::kFloat16:  SkipCBasicPointer(Float_t,ReadFastArrayFloat16);
 
  249       case TStreamerInfo::kSkipP + TStreamerInfo::kDouble:   SkipCBasicPointer(Double_t,ReadFastArray);
 
  250       case TStreamerInfo::kSkipP + TStreamerInfo::kDouble32: SkipCBasicPointer(Double_t,ReadFastArrayDouble32)
 
  251       case TStreamerInfo::kSkipP + TStreamerInfo::kUChar:    SkipCBasicPointer(UChar_t,ReadFastArray);
 
  252       case TStreamerInfo::kSkipP + TStreamerInfo::kUShort:   SkipCBasicPointer(UShort_t,ReadFastArray);
 
  253       case TStreamerInfo::kSkipP + TStreamerInfo::kUInt:     SkipCBasicPointer(UInt_t,ReadFastArray);
 
  254       case TStreamerInfo::kSkipP + TStreamerInfo::kULong:    SkipCBasicPointer(ULong_t,ReadFastArray);
 
  255       case TStreamerInfo::kSkipP + TStreamerInfo::kULong64:  SkipCBasicPointer(ULong64_t,ReadFastArray);
 
  258       case TStreamerInfo::kSkip + TStreamerInfo::kCharStar: {
 
  262                char* readbuf = 
new char[nch];
 
  263                b.ReadFastArray(readbuf,nch);
 
  271       case TStreamerInfo::kSkip + TStreamerInfo::kObjectP: {
 
  273             for (Int_t j=0;j<compinfo->fLength;j++) {
 
  281       case TStreamerInfo::kSkip + TStreamerInfo::kCounter: {
 
  283             Int_t dummy; b >> dummy;
 
  284             aElement->SetTObjectOffset(dummy);
 
  291       case TStreamerInfo::kSkip + TStreamerInfo::kObjectp:
 
  292       case TStreamerInfo::kSkip + TStreamerInfo::kObject:  {
 
  293          if (cle == TRef::Class()) {
 
  295             DOLOOP{ refjunk.Streamer(b);}
 
  305       case TStreamerInfo::kSkip + TStreamerInfo::kTString: {
 
  312       case TStreamerInfo::kSkip + TStreamerInfo::kTObject: {
 
  319       case TStreamerInfo::kSkip + TStreamerInfo::kTNamed:  {
 
  328       case TStreamerInfo::kSkip + TStreamerInfo::kAnyp: {
 
  336       case TStreamerInfo::kSkip + TStreamerInfo::kAnyP: {
 
  338             for (Int_t j=0;j<compinfo->fLength;j++) {
 
  346       case TStreamerInfo::kSkip + TStreamerInfo::kAny:    {
 
  354       case TStreamerInfo::kSkip + TStreamerInfo::kSTLp:
 
  355       case TStreamerInfo::kSkip + TStreamerInfo::kSTLp + TStreamerInfo::kOffsetL:
 
  356       case TStreamerInfo::kSkip + TStreamerInfo::kSTL:     {
 
  357          if (fOldVersion<3) 
return 0;
 
  363       case TStreamerInfo::kSkip + TStreamerInfo::kBase:    {
 
  370       case TStreamerInfo::kSkip + TStreamerInfo::kStreamLoop:
 
  371       case TStreamerInfo::kSkip + TStreamerInfo::kStreamer: {
 
  384 #define ConvCBasicType(name,stream)                                       \ 
  389          switch(compinfo->fNewType) {                                            \ 
  390             case TStreamerInfo::kBool:    {Bool_t   *x=(Bool_t*)(arr[k]+ioffset);   *x = (Bool_t)u;   break;} \ 
  391             case TStreamerInfo::kChar:    {Char_t   *x=(Char_t*)(arr[k]+ioffset);   *x = (Char_t)u;   break;} \ 
  392             case TStreamerInfo::kShort:   {Short_t  *x=(Short_t*)(arr[k]+ioffset);  *x = (Short_t)u;  break;} \ 
  393             case TStreamerInfo::kInt:     {Int_t    *x=(Int_t*)(arr[k]+ioffset);    *x = (Int_t)u;    break;} \ 
  394             case TStreamerInfo::kLong:    {Long_t   *x=(Long_t*)(arr[k]+ioffset);   *x = (Long_t)u;   break;} \ 
  395             case TStreamerInfo::kLong64:  {Long64_t *x=(Long64_t*)(arr[k]+ioffset); *x = (Long64_t)u; break;} \ 
  396             case TStreamerInfo::kFloat:   {Float_t  *x=(Float_t*)(arr[k]+ioffset);  *x = (Float_t)u;  break;} \ 
  397             case TStreamerInfo::kFloat16: {Float_t  *x=(Float_t*)(arr[k]+ioffset);  *x = (Float_t)u;  break;} \ 
  398             case TStreamerInfo::kDouble:  {Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \ 
  399             case TStreamerInfo::kDouble32:{Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \ 
  400             case TStreamerInfo::kUChar:   {UChar_t  *x=(UChar_t*)(arr[k]+ioffset);  *x = (UChar_t)u;  break;} \ 
  401             case TStreamerInfo::kUShort:  {UShort_t *x=(UShort_t*)(arr[k]+ioffset); *x = (UShort_t)u; break;} \ 
  402             case TStreamerInfo::kUInt:    {UInt_t   *x=(UInt_t*)(arr[k]+ioffset);   *x = (UInt_t)u;   break;} \ 
  403             case TStreamerInfo::kULong:   {ULong_t  *x=(ULong_t*)(arr[k]+ioffset);  *x = (ULong_t)u;  break;} \ 
  404             case TStreamerInfo::kULong64: {ULong64_t*x=(ULong64_t*)(arr[k]+ioffset);*x = (ULong64_t)u;break;} \ 
  409 #define ConvCBasicArrayTo(newtype)                                        \ 
  411       newtype *f=(newtype*)(arr[k]+ioffset);                              \ 
  412       for (j=0;j<len;j++) f[j] = (newtype)readbuf[j];                     \ 
  416 #define ConvCBasicArray(name,ReadArrayFunc)                               \ 
  418       int j, len = compinfo->fLength;                                            \ 
  419       name* readbuf = new name[len];                                      \ 
  420       int newtype = compinfo->fNewType%20;                                       \ 
  422           b.ReadArrayFunc(readbuf, len);                                  \ 
  424              case TStreamerInfo::kBool:     ConvCBasicArrayTo(Bool_t);    \ 
  425              case TStreamerInfo::kChar:     ConvCBasicArrayTo(Char_t);    \ 
  426              case TStreamerInfo::kShort:    ConvCBasicArrayTo(Short_t);   \ 
  427              case TStreamerInfo::kInt:      ConvCBasicArrayTo(Int_t);     \ 
  428              case TStreamerInfo::kLong:     ConvCBasicArrayTo(Long_t);    \ 
  429              case TStreamerInfo::kLong64:   ConvCBasicArrayTo(Long64_t);  \ 
  430              case TStreamerInfo::kFloat:    ConvCBasicArrayTo(Float_t);   \ 
  431              case TStreamerInfo::kFloat16:  ConvCBasicArrayTo(Float_t);   \ 
  432              case TStreamerInfo::kDouble:   ConvCBasicArrayTo(Double_t);  \ 
  433              case TStreamerInfo::kDouble32: ConvCBasicArrayTo(Double_t);  \ 
  434              case TStreamerInfo::kUChar:    ConvCBasicArrayTo(UChar_t);   \ 
  435              case TStreamerInfo::kUShort:   ConvCBasicArrayTo(UShort_t);  \ 
  436              case TStreamerInfo::kUInt:     ConvCBasicArrayTo(UInt_t);    \ 
  437              case TStreamerInfo::kULong:    ConvCBasicArrayTo(ULong_t);   \ 
  438              case TStreamerInfo::kULong64:  ConvCBasicArrayTo(ULong64_t); \ 
  445 #define ConvCBasicPointerToOutOfRange(newtype,ReadArrayFunc)              \ 
  447      newtype **f=(newtype**)(arr[k]+ioffset);                             \ 
  448      for (j=0;j<len;j++) {                                                \ 
  455 #define ConvCBasicPointerTo(newtype,ReadArrayFunc)                        \ 
  457      newtype **f=(newtype**)(arr[k]+ioffset);                             \ 
  458      for (j=0;j<len;j++) {                                                \ 
  460        f[j] = new newtype[*l];                                            \ 
  461        newtype *af = f[j];                                                \ 
  462        b.ReadArrayFunc(readbuf, *l);                                      \ 
  463        for (jj=0;jj<*l;jj++) af[jj] = (newtype)readbuf[jj];               \ 
  468 #define ConvCBasicPointer(name,ReadArrayFunc)                                           \ 
  471       int j, jj, len = aElement->GetArrayDim()?aElement->GetArrayLength():1; \ 
  473       int newtype = compinfo->fNewType %20;                                      \ 
  474       Int_t imethod = compinfo->fMethod+eoffset;                                 \ 
  477          Int_t *l = (Int_t*)(arr[k]+imethod);                             \ 
  478          if (*l>0 && *l < b.BufferSize()) {                               \ 
  479             readbuf = new name[*l];                                       \ 
  481                case TStreamerInfo::kBool:     ConvCBasicPointerTo(Bool_t,ReadArrayFunc);   \ 
  482                case TStreamerInfo::kChar:     ConvCBasicPointerTo(Char_t,ReadArrayFunc);   \ 
  483                case TStreamerInfo::kShort:    ConvCBasicPointerTo(Short_t,ReadArrayFunc);  \ 
  484                case TStreamerInfo::kInt:      ConvCBasicPointerTo(Int_t,ReadArrayFunc);    \ 
  485                case TStreamerInfo::kLong:     ConvCBasicPointerTo(Long_t,ReadArrayFunc);   \ 
  486                case TStreamerInfo::kLong64:   ConvCBasicPointerTo(Long64_t,ReadArrayFunc); \ 
  487                case TStreamerInfo::kFloat:    ConvCBasicPointerTo(Float_t,ReadArrayFunc);  \ 
  488                case TStreamerInfo::kFloat16:  ConvCBasicPointerTo(Float_t,ReadArrayFunc);  \ 
  489                case TStreamerInfo::kDouble:   ConvCBasicPointerTo(Double_t,ReadArrayFunc); \ 
  490                case TStreamerInfo::kDouble32: ConvCBasicPointerTo(Double_t,ReadArrayFunc); \ 
  491                case TStreamerInfo::kUChar:    ConvCBasicPointerTo(UChar_t,ReadArrayFunc);  \ 
  492                case TStreamerInfo::kUShort:   ConvCBasicPointerTo(UShort_t,ReadArrayFunc); \ 
  493                case TStreamerInfo::kUInt:     ConvCBasicPointerTo(UInt_t,ReadArrayFunc);   \ 
  494                case TStreamerInfo::kULong:    ConvCBasicPointerTo(ULong_t,ReadArrayFunc);  \ 
  495                case TStreamerInfo::kULong64:  ConvCBasicPointerTo(ULong64_t,ReadArrayFunc); \ 
  500                case TStreamerInfo::kBool:     ConvCBasicPointerToOutOfRange(Bool_t,ReadArrayFunc);   \ 
  501                case TStreamerInfo::kChar:     ConvCBasicPointerToOutOfRange(Char_t,ReadArrayFunc);   \ 
  502                case TStreamerInfo::kShort:    ConvCBasicPointerToOutOfRange(Short_t,ReadArrayFunc);  \ 
  503                case TStreamerInfo::kInt:      ConvCBasicPointerToOutOfRange(Int_t,ReadArrayFunc);    \ 
  504                case TStreamerInfo::kLong:     ConvCBasicPointerToOutOfRange(Long_t,ReadArrayFunc);   \ 
  505                case TStreamerInfo::kLong64:   ConvCBasicPointerToOutOfRange(Long64_t,ReadArrayFunc); \ 
  506                case TStreamerInfo::kFloat:    ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc);  \ 
  507                case TStreamerInfo::kFloat16:  ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc);  \ 
  508                case TStreamerInfo::kDouble:   ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \ 
  509                case TStreamerInfo::kDouble32: ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \ 
  510                case TStreamerInfo::kUChar:    ConvCBasicPointerToOutOfRange(UChar_t,ReadArrayFunc);  \ 
  511                case TStreamerInfo::kUShort:   ConvCBasicPointerToOutOfRange(UShort_t,ReadArrayFunc); \ 
  512                case TStreamerInfo::kUInt:     ConvCBasicPointerToOutOfRange(UInt_t,ReadArrayFunc);   \ 
  513                case TStreamerInfo::kULong:    ConvCBasicPointerToOutOfRange(ULong_t,ReadArrayFunc);  \ 
  514                case TStreamerInfo::kULong64:  ConvCBasicPointerToOutOfRange(ULong64_t,ReadArrayFunc); \ 
  525 Int_t TStreamerInfo::ReadBufferArtificial(TBuffer &b, 
const T &arr,
 
  526                                           TStreamerElement *aElement, Int_t narr,
 
  529    TStreamerArtificial *artElement = (TStreamerArtificial*)aElement;
 
  530    ROOT::TSchemaRule::ReadRawFuncPtr_t rawfunc = artElement->GetReadRawFunc();
 
  533       for(Int_t k=0; k<narr; ++k) {
 
  534          rawfunc( arr[k], b ); 
 
  539    ROOT::TSchemaRule::ReadFuncPtr_t readfunc = artElement->GetReadFunc();
 
  542       TVirtualObject obj(0);
 
  543       TVirtualArray *objarr = ((TBufferFile&)b).PeekDataCache();
 
  545          obj.fClass = objarr->fClass;
 
  547          for(Int_t k=0; k<narr; ++k) {
 
  548             obj.fObject = objarr->GetObjectAt(k);
 
  549             readfunc(arr[k]+eoffset, &obj);
 
  553          for(Int_t k=0; k<narr; ++k) {
 
  554             readfunc(arr[k]+eoffset, &obj);
 
  567 Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, 
const T &arr,  
const TCompInfo *compinfo, Int_t kase,
 
  568                                     TStreamerElement *aElement, Int_t narr,
 
  571    Int_t ioffset = eoffset+compinfo->fOffset;
 
  576       case TStreamerInfo::kConv + TStreamerInfo::kBool:    ConvCBasicType(Bool_t,b >> u);
 
  577       case TStreamerInfo::kConv + TStreamerInfo::kChar:    ConvCBasicType(Char_t,b >> u);
 
  578       case TStreamerInfo::kConv + TStreamerInfo::kShort:   ConvCBasicType(Short_t,b >> u);
 
  579       case TStreamerInfo::kConv + TStreamerInfo::kInt:     ConvCBasicType(Int_t,b >> u);
 
  580       case TStreamerInfo::kConv + TStreamerInfo::kLong:    
if (compinfo->fNewType==TStreamerInfo::kLong64 || compinfo->fNewType==TStreamerInfo::kULong64) {
 
  581                                                               ConvCBasicType(Long64_t,b >> u);
 
  583                                                               ConvCBasicType(Long_t,b >> u);
 
  585       case TStreamerInfo::kConv + TStreamerInfo::kLong64:  ConvCBasicType(Long64_t,b >> u);
 
  586       case TStreamerInfo::kConv + TStreamerInfo::kFloat:   ConvCBasicType(Float_t,b >> u);
 
  587       case TStreamerInfo::kConv + TStreamerInfo::kFloat16: ConvCBasicType(Float_t,b.ReadFloat16(&u,aElement));
 
  588       case TStreamerInfo::kConv + TStreamerInfo::kDouble:  ConvCBasicType(Double_t,b >> u);
 
  589       case TStreamerInfo::kConv + TStreamerInfo::kDouble32:ConvCBasicType(Double_t,b.ReadDouble32(&u,aElement));
 
  590       case TStreamerInfo::kConv + TStreamerInfo::kUChar:   ConvCBasicType(UChar_t,b >> u);
 
  591       case TStreamerInfo::kConv + TStreamerInfo::kUShort:  ConvCBasicType(UShort_t,b >> u);
 
  592       case TStreamerInfo::kConv + TStreamerInfo::kUInt:    ConvCBasicType(UInt_t,b >> u);
 
  593       case TStreamerInfo::kConv + TStreamerInfo::kULong:   
if (compinfo->fNewType==TStreamerInfo::kLong64 || compinfo->fNewType==TStreamerInfo::kULong64) {
 
  594 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  595                                                               ConvCBasicType(Long64_t,b >> u);
 
  597                                                               ConvCBasicType(ULong64_t,b >> u);
 
  600                                                               ConvCBasicType(ULong_t,b >> u);
 
  602 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  603       case TStreamerInfo::kConv + TStreamerInfo::kULong64: ConvCBasicType(Long64_t,b >> u)
 
  605       case TStreamerInfo::kConv + TStreamerInfo::kULong64: ConvCBasicType(ULong64_t,b >> u)
 
  607       case TStreamerInfo::kConv + TStreamerInfo::kBits:  {
 
  611             if ((u & kIsReferenced) != 0) {
 
  614                pidf += b.GetPidOffset();
 
  615                TProcessID *pid = b.ReadProcessID(pidf);
 
  617                   TObject *obj = (TObject*)(arr[k]+eoffset);
 
  618                   UInt_t gpid = pid->GetUniqueID();
 
  621                      uid = obj->GetUniqueID() | 0xff000000;
 
  623                      uid = ( obj->GetUniqueID() & 0xffffff) + (gpid<<24);
 
  625                   obj->SetUniqueID(uid);
 
  626                   pid->PutObjectWithID(obj);
 
  629             switch(compinfo->fNewType) {
 
  630                case TStreamerInfo::kBool:    {Bool_t   *x=(Bool_t*)(arr[k]+ioffset);   *x = (Bool_t)u;   
break;}
 
  631                case TStreamerInfo::kChar:    {Char_t   *x=(Char_t*)(arr[k]+ioffset);   *x = (Char_t)u;   
break;}
 
  632                case TStreamerInfo::kShort:   {Short_t  *x=(Short_t*)(arr[k]+ioffset);  *x = (Short_t)u;  
break;}
 
  633                case TStreamerInfo::kInt:     {Int_t    *x=(Int_t*)(arr[k]+ioffset);    *x = (Int_t)u;    
break;}
 
  634                case TStreamerInfo::kLong:    {Long_t   *x=(Long_t*)(arr[k]+ioffset);   *x = (Long_t)u;   
break;}
 
  635                case TStreamerInfo::kLong64:  {Long64_t *x=(Long64_t*)(arr[k]+ioffset); *x = (Long64_t)u; 
break;}
 
  636                case TStreamerInfo::kFloat:   {Float_t  *x=(Float_t*)(arr[k]+ioffset);  *x = (Float_t)u;  
break;}
 
  637                case TStreamerInfo::kFloat16: {Float_t  *x=(Float_t*)(arr[k]+ioffset);  *x = (Float_t)u;  
break;}
 
  638                case TStreamerInfo::kDouble:  {Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; 
break;}
 
  639                case TStreamerInfo::kDouble32:{Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; 
break;}
 
  640                case TStreamerInfo::kUChar:   {UChar_t  *x=(UChar_t*)(arr[k]+ioffset);  *x = (UChar_t)u;  
break;}
 
  641                case TStreamerInfo::kUShort:  {UShort_t *x=(UShort_t*)(arr[k]+ioffset); *x = (UShort_t)u; 
break;}
 
  642                case TStreamerInfo::kUInt:    {UInt_t   *x=(UInt_t*)(arr[k]+ioffset);   *x = (UInt_t)u;   
break;}
 
  643                case TStreamerInfo::kULong:   {ULong_t  *x=(ULong_t*)(arr[k]+ioffset);  *x = (ULong_t)u;  
break;}
 
  644                case TStreamerInfo::kULong64: {ULong64_t*x=(ULong64_t*)(arr[k]+ioffset);*x = (ULong64_t)u;
break;}
 
  650       case TStreamerInfo::kConvL + TStreamerInfo::kBool:    ConvCBasicArray(Bool_t,ReadFastArray);
 
  651       case TStreamerInfo::kConvL + TStreamerInfo::kChar:    ConvCBasicArray(Char_t,ReadFastArray);
 
  652       case TStreamerInfo::kConvL + TStreamerInfo::kShort:   ConvCBasicArray(Short_t,ReadFastArray);
 
  653       case TStreamerInfo::kConvL + TStreamerInfo::kInt:     ConvCBasicArray(Int_t,ReadFastArray);
 
  654       case TStreamerInfo::kConvL + TStreamerInfo::kLong:
 
  655          if (compinfo->fNewType==TStreamerInfo::kLong64 || compinfo->fNewType==TStreamerInfo::kULong64) {
 
  656             ConvCBasicArray(Long64_t,ReadFastArray);
 
  658             ConvCBasicArray(Long_t,ReadFastArray);
 
  660       case TStreamerInfo::kConvL + TStreamerInfo::kLong64:  ConvCBasicArray(Long64_t,ReadFastArray);
 
  661       case TStreamerInfo::kConvL + TStreamerInfo::kFloat:   ConvCBasicArray(Float_t,ReadFastArray);
 
  662       case TStreamerInfo::kConvL + TStreamerInfo::kFloat16: ConvCBasicArray(Float_t,ReadFastArrayFloat16);
 
  663       case TStreamerInfo::kConvL + TStreamerInfo::kDouble:  ConvCBasicArray(Double_t,ReadFastArray);
 
  664       case TStreamerInfo::kConvL + TStreamerInfo::kDouble32:ConvCBasicArray(Double_t,ReadFastArrayDouble32);
 
  665       case TStreamerInfo::kConvL + TStreamerInfo::kUChar:   ConvCBasicArray(UChar_t,ReadFastArray);
 
  666       case TStreamerInfo::kConvL + TStreamerInfo::kUShort:  ConvCBasicArray(UShort_t,ReadFastArray);
 
  667       case TStreamerInfo::kConvL + TStreamerInfo::kUInt:    ConvCBasicArray(UInt_t,ReadFastArray);
 
  668       case TStreamerInfo::kConvL + TStreamerInfo::kULong:
 
  669          if (compinfo->fNewType==TStreamerInfo::kLong64 || compinfo->fNewType==TStreamerInfo::kULong64) {
 
  670 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  671             ConvCBasicArray(Long64_t,ReadFastArray)
 
  673             ConvCBasicArray(ULong64_t,ReadFastArray)
 
  676             ConvCBasicArray(ULong_t,ReadFastArray);
 
  678 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  679       case TStreamerInfo::kConvL + TStreamerInfo::kULong64: ConvCBasicArray(Long64_t,ReadFastArray)
 
  681       case TStreamerInfo::kConvL + TStreamerInfo::kULong64: ConvCBasicArray(ULong64_t,ReadFastArray)
 
  685       case TStreamerInfo::kConvP + TStreamerInfo::kBool:    ConvCBasicPointer(Bool_t,ReadFastArray);
 
  686       case TStreamerInfo::kConvP + TStreamerInfo::kChar:    ConvCBasicPointer(Char_t,ReadFastArray);
 
  687       case TStreamerInfo::kConvP + TStreamerInfo::kShort:   ConvCBasicPointer(Short_t,ReadFastArray);
 
  688       case TStreamerInfo::kConvP + TStreamerInfo::kInt:     ConvCBasicPointer(Int_t,ReadFastArray);
 
  689       case TStreamerInfo::kConvP + TStreamerInfo::kLong:
 
  690          if (compinfo->fNewType==TStreamerInfo::kLong64 || compinfo->fNewType==TStreamerInfo::kULong64) {
 
  691             ConvCBasicPointer(Long64_t,ReadFastArray);
 
  693             ConvCBasicPointer(Long_t,ReadFastArray);
 
  695       case TStreamerInfo::kConvP + TStreamerInfo::kLong64:  ConvCBasicPointer(Long64_t,ReadFastArray);
 
  696       case TStreamerInfo::kConvP + TStreamerInfo::kFloat:   ConvCBasicPointer(Float_t,ReadFastArray);
 
  697       case TStreamerInfo::kConvP + TStreamerInfo::kFloat16: ConvCBasicPointer(Float_t,ReadFastArrayFloat16);
 
  698       case TStreamerInfo::kConvP + TStreamerInfo::kDouble:  ConvCBasicPointer(Double_t,ReadFastArray);
 
  699       case TStreamerInfo::kConvP + TStreamerInfo::kDouble32:ConvCBasicPointer(Double_t,ReadFastArrayDouble32);
 
  700       case TStreamerInfo::kConvP + TStreamerInfo::kUChar:   ConvCBasicPointer(UChar_t,ReadFastArray);
 
  701       case TStreamerInfo::kConvP + TStreamerInfo::kUShort:  ConvCBasicPointer(UShort_t,ReadFastArray);
 
  702       case TStreamerInfo::kConvP + TStreamerInfo::kUInt:    ConvCBasicPointer(UInt_t,ReadFastArray);
 
  703       case TStreamerInfo::kConvP + TStreamerInfo::kULong:
 
  704          if (compinfo->fNewType==TStreamerInfo::kLong64 || compinfo->fNewType==TStreamerInfo::kULong64) {
 
  705 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  706             ConvCBasicPointer(Long64_t,ReadFastArray)
 
  708             ConvCBasicPointer(ULong64_t,ReadFastArray)
 
  711             ConvCBasicPointer(ULong_t,ReadFastArray);
 
  713 #if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  714       case TStreamerInfo::kConvP + TStreamerInfo::kULong64: ConvCBasicPointer(Long64_t,ReadFastArray)
 
  716       case TStreamerInfo::kConvP + TStreamerInfo::kULong64: ConvCBasicPointer(ULong64_t,ReadFastArray)
 
  730    template <
class T> Bool_t R__TestUseCache(TStreamerElement *element)
 
  732       return element->TestBit(TStreamerElement::kCache);
 
  735    template <> Bool_t R__TestUseCache<TVirtualArray>(TStreamerElement*)
 
  751 Int_t TStreamerInfo::ReadBuffer(TBuffer &b, 
const T &arr,
 
  752                                 TCompInfo *
const*
const compinfo, Int_t first, Int_t last,
 
  753                                 Int_t narr, Int_t eoffset, Int_t arrayMode)
 
  755    TStreamerInfo *thisVar = 
this;
 
  756    Bool_t needIncrement = !( arrayMode & 2 );
 
  757    arrayMode = arrayMode & (~2);
 
  759    if (needIncrement) b.IncrementLevel(thisVar);
 
  766    static const int kHaveLoop = 1024;
 
  767    const Int_t typeOffset = arrayMode ? kHaveLoop : 0;
 
  771    TMemberStreamer *pstreamer=0;
 
  772    Int_t isPreAlloc = 0;
 
  773    for (Int_t i=first;i<last;i++) {
 
  774       TStreamerElement * aElement  = (TStreamerElement*)compinfo[i]->fElem;
 
  775       CurrentElement() = aElement;
 
  777       if (needIncrement) b.SetStreamerElementNumber(aElement,compinfo[i]->fType);
 
  779       if (aElement->TestBit(TStreamerElement::kWrite)) 
continue;
 
  781       if (R__TestUseCache<T>(aElement)) {
 
  782          Int_t bufpos = b.Length();
 
  783          if (((TBufferFile&)b).PeekDataCache()==0) {
 
  784             Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",thisVar->GetName(),aElement->GetName());
 
  785             thisVar->ReadBufferSkip(b,arr,compinfo[i],compinfo[i]->fType+TStreamerInfo::kSkip,aElement,narr,eoffset);
 
  788                printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d," 
  789                   " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
 
  790                   fClass->GetName(),aElement->GetName(),i,compinfo[i]->fType,
 
  791                   aElement->ClassName(),b.Length(),arr[0], eoffset,((TBufferFile&)b).PeekDataCache()->GetObjectAt(0));
 
  793             thisVar->ReadBuffer(b,*((TBufferFile&)b).PeekDataCache(),compinfo,i,i+1,narr,eoffset, arrayMode);
 
  795          if (aElement->TestBit(TStreamerElement::kRepeat)) { b.SetBufferOffset(bufpos); }
 
  798       const Int_t ioffset = compinfo[i]->fOffset+eoffset;
 
  801          printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d," 
  802                 " %s, bufpos=%d, arr=%p, offset=%d\n",
 
  803                 fClass->GetName(),aElement->GetName(),i,compinfo[i]->fType,
 
  804                 aElement->ClassName(),b.Length(),arr[0], ioffset);
 
  807       Int_t kase = compinfo[i]->fType;
 
  809       switch (kase + typeOffset) {
 
  812          case TStreamerInfo::kBool:               ReadBasicType(Bool_t);    
continue;
 
  813          case TStreamerInfo::kChar:               ReadBasicType(Char_t);    
continue;
 
  814          case TStreamerInfo::kShort:              ReadBasicType(Short_t);   
continue;
 
  815          case TStreamerInfo::kInt:                ReadBasicType(Int_t);     
continue;
 
  816          case TStreamerInfo::kLong:               ReadBasicType(Long_t);    
continue;
 
  817          case TStreamerInfo::kLong64:             ReadBasicType(Long64_t);  
continue;
 
  818          case TStreamerInfo::kFloat:              ReadBasicType(Float_t);   
continue;
 
  819          case TStreamerInfo::kDouble:             ReadBasicType(Double_t);  
continue;
 
  820          case TStreamerInfo::kUChar:              ReadBasicType(UChar_t);   
continue;
 
  821          case TStreamerInfo::kUShort:             ReadBasicType(UShort_t);  
continue;
 
  822          case TStreamerInfo::kUInt:               ReadBasicType(UInt_t);    
continue;
 
  823          case TStreamerInfo::kULong:              ReadBasicType(ULong_t);   
continue;
 
  824          case TStreamerInfo::kULong64:            ReadBasicType(ULong64_t); 
continue;
 
  825          case TStreamerInfo::kFloat16: {
 
  826             Float_t *x=(Float_t*)(arr[0]+ioffset);
 
  827             b.ReadFloat16(x,aElement);
 
  830          case TStreamerInfo::kDouble32: {
 
  831             Double_t *x=(Double_t*)(arr[0]+ioffset);
 
  832             b.ReadDouble32(x,aElement);
 
  836          case TStreamerInfo::kBool   + kHaveLoop: ReadBasicTypeLoop(Bool_t);    
continue;
 
  837          case TStreamerInfo::kChar   + kHaveLoop: ReadBasicTypeLoop(Char_t);    
continue;
 
  838          case TStreamerInfo::kShort  + kHaveLoop: ReadBasicTypeLoop(Short_t);   
continue;
 
  839          case TStreamerInfo::kInt    + kHaveLoop: ReadBasicTypeLoop(Int_t);     
continue;
 
  840          case TStreamerInfo::kLong   + kHaveLoop: ReadBasicTypeLoop(Long_t);    
continue;
 
  841          case TStreamerInfo::kLong64 + kHaveLoop: ReadBasicTypeLoop(Long64_t);  
continue;
 
  842          case TStreamerInfo::kFloat  + kHaveLoop: ReadBasicTypeLoop(Float_t);   
continue;
 
  843          case TStreamerInfo::kDouble + kHaveLoop: ReadBasicTypeLoop(Double_t);  
continue;
 
  844          case TStreamerInfo::kUChar  + kHaveLoop: ReadBasicTypeLoop(UChar_t);   
continue;
 
  845          case TStreamerInfo::kUShort + kHaveLoop: ReadBasicTypeLoop(UShort_t);  
continue;
 
  846          case TStreamerInfo::kUInt   + kHaveLoop: ReadBasicTypeLoop(UInt_t);    
continue;
 
  847          case TStreamerInfo::kULong  + kHaveLoop: ReadBasicTypeLoop(ULong_t);   
continue;
 
  848          case TStreamerInfo::kULong64+ kHaveLoop: ReadBasicTypeLoop(ULong64_t); 
continue;
 
  849          case TStreamerInfo::kFloat16 + kHaveLoop: {
 
  850             for(Int_t k=0; k<narr; ++k) {
 
  851                Float_t *x=(Float_t*)(arr[k]+ioffset);
 
  852                b.ReadFloat16(x,aElement);
 
  856          case TStreamerInfo::kDouble32 + kHaveLoop: {
 
  857             for(Int_t k=0; k<narr; ++k) {
 
  858                Double_t *x=(Double_t*)(arr[k]+ioffset);
 
  859                b.ReadDouble32(x,aElement);
 
  865          case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:   ReadBasicArray(Bool_t);    
continue;
 
  866          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:   ReadBasicArray(Char_t);    
continue;
 
  867          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:  ReadBasicArray(Short_t);   
continue;
 
  868          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:    ReadBasicArray(Int_t);     
continue;
 
  869          case TStreamerInfo::kOffsetL + TStreamerInfo::kLong:   ReadBasicArray(Long_t);    
continue;
 
  870          case TStreamerInfo::kOffsetL + TStreamerInfo::kLong64: ReadBasicArray(Long64_t);  
continue;
 
  871          case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat:  ReadBasicArray(Float_t);   
continue;
 
  872          case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble: ReadBasicArray(Double_t);  
continue;
 
  873          case TStreamerInfo::kOffsetL + TStreamerInfo::kUChar:  ReadBasicArray(UChar_t);   
continue;
 
  874          case TStreamerInfo::kOffsetL + TStreamerInfo::kUShort: ReadBasicArray(UShort_t);  
continue;
 
  875          case TStreamerInfo::kOffsetL + TStreamerInfo::kUInt:   ReadBasicArray(UInt_t);    
continue;
 
  876          case TStreamerInfo::kOffsetL + TStreamerInfo::kULong:  ReadBasicArray(ULong_t);   
continue;
 
  877          case TStreamerInfo::kOffsetL + TStreamerInfo::kULong64:ReadBasicArray(ULong64_t); 
continue;
 
  878          case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat16: {
 
  879             b.ReadFastArrayFloat16((Float_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
 
  882          case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble32: {
 
  883             b.ReadFastArrayDouble32((Double_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
 
  887          case TStreamerInfo::kOffsetL + TStreamerInfo::kBool    + kHaveLoop: ReadBasicArrayLoop(Bool_t);    
continue;
 
  888          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar    + kHaveLoop: ReadBasicArrayLoop(Char_t);    
continue;
 
  889          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort   + kHaveLoop: ReadBasicArrayLoop(Short_t);   
continue;
 
  890          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt     + kHaveLoop: ReadBasicArrayLoop(Int_t);     
continue;
 
  891          case TStreamerInfo::kOffsetL + TStreamerInfo::kLong    + kHaveLoop: ReadBasicArrayLoop(Long_t);    
continue;
 
  892          case TStreamerInfo::kOffsetL + TStreamerInfo::kLong64  + kHaveLoop: ReadBasicArrayLoop(Long64_t);  
continue;
 
  893          case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat   + kHaveLoop: ReadBasicArrayLoop(Float_t);   
continue;
 
  894          case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble  + kHaveLoop: ReadBasicArrayLoop(Double_t);  
continue;
 
  895          case TStreamerInfo::kOffsetL + TStreamerInfo::kUChar   + kHaveLoop: ReadBasicArrayLoop(UChar_t);   
continue;
 
  896          case TStreamerInfo::kOffsetL + TStreamerInfo::kUShort  + kHaveLoop: ReadBasicArrayLoop(UShort_t);  
continue;
 
  897          case TStreamerInfo::kOffsetL + TStreamerInfo::kUInt    + kHaveLoop: ReadBasicArrayLoop(UInt_t);    
continue;
 
  898          case TStreamerInfo::kOffsetL + TStreamerInfo::kULong   + kHaveLoop: ReadBasicArrayLoop(ULong_t);   
continue;
 
  899          case TStreamerInfo::kOffsetL + TStreamerInfo::kULong64 + kHaveLoop: ReadBasicArrayLoop(ULong64_t); 
continue;
 
  900          case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat16 + kHaveLoop: {
 
  901             for(Int_t k=0; k<narr; ++k) {
 
  902                b.ReadFastArrayFloat16((Float_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
 
  906          case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble32+ kHaveLoop: {
 
  907             for(Int_t k=0; k<narr; ++k) {
 
  908                b.ReadFastArrayDouble32((Double_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
 
  914          case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:   ReadBasicPointer(Bool_t);  
continue;
 
  915          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:   ReadBasicPointer(Char_t);  
continue;
 
  916          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:  ReadBasicPointer(Short_t);  
continue;
 
  917          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:    ReadBasicPointer(Int_t);  
continue;
 
  918          case TStreamerInfo::kOffsetP + TStreamerInfo::kLong:   ReadBasicPointer(Long_t);  
continue;
 
  919          case TStreamerInfo::kOffsetP + TStreamerInfo::kLong64: ReadBasicPointer(Long64_t);  
continue;
 
  920          case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat:  ReadBasicPointer(Float_t);  
continue;
 
  921          case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble: ReadBasicPointer(Double_t);  
continue;
 
  922          case TStreamerInfo::kOffsetP + TStreamerInfo::kUChar:  ReadBasicPointer(UChar_t);  
continue;
 
  923          case TStreamerInfo::kOffsetP + TStreamerInfo::kUShort: ReadBasicPointer(UShort_t);  
continue;
 
  924          case TStreamerInfo::kOffsetP + TStreamerInfo::kUInt:   ReadBasicPointer(UInt_t);  
continue;
 
  925          case TStreamerInfo::kOffsetP + TStreamerInfo::kULong:  ReadBasicPointer(ULong_t);  
continue;
 
  926          case TStreamerInfo::kOffsetP + TStreamerInfo::kULong64:ReadBasicPointer(ULong64_t);  
continue;
 
  927          case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat16: {
 
  930             const int imethod = compinfo[i]->fMethod+eoffset;
 
  931             Int_t *l = (Int_t*)(arr[0]+imethod);
 
  932             Float_t **f = (Float_t**)(arr[0]+ioffset);
 
  934             for(j=0;j<compinfo[i]->fLength;j++) {
 
  936                f[j] = 0; 
if (*l <=0) 
continue;
 
  937                f[j] = 
new Float_t[*l];
 
  938                b.ReadFastArrayFloat16(f[j],*l,aElement);
 
  942          case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble32: {
 
  945             const int imethod = compinfo[i]->fMethod+eoffset;
 
  946             Int_t *l = (Int_t*)(arr[0]+imethod);
 
  947             Double_t **f = (Double_t**)(arr[0]+ioffset);
 
  949             for(j=0;j<compinfo[i]->fLength;j++) {
 
  951                f[j] = 0; 
if (*l <=0) 
continue;
 
  952                f[j] = 
new Double_t[*l];
 
  953                b.ReadFastArrayDouble32(f[j],*l,aElement);
 
  958          case TStreamerInfo::kOffsetP + TStreamerInfo::kBool    + kHaveLoop: ReadBasicPointerLoop(Bool_t);    
continue;
 
  959          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar    + kHaveLoop: ReadBasicPointerLoop(Char_t);    
continue;
 
  960          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort   + kHaveLoop: ReadBasicPointerLoop(Short_t);   
continue;
 
  961          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt     + kHaveLoop: ReadBasicPointerLoop(Int_t);     
continue;
 
  962          case TStreamerInfo::kOffsetP + TStreamerInfo::kLong    + kHaveLoop: ReadBasicPointerLoop(Long_t);    
continue;
 
  963          case TStreamerInfo::kOffsetP + TStreamerInfo::kLong64  + kHaveLoop: ReadBasicPointerLoop(Long64_t);  
continue;
 
  964          case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat   + kHaveLoop: ReadBasicPointerLoop(Float_t);   
continue;
 
  965          case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble  + kHaveLoop: ReadBasicPointerLoop(Double_t);  
continue;
 
  966          case TStreamerInfo::kOffsetP + TStreamerInfo::kUChar   + kHaveLoop: ReadBasicPointerLoop(UChar_t);   
continue;
 
  967          case TStreamerInfo::kOffsetP + TStreamerInfo::kUShort  + kHaveLoop: ReadBasicPointerLoop(UShort_t);  
continue;
 
  968          case TStreamerInfo::kOffsetP + TStreamerInfo::kUInt    + kHaveLoop: ReadBasicPointerLoop(UInt_t);    
continue;
 
  969          case TStreamerInfo::kOffsetP + TStreamerInfo::kULong   + kHaveLoop: ReadBasicPointerLoop(ULong_t);   
continue;
 
  970          case TStreamerInfo::kOffsetP + TStreamerInfo::kULong64 + kHaveLoop: ReadBasicPointerLoop(ULong64_t); 
continue;
 
  971          case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat16 + kHaveLoop: {
 
  972             const int imethod = compinfo[i]->fMethod+eoffset;
 
  973             for(Int_t k=0; k<narr; ++k) {
 
  976                Int_t *l = (Int_t*)(arr[k]+imethod);
 
  977                Float_t **f = (Float_t**)(arr[k]+ioffset);
 
  979                for(j=0;j<compinfo[i]->fLength;j++) {
 
  981                   f[j] = 0; 
if (*l <=0) 
continue;
 
  982                   f[j] = 
new Float_t[*l];
 
  983                   b.ReadFastArrayFloat16(f[j],*l,aElement);
 
  988          case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble32+ kHaveLoop: {
 
  989             const int imethod = compinfo[i]->fMethod+eoffset;
 
  990             for(Int_t k=0; k<narr; ++k) {
 
  993                Int_t *l = (Int_t*)(arr[k]+imethod);
 
  994                Double_t **f = (Double_t**)(arr[k]+ioffset);
 
  996                for(j=0;j<compinfo[i]->fLength;j++) {
 
  998                   f[j] = 0; 
if (*l <=0) 
continue;
 
  999                   f[j] = 
new Double_t[*l];
 
 1000                   b.ReadFastArrayDouble32(f[j],*l,aElement);
 
 1010          case TStreamerInfo::kCharStar: {
 
 1012                char **f = (
char**)(arr[k]+ioffset);
 
 1019          case TStreamerInfo::kBits: {
 
 1021                UInt_t *x=(UInt_t*)(arr[k]+ioffset); b >> *x;
 
 1022                if ((*x & kIsReferenced) != 0) {
 
 1025                   pidf += b.GetPidOffset();
 
 1026                   TProcessID *pid = b.ReadProcessID(pidf);
 
 1028                      TObject *obj = (TObject*)(arr[k]+eoffset);
 
 1029                      UInt_t gpid = pid->GetUniqueID();
 
 1032                         uid = obj->GetUniqueID() | 0xff000000;
 
 1034                         uid = ( obj->GetUniqueID() & 0xffffff) + (gpid<<24);
 
 1036                      obj->SetUniqueID(uid);
 
 1037                      pid->PutObjectWithID(obj);
 
 1045          case TStreamerInfo::kCounter: {
 
 1047                Int_t *x=(Int_t*)(arr[k]+ioffset);
 
 1055          case TStreamerInfo::kTString: { DOLOOP { ((TString*)(arr[k]+ioffset))->Streamer(b);         } } 
continue;
 
 1056          case TStreamerInfo::kTObject: { DOLOOP { ((TObject*)(arr[k]+ioffset))->TObject::Streamer(b);} } 
continue;
 
 1057          case TStreamerInfo::kTNamed:  { DOLOOP { ((TNamed*) (arr[k]+ioffset))->TNamed::Streamer(b) ;} } 
continue;
 
 1063       cle       = compinfo[i]->fClass;
 
 1064       newCle    = compinfo[i]->fNewClass;
 
 1065       pstreamer = compinfo[i]->fStreamer;
 
 1069          case TStreamerInfo::kAnyp:    
 
 1070          case TStreamerInfo::kAnyp+TStreamerInfo::kOffsetL:
 
 1071          case TStreamerInfo::kObjectp: 
 
 1072          case TStreamerInfo::kObjectp+TStreamerInfo::kOffsetL:
 
 1075          case TStreamerInfo::kObjectP: 
 
 1076          case TStreamerInfo::kObjectP+TStreamerInfo::kOffsetL:
 
 1077          case TStreamerInfo::kAnyP:    
 
 1078          case TStreamerInfo::kAnyP+TStreamerInfo::kOffsetL: {
 
 1080                b.ReadFastArray((
void**)(arr[k]+ioffset),cle,compinfo[i]->fLength,isPreAlloc,pstreamer);
 
 1131          case TStreamerInfo::kSTLp:            
 
 1132          case TStreamerInfo::kSTLp + TStreamerInfo::kOffsetL: 
 
 1135                Version_t vers = b.ReadVersion(&start, &count, cle);
 
 1137                if ( vers & TBufferFile::kStreamedMemberWise ) {
 
 1140                   vers &= ~( TBufferFile::kStreamedMemberWise );
 
 1142                   TClass *newClass = aElement->GetNewClass();
 
 1143                   TClass *oldClass = aElement->GetClassPointer();
 
 1144                   if( vers < 9 && newClass && newClass!=oldClass ) {
 
 1145                      Error( 
"ReadBuffer", 
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
 
 1146                            vers, b.GetParent() ? b.GetParent()->GetName() : 
"memory/socket", oldClass->GetName(), newClass->GetName() );
 
 1150                   Version_t vClVersion = 0; 
 
 1152                      vClVersion = b.ReadVersionForMemberWise( cle->GetCollectionProxy()->GetValueClass() );
 
 1155                   TVirtualCollectionProxy *newProxy = (newClass ? newClass->GetCollectionProxy() : 0);
 
 1156                   TVirtualCollectionProxy *oldProxy = oldClass->GetCollectionProxy();
 
 1157                   TStreamerInfo *subinfo = 0;
 
 1161                      subinfo = (TStreamerInfo*)newProxy->GetValueClass()->GetConversionStreamerInfo( oldProxy->GetValueClass(), vClVersion );
 
 1163                      subinfo = (TStreamerInfo*)oldProxy->GetValueClass()->GetStreamerInfo( vClVersion );
 
 1164                      newProxy = oldProxy;
 
 1169                         void **contp = (
void**)(arr[k]+ioffset);
 
 1171                         for(j=0;j<compinfo[i]->fLength;j++) {
 
 1172                            void *cont = contp[j];
 
 1174                               contp[j] = cle->New();
 
 1177                            TVirtualCollectionProxy::TPushPop helper( newProxy, cont );
 
 1180                            env = newProxy->Allocate(nobjects,
true);
 
 1181                            subinfo->ReadBufferSTL(b,newProxy,nobjects, 0, vers>=7 );
 
 1182                            newProxy->Commit(env);
 
 1186                   b.CheckByteCount(start,count,aElement->GetFullName());
 
 1189                if (pstreamer == 0) {
 
 1191                      void **contp = (
void**)(arr[k]+ioffset);
 
 1193                      for(j=0;j<compinfo[i]->fLength;j++) {
 
 1194                         void *cont = contp[j];
 
 1200                            contp[j] = cle->New();
 
 1203                         cle->Streamer( cont, b );
 
 1207                   DOLOOP {(*pstreamer)(b,arr[k]+ioffset,compinfo[i]->fLength);}
 
 1209                b.CheckByteCount(start,count,aElement->GetFullName());
 
 1213          case TStreamerInfo::kSTL:                
 
 1214          case TStreamerInfo::kSTL + TStreamerInfo::kOffsetL:     
 
 1216                UInt_t start, count;
 
 1217                Version_t vers = b.ReadVersion(&start, &count, cle);
 
 1219                if ( vers & TBufferFile::kStreamedMemberWise ) {
 
 1221                   vers &= ~( TBufferFile::kStreamedMemberWise );
 
 1223                   TClass *newClass = aElement->GetNewClass();
 
 1224                   TClass *oldClass = aElement->GetClassPointer();
 
 1226                   if( vers < 8 && newClass && newClass!=oldClass ) {
 
 1227                      Error( 
"ReadBuffer", 
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
 
 1228                            vers, b.GetParent() ? b.GetParent()->GetName() : 
"memory/socket", oldClass->GetName(), newClass->GetName() );
 
 1231                   TVirtualCollectionProxy *oldProxy = oldClass->GetCollectionProxy();
 
 1232                   TClass *valueClass = oldProxy ? oldProxy->GetValueClass() : 0;
 
 1233                   Version_t vClVersion = 0; 
 
 1235                      vClVersion = b.ReadVersionForMemberWise( valueClass );
 
 1238                   if (valueClass == 0) {
 
 1244                      b.SetBufferOffset(start+count+
sizeof(UInt_t));
 
 1248                   TVirtualCollectionProxy *newProxy = (newClass ? newClass->GetCollectionProxy() : 0);
 
 1249                   TStreamerInfo *subinfo = 0;
 
 1253                      subinfo = (TStreamerInfo*)newProxy->GetValueClass()->GetConversionStreamerInfo( oldProxy->GetValueClass(), vClVersion );
 
 1255                      subinfo = (TStreamerInfo*)valueClass->GetStreamerInfo( vClVersion );
 
 1256                      newProxy = oldProxy;
 
 1260                         int objectSize = cle->Size();
 
 1261                         char *obj = arr[k]+ioffset;
 
 1262                         char *end = obj + compinfo[i]->fLength*objectSize;
 
 1264                         for(; obj<end; obj+=objectSize) {
 
 1265                            TVirtualCollectionProxy::TPushPop helper( newProxy, obj );
 
 1268                            void* env = newProxy->Allocate(nobjects,
true);
 
 1269                            subinfo->ReadBufferSTL(b,newProxy,nobjects, 0, vers >= 7);
 
 1270                            newProxy->Commit(env);
 
 1274                   b.CheckByteCount(start,count,aElement->GetTypeName());
 
 1280                   if (aElement->IsBase() && aElement->IsA()!=TStreamerBase::Class()) {
 
 1281                      b.SetBufferOffset(start);  
 
 1282                   } 
else if (vers==0) {
 
 1283                      b.SetBufferOffset(start);  
 
 1286                if (pstreamer == 0) {
 
 1292                      b.ReadFastArray((
void*)(arr[k]+ioffset),newCle,compinfo[i]->fLength,(TMemberStreamer*)0, cle );
 
 1295                   DOLOOP {(*pstreamer)(b,arr[k]+ioffset,compinfo[i]->fLength);}
 
 1297                b.CheckByteCount(start,count,aElement->GetTypeName());
 
 1301          case TStreamerInfo::kObject: 
 
 1302             if (cle->IsStartingWithTObject() && cle->GetState() > TClass::kEmulated) {
 
 1303                DOLOOP {((TObject*)(arr[k]+ioffset))->Streamer(b);}
 
 1308          case TStreamerInfo::kAny:    
 
 1310                DOLOOP {(*pstreamer)(b,arr[k]+ioffset,0);}
 
 1313                   DOLOOP { newCle->Streamer( arr[k]+ioffset, b, cle ); }
 
 1315                   DOLOOP { cle->Streamer(arr[k]+ioffset,b);}
 
 1319          case TStreamerInfo::kObject+TStreamerInfo::kOffsetL:  {
 
 1320             TFile *file = (TFile*)b.GetParent();
 
 1321             if (file && file->GetVersion() < 30208) {
 
 1324                kase = TStreamerInfo::kStreamer;
 
 1331          case TStreamerInfo::kAny+TStreamerInfo::kOffsetL: {
 
 1333                b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
 
 1339          case TStreamerInfo::kBase:
 
 1340             if (!(arrayMode&1)) {
 
 1341                if(pstreamer)  {kase = TStreamerInfo::kStreamer; 
goto SWIT;}
 
 1342                DOLOOP { ((TStreamerBase*)aElement)->ReadBuffer(b,arr[k]);}
 
 1348                TStreamerInfo *binfo = ((TStreamerInfo*)((TStreamerBase*)aElement)->GetBaseStreamerInfo());
 
 1349                binfo->ReadBuffer(b,arr,binfo->fCompFull,0,binfo->fNfulldata,narr,ioffset,arrayMode);
 
 1353          case TStreamerInfo::kOffsetL + TStreamerInfo::kTString:
 
 1354          case TStreamerInfo::kOffsetL + TStreamerInfo::kTObject:
 
 1355          case TStreamerInfo::kOffsetL + TStreamerInfo::kTNamed:
 
 1360             Version_t v = b.ReadVersion(&start, &count, cle);
 
 1362                if (count<= 0    || v   !=  fOldVersion) {
 
 1363                   b.SetBufferOffset(start);
 
 1368                b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
 
 1370             b.CheckByteCount(start,count,aElement->GetFullName());
 
 1375          case TStreamerInfo::kStreamer:{
 
 1379             Version_t v = b.ReadVersion(&start, &count, cle);
 
 1381                if (aElement->IsBase() && aElement->IsA()!=TStreamerBase::Class()) {
 
 1382                   b.SetBufferOffset(start);  
 
 1383                } 
else if (kase == TStreamerInfo::kSTL || kase == TStreamerInfo::kSTL+TStreamerInfo::kOffsetL ||
 
 1384                           count<= 0    || v   !=  fOldVersion) {
 
 1385                   b.SetBufferOffset(start);
 
 1389             if (pstreamer == 0) {
 
 1390                Error(
"ReadBuffer",
"Streamer for %s is null\n",aElement->GetName());
 
 1392                   aElement->ls(); 
continue;
 
 1395                DOLOOP {(*pstreamer)(b,arr[k]+ioffset,compinfo[i]->fLength);}
 
 1397             b.CheckByteCount(start,count,aElement->GetFullName());
 
 1401          case TStreamerInfo::kStreamLoop:
 
 1406          case TStreamerInfo::kStreamLoop + TStreamerInfo::kOffsetL:
 
 1413             TClass* cl = compinfo[i]->fClass;
 
 1415             Bool_t isPtrPtr = (strstr(aElement->GetTypeName(), 
"**") != 0);
 
 1422                b.ReadVersion(&start, &count, cl);
 
 1424                for (Int_t k = 0; k < narr; ++k) {
 
 1425                   Int_t* counter = (Int_t*) (arr[k]  + eoffset  + compinfo[i]->fMethod );
 
 1427                   (*pstreamer)(b, arr[k]  + ioffset , *counter);
 
 1429                b.CheckByteCount(start, count, aElement->GetFullName());
 
 1435             TFile* file = (TFile*) b.GetParent();
 
 1437             Int_t fileVersion = kMaxInt;
 
 1439                fileVersion = file->GetVersion();
 
 1444             b.ReadVersion(&start, &count, cl);
 
 1445             if (fileVersion > 51508) {
 
 1448                for (Int_t k = 0; k < narr; ++k) {
 
 1450                   Int_t vlen = *((Int_t*) (arr[k]  + eoffset  + compinfo[i]->fMethod ));
 
 1457                   char** pp = (
char**) (arr[k]  + ioffset );
 
 1462                   for (Int_t ndx = 0; ndx < compinfo[i]->fLength; ++ndx) {
 
 1470                         cl->DeleteArray(pp[ndx]);
 
 1503                         pp[ndx] = (
char*) cl->NewArray(vlen);
 
 1505                            Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1512                         pp[ndx] = (
char*) 
new char*[vlen];
 
 1514                            Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1518                         memset(pp[ndx], 0, vlen * 
sizeof(
char*)); 
 
 1522                         b.ReadFastArray(pp[ndx], cl, vlen, 0);
 
 1526                         b.ReadFastArray((
void**) pp[ndx], cl, vlen, kFALSE, 0);
 
 1534                for (Int_t k = 0; k < narr; ++k) {
 
 1536                   Int_t vlen = *((Int_t*) (arr[k]  + eoffset  + compinfo[i]->fMethod ));
 
 1543                   char** pp = (
char**) (arr[k]  + ioffset );
 
 1548                   for (Int_t ndx = 0; ndx < compinfo[i]->fLength; ++ndx) {
 
 1556                         cl->DeleteArray(pp[ndx]);
 
 1589                         pp[ndx] = (
char*) cl->NewArray(vlen);
 
 1591                            Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1598                         pp[ndx] = (
char*) 
new char*[vlen];
 
 1600                            Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1604                         memset(pp[ndx], 0, vlen * 
sizeof(
char*)); 
 
 1609                         for (Int_t v = 0; v < vlen; ++v) {
 
 1611                            cl->Streamer(pp[ndx] + (v * cl->Size()), b);
 
 1617                         char** r = (
char**) pp[ndx];
 
 1619                         for (Int_t v = 0; v < vlen; ++v) {
 
 1621                            r[v] = (
char*) cl->New();
 
 1628                            cl->Streamer(r[v], b);
 
 1634             b.CheckByteCount(start, count, aElement->GetFullName());
 
 1638          case TStreamerInfo::kCacheNew:
 
 1639             ((TBufferFile&)b).PushDataCache( 
new TVirtualArray( aElement->GetClassPointer(), narr ) );
 
 1641          case TStreamerInfo::kCacheDelete:
 
 1642             delete ((TBufferFile&)b).PopDataCache();
 
 1652             if (TStreamerInfo::kCache <= kase && kase < TStreamerInfo::kArtificial) {
 
 1662             if (kase >= TStreamerInfo::kConv)
 
 1663                ans = thisVar->ReadBufferConv(b,arr,compinfo[i],kase,aElement,narr,eoffset);
 
 1664             if (ans==0) 
continue;
 
 1666             if (kase >= TStreamerInfo::kSkip)
 
 1667                ans = thisVar->ReadBufferSkip(b,arr,compinfo[i],kase,aElement,narr,eoffset);
 
 1668             if (ans==0) 
continue;
 
 1670             if (kase >= TStreamerInfo::kArtificial) {
 
 1671                ans = thisVar->ReadBufferArtificial(b,arr,aElement,narr,eoffset);
 
 1673             if (ans==0) 
continue;
 
 1676             Error(
"ReadBuffer",
"The element %s::%s type %d (%s) is not supported yet\n",
 
 1677                   thisVar->GetName(),aElement->GetFullName(),kase,aElement->GetTypeName());
 
 1679             Error(
"ReadBuffer",
"The TStreamerElement for %s %d is missing!\n",
 
 1680                   thisVar->GetName(),i);
 
 1685    if (needIncrement) b.DecrementLevel(thisVar);
 
 1689 template Int_t TStreamerInfo::ReadBufferSkip<char**>(TBuffer &b, 
char** 
const &arr, 
const TCompInfo *compinfo, Int_t kase,
 
 1690                                        TStreamerElement *aElement, Int_t narr,
 
 1692 template Int_t TStreamerInfo::ReadBufferSkip<TVirtualCollectionProxy>(TBuffer &b, 
const TVirtualCollectionProxy &arr, 
const TCompInfo *compinfo, Int_t kase,
 
 1693                                        TStreamerElement *aElement, Int_t narr,
 
 1695 template Int_t TStreamerInfo::ReadBufferSkip<TVirtualArray>(TBuffer &b, 
const TVirtualArray &arr, 
const TCompInfo *compinfo, Int_t kase,
 
 1696                                        TStreamerElement *aElement, Int_t narr,
 
 1699 template Int_t TStreamerInfo::ReadBufferConv<char**>(TBuffer &b, 
char** 
const &arr,  
const TCompInfo *compinfo, Int_t kase,
 
 1700                                        TStreamerElement *aElement, Int_t narr,
 
 1702 template Int_t TStreamerInfo::ReadBufferConv<TVirtualCollectionProxy>(TBuffer &b, 
const TVirtualCollectionProxy &arr,  
const TCompInfo *compinfo, Int_t kase,
 
 1703                                        TStreamerElement *aElement, Int_t narr,
 
 1705 template Int_t TStreamerInfo::ReadBufferConv<TVirtualArray>(TBuffer &b, 
const TVirtualArray &arr, 
const TCompInfo *compinfo, Int_t kase,
 
 1706                                        TStreamerElement *aElement, Int_t narr,
 
 1709 template Int_t TStreamerInfo::ReadBufferArtificial<char**>(TBuffer &b, 
char** 
const &arr,
 
 1710                                              TStreamerElement *aElement, Int_t narr,
 
 1712 template Int_t TStreamerInfo::ReadBufferArtificial<TVirtualCollectionProxy>(TBuffer &b, 
const TVirtualCollectionProxy &arr,
 
 1713                                              TStreamerElement *aElement, Int_t narr,
 
 1715 template Int_t TStreamerInfo::ReadBufferArtificial<TVirtualArray>(TBuffer &b, 
const TVirtualArray &arr,
 
 1716                                              TStreamerElement *aElement, Int_t narr,
 
 1719 template Int_t TStreamerInfo::ReadBuffer<char**>(TBuffer &b, 
char** 
const &arr,
 
 1720                                                  TCompInfo *
const*
const compinfo, Int_t first, Int_t last,
 
 1721                                                  Int_t narr, Int_t eoffset, Int_t arrayMode);
 
 1722 template Int_t TStreamerInfo::ReadBuffer<TVirtualCollectionProxy>(TBuffer &b, 
const TVirtualCollectionProxy &arr,
 
 1723                                                                   TCompInfo *
const*
const compinfo, Int_t first, Int_t last,
 
 1724                                                                   Int_t narr, Int_t eoffset, Int_t arrayMode);
 
 1725 template Int_t TStreamerInfo::ReadBuffer<TVirtualArray>(TBuffer &b, 
const TVirtualArray &arr,
 
 1726                                                         TCompInfo *
const*
const compinfo, Int_t first, Int_t last,
 
 1727                                                         Int_t narr, Int_t eoffset, Int_t arrayMode);
 
 1732 Int_t TStreamerInfo::ReadBufferSTL(TBuffer &b, TVirtualCollectionProxy *cont,
 
 1733                                    Int_t nc, Int_t eoffset, Bool_t v7 )
 
 1735    if (!nc && v7) 
return 0; 
 
 1736    int ret = ReadBuffer(b, *cont,fCompFull,0,fNfulldata,nc,eoffset,1);
 
 1744 Int_t TStreamerInfo::ReadBufferClones(TBuffer &b, TClonesArray *clones,
 
 1745                                       Int_t nc, Int_t first, Int_t eoffset)
 
 1747    char **arr = (
char **)clones->GetObjectRef(0);
 
 1748    return ReadBuffer(b,arr,fCompFull,first==-1?0:first,first==-1?fNfulldata:first+1,nc,eoffset,1);