53#define DOLOOP for(Int_t k=0; k<narr; ++k) 
   55#define ReadBasicTypeElem(name,index)           \ 
   57      name *x=(name*)(arr[index]+ioffset);      \ 
 
   61#define ReadBasicType(name)                     \ 
   63      ReadBasicTypeElem(name,0);                \ 
 
   66#define ReadBasicTypeLoop(name)                                \ 
   68      for(Int_t k=0; k<narr; ++k) ReadBasicTypeElem(name,k);   \ 
 
   71#define ReadBasicArrayElem(name,index)          \ 
   73      name *x=(name*)(arr[index]+ioffset);      \ 
   74      b.ReadFastArray(x,compinfo[i]->fLength);            \ 
 
   77#define ReadBasicArray(name)                     \ 
   79      ReadBasicArrayElem(name,0);                \ 
 
   82#define ReadBasicArrayLoop(name)                               \ 
   84      for(Int_t k=0; k<narr; ++k) ReadBasicArrayElem(name,k)   \ 
 
   87#define ReadBasicPointerElem(name,index)        \ 
   91      Int_t *l = (Int_t*)(arr[index]+imethod);  \ 
   92      if (*l < 0 || *l > b.BufferSize()) continue;     \ 
   93      name **f = (name**)(arr[index]+ioffset);  \ 
   95      if (isArray) for(j=0;j<compinfo[i]->fLength;j++) {  \ 
   97         f[j] = 0; if (*l <=0) continue;        \ 
   98         f[j] = new name[*l];                   \ 
   99         b.ReadFastArray(f[j],*l);              \ 
  101      else for(j=0;j<compinfo[i]->fLength;j++) {  \ 
 
  107#define ReadBasicPointer(name)                  \ 
  109      const int imethod = compinfo[i]->fMethod+eoffset;   \ 
  110      ReadBasicPointerElem(name,0);             \ 
 
  113#define ReadBasicPointerLoop(name)              \ 
  115      int imethod = compinfo[i]->fMethod+eoffset;         \ 
  116      for(int k=0; k<narr; ++k) {               \ 
  117         ReadBasicPointerElem(name,k);          \ 
 
  121#define SkipCBasicType(name)                    \ 
  124      DOLOOP{ b >> dummy; }                     \ 
 
  128#define SkipCFloat16(name)                       \ 
  131      DOLOOP { b.ReadFloat16(&dummy,aElement); } \ 
 
  135#define SkipCDouble32(name)                      \ 
  138      DOLOOP { b.ReadDouble32(&dummy,aElement); }\ 
 
  142#define SkipCBasicArray(name,ReadArrayFunc)              \ 
  144      name* readbuf = new name[compinfo->fLength];              \ 
  146          b.ReadArrayFunc(readbuf, compinfo->fLength);          \ 
 
  152#define SkipCBasicPointer(name,ReadArrayFunc)                             \ 
  154      Int_t addCounter = -111;                                            \ 
  155      if ((imethod>0) && (compinfo->fMethod>0)) addCounter = -1;                 \ 
  156      if((addCounter<-1) && (aElement!=0) && (aElement->IsA()==TStreamerBasicPointer::Class())) { \ 
  157         TStreamerElement* elemCounter = (TStreamerElement*) thisVar->GetElements()->FindObject(((TStreamerBasicPointer*)aElement)->GetCountName()); \ 
  158         if (elemCounter) addCounter = elemCounter->GetTObjectOffset();   \ 
  160      if (addCounter>=-1) {                                               \ 
  161         int len = aElement->GetArrayDim()?aElement->GetArrayLength():1;  \ 
  165            char *arr_k = arr[k];                                         \ 
  166            Int_t *l = (addCounter==-1 && arr_k) ? (Int_t*)(arr_k+imethod) : &addCounter;  \ 
  168               name* readbuf = new name[*l];                              \ 
  169               for (int j=0;j<len;j++)                                    \ 
  170                  b.ReadArrayFunc(readbuf, *l);                           \ 
 
  395#define ConvCBasicType(name,stream)                                       \ 
  400         switch(compinfo->fNewType) {                                            \ 
  401            case TStreamerInfo::kBool:    {Bool_t   *x=(Bool_t*)(arr[k]+ioffset);   *x = (Bool_t)u;   break;} \ 
  402            case TStreamerInfo::kChar:    {Char_t   *x=(Char_t*)(arr[k]+ioffset);   *x = (Char_t)u;   break;} \ 
  403            case TStreamerInfo::kShort:   {Short_t  *x=(Short_t*)(arr[k]+ioffset);  *x = (Short_t)u;  break;} \ 
  404            case TStreamerInfo::kInt:     {Int_t    *x=(Int_t*)(arr[k]+ioffset);    *x = (Int_t)u;    break;} \ 
  405            case TStreamerInfo::kLong:    {Long_t   *x=(Long_t*)(arr[k]+ioffset);   *x = (Long_t)u;   break;} \ 
  406            case TStreamerInfo::kLong64:  {Long64_t *x=(Long64_t*)(arr[k]+ioffset); *x = (Long64_t)u; break;} \ 
  407            case TStreamerInfo::kFloat:   {Float_t  *x=(Float_t*)(arr[k]+ioffset);  *x = (Float_t)u;  break;} \ 
  408            case TStreamerInfo::kFloat16: {Float_t  *x=(Float_t*)(arr[k]+ioffset);  *x = (Float_t)u;  break;} \ 
  409            case TStreamerInfo::kDouble:  {Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \ 
  410            case TStreamerInfo::kDouble32:{Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \ 
  411            case TStreamerInfo::kUChar:   {UChar_t  *x=(UChar_t*)(arr[k]+ioffset);  *x = (UChar_t)u;  break;} \ 
  412            case TStreamerInfo::kUShort:  {UShort_t *x=(UShort_t*)(arr[k]+ioffset); *x = (UShort_t)u; break;} \ 
  413            case TStreamerInfo::kUInt:    {UInt_t   *x=(UInt_t*)(arr[k]+ioffset);   *x = (UInt_t)u;   break;} \ 
  414            case TStreamerInfo::kULong:   {ULong_t  *x=(ULong_t*)(arr[k]+ioffset);  *x = (ULong_t)u;  break;} \ 
  415            case TStreamerInfo::kULong64: {ULong64_t*x=(ULong64_t*)(arr[k]+ioffset);*x = (ULong64_t)u;break;} \ 
 
  420#define ConvCBasicArrayTo(newtype)                                        \ 
  422      newtype *f=(newtype*)(arr[k]+ioffset);                              \ 
  423      for (j=0;j<len;j++) f[j] = (newtype)readbuf[j];                     \ 
 
  427#define ConvCBasicArray(name,ReadArrayFunc)                               \ 
  429      int j, len = compinfo->fLength;                                            \ 
  430      name* readbuf = new name[len];                                      \ 
  431      int newtype = compinfo->fNewType%20;                                       \ 
  433          b.ReadArrayFunc(readbuf, len);                                  \ 
  435             case TStreamerInfo::kBool:     ConvCBasicArrayTo(Bool_t);    \ 
  436             case TStreamerInfo::kChar:     ConvCBasicArrayTo(Char_t);    \ 
  437             case TStreamerInfo::kShort:    ConvCBasicArrayTo(Short_t);   \ 
  438             case TStreamerInfo::kInt:      ConvCBasicArrayTo(Int_t);     \ 
  439             case TStreamerInfo::kLong:     ConvCBasicArrayTo(Long_t);    \ 
  440             case TStreamerInfo::kLong64:   ConvCBasicArrayTo(Long64_t);  \ 
  441             case TStreamerInfo::kFloat:    ConvCBasicArrayTo(Float_t);   \ 
  442             case TStreamerInfo::kFloat16:  ConvCBasicArrayTo(Float_t);   \ 
  443             case TStreamerInfo::kDouble:   ConvCBasicArrayTo(Double_t);  \ 
  444             case TStreamerInfo::kDouble32: ConvCBasicArrayTo(Double_t);  \ 
  445             case TStreamerInfo::kUChar:    ConvCBasicArrayTo(UChar_t);   \ 
  446             case TStreamerInfo::kUShort:   ConvCBasicArrayTo(UShort_t);  \ 
  447             case TStreamerInfo::kUInt:     ConvCBasicArrayTo(UInt_t);    \ 
  448             case TStreamerInfo::kULong:    ConvCBasicArrayTo(ULong_t);   \ 
  449             case TStreamerInfo::kULong64:  ConvCBasicArrayTo(ULong64_t); \ 
 
  456#define ConvCBasicPointerToOutOfRange(newtype,ReadArrayFunc)              \ 
  458     newtype **f=(newtype**)(arr[k]+ioffset);                             \ 
  459     for (j=0;j<len;j++) {                                                \ 
 
  466#define ConvCBasicPointerTo(newtype,ReadArrayFunc)                        \ 
  468     newtype **f=(newtype**)(arr[k]+ioffset);                             \ 
  469     for (j=0;j<len;j++) {                                                \ 
  471       f[j] = new newtype[*l];                                            \ 
  472       newtype *af = f[j];                                                \ 
  473       b.ReadArrayFunc(readbuf, *l);                                      \ 
  474       for (jj=0;jj<*l;jj++) af[jj] = (newtype)readbuf[jj];               \ 
 
  479#define ConvCBasicPointer(name,ReadArrayFunc)                                           \ 
  482      int j, jj, len = aElement->GetArrayDim()?aElement->GetArrayLength():1; \ 
  484      int newtype = compinfo->fNewType %20;                                      \ 
  485      Int_t imethod = compinfo->fMethod+eoffset;                                 \ 
  488         Int_t *l = (Int_t*)(arr[k]+imethod);                             \ 
  489         if (*l>0 && *l < b.BufferSize()) {                               \ 
  490            readbuf = new name[*l];                                       \ 
  492               case TStreamerInfo::kBool:     ConvCBasicPointerTo(Bool_t,ReadArrayFunc);   \ 
  493               case TStreamerInfo::kChar:     ConvCBasicPointerTo(Char_t,ReadArrayFunc);   \ 
  494               case TStreamerInfo::kShort:    ConvCBasicPointerTo(Short_t,ReadArrayFunc);  \ 
  495               case TStreamerInfo::kInt:      ConvCBasicPointerTo(Int_t,ReadArrayFunc);    \ 
  496               case TStreamerInfo::kLong:     ConvCBasicPointerTo(Long_t,ReadArrayFunc);   \ 
  497               case TStreamerInfo::kLong64:   ConvCBasicPointerTo(Long64_t,ReadArrayFunc); \ 
  498               case TStreamerInfo::kFloat:    ConvCBasicPointerTo(Float_t,ReadArrayFunc);  \ 
  499               case TStreamerInfo::kFloat16:  ConvCBasicPointerTo(Float_t,ReadArrayFunc);  \ 
  500               case TStreamerInfo::kDouble:   ConvCBasicPointerTo(Double_t,ReadArrayFunc); \ 
  501               case TStreamerInfo::kDouble32: ConvCBasicPointerTo(Double_t,ReadArrayFunc); \ 
  502               case TStreamerInfo::kUChar:    ConvCBasicPointerTo(UChar_t,ReadArrayFunc);  \ 
  503               case TStreamerInfo::kUShort:   ConvCBasicPointerTo(UShort_t,ReadArrayFunc); \ 
  504               case TStreamerInfo::kUInt:     ConvCBasicPointerTo(UInt_t,ReadArrayFunc);   \ 
  505               case TStreamerInfo::kULong:    ConvCBasicPointerTo(ULong_t,ReadArrayFunc);  \ 
  506               case TStreamerInfo::kULong64:  ConvCBasicPointerTo(ULong64_t,ReadArrayFunc); \ 
  511               case TStreamerInfo::kBool:     ConvCBasicPointerToOutOfRange(Bool_t,ReadArrayFunc);   \ 
  512               case TStreamerInfo::kChar:     ConvCBasicPointerToOutOfRange(Char_t,ReadArrayFunc);   \ 
  513               case TStreamerInfo::kShort:    ConvCBasicPointerToOutOfRange(Short_t,ReadArrayFunc);  \ 
  514               case TStreamerInfo::kInt:      ConvCBasicPointerToOutOfRange(Int_t,ReadArrayFunc);    \ 
  515               case TStreamerInfo::kLong:     ConvCBasicPointerToOutOfRange(Long_t,ReadArrayFunc);   \ 
  516               case TStreamerInfo::kLong64:   ConvCBasicPointerToOutOfRange(Long64_t,ReadArrayFunc); \ 
  517               case TStreamerInfo::kFloat:    ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc);  \ 
  518               case TStreamerInfo::kFloat16:  ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc);  \ 
  519               case TStreamerInfo::kDouble:   ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \ 
  520               case TStreamerInfo::kDouble32: ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \ 
  521               case TStreamerInfo::kUChar:    ConvCBasicPointerToOutOfRange(UChar_t,ReadArrayFunc);  \ 
  522               case TStreamerInfo::kUShort:   ConvCBasicPointerToOutOfRange(UShort_t,ReadArrayFunc); \ 
  523               case TStreamerInfo::kUInt:     ConvCBasicPointerToOutOfRange(UInt_t,ReadArrayFunc);   \ 
  524               case TStreamerInfo::kULong:    ConvCBasicPointerToOutOfRange(ULong_t,ReadArrayFunc);  \ 
  525               case TStreamerInfo::kULong64:  ConvCBasicPointerToOutOfRange(ULong64_t,ReadArrayFunc); \ 
 
  605#if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  613#if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  626               pidf += 
b.GetPidOffset();
 
  682#if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  690#if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  717#if defined(_MSC_VER) && (_MSC_VER <= 1200) 
  725#if defined(_MSC_VER) && (_MSC_VER <= 1200) 
 
  785   for (
Int_t i=first;i<last;i++) {
 
  795         if (
b.PeekDataCache() == 0) {
 
  796            Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",
thisVar->GetName(),
aElement->GetName());
 
  800               printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d," 
  801                      " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
 
  803                      arr[0], 
eoffset, 
b.PeekDataCache()->GetObjectAt(0));
 
  813         printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d," 
  814                " %s, bufpos=%d, arr=%p, offset=%d\n",
 
  948               f[
j] = 0; 
if (*
l <=0) 
continue;
 
  963               f[
j] = 0; 
if (*
l <=0) 
continue;
 
  993                  f[
j] = 0; 
if (*
l <=0) 
continue;
 
 1010                  f[
j] = 0; 
if (*
l <=0) 
continue;
 
 1040                  pidf += 
b.GetPidOffset();
 
 1161                     Error( 
"ReadBuffer", 
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
 
 1162                           vers, 
b.GetParent() ? 
b.GetParent()->GetName() : 
"memory/socket", 
oldClass->GetName(), 
newClass->GetName() );
 
 1168                     vClVersion = 
b.ReadVersionForMemberWise( 
cle->GetCollectionProxy()->GetValueClass() );
 
 1210                              void *end = &(
endbuf[0]);
 
 1214                              b.ApplySequence(*
actions, begin, end);
 
 1217                                 newProxy->GetFunctionDeleteTwoIterators()(begin,end);
 
 1224                  b.CheckByteCount(start,count,
aElement->GetFullName());
 
 1247               b.CheckByteCount(start,count,
aElement->GetFullName());
 
 1265                     Error( 
"ReadBuffer", 
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
 
 1266                           vers, 
b.GetParent() ? 
b.GetParent()->GetName() : 
"memory/socket", 
oldClass->GetName(), 
newClass->GetName() );
 
 1282                     b.SetBufferOffset(start+count+
sizeof(
UInt_t));
 
 1335                  b.CheckByteCount(start,count,
aElement->GetTypeName());
 
 1342                     b.SetBufferOffset(start);  
 
 1343                  } 
else if (
vers==0) {
 
 1344                     b.SetBufferOffset(start);  
 
 1358               b.CheckByteCount(start,count,
aElement->GetTypeName());
 
 1424                  b.SetBufferOffset(start);
 
 1431            b.CheckByteCount(start,count,
aElement->GetFullName());
 
 1443                  b.SetBufferOffset(start);  
 
 1446                  b.SetBufferOffset(start);
 
 1451               Error(
"ReadBuffer",
"Streamer for %s is null\n",
aElement->GetName());
 
 1458            b.CheckByteCount(start,count,
aElement->GetFullName());
 
 1483               b.ReadVersion(&start, &count, cl);
 
 1490               b.CheckByteCount(start, count, 
aElement->GetFullName());
 
 1505            b.ReadVersion(&start, &count, cl);
 
 1566                           Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1573                        pp[
ndx] = (
char*) 
new char*[
vlen];
 
 1575                           Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1583                        b.ReadFastArray(pp[
ndx], cl, 
vlen, 0);
 
 1652                           Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1659                        pp[
ndx] = (
char*) 
new char*[
vlen];
 
 1661                           Error(
"ReadBuffer", 
"Memory allocation failed!\n");
 
 1678                        char** 
r = (
char**) pp[
ndx];
 
 1682                           r[
v] = (
char*) cl->
New();
 
 1695            b.CheckByteCount(start, count, 
aElement->GetFullName());
 
 1721            if (
ans==0) 
continue;
 
 1725            if (
ans==0) 
continue;
 
 1730            if (
ans==0) 
continue;
 
 1733            Error(
"ReadBuffer",
"The element %s::%s type %d (%s) is not supported yet\n",
 
 1736            Error(
"ReadBuffer",
"The TStreamerElement for %s %d is missing!\n",
 
 
 1766template Int_t TStreamerInfo::ReadBufferArtificial<char**>(
TBuffer &
b, 
char** 
const &
arr,
 
 1776template Int_t TStreamerInfo::ReadBuffer<char**>(
TBuffer &
b, 
char** 
const &
arr,
 
 1792   if (!nc && 
v7) 
return 0; 
 
 
 1804   char **
arr = (
char **)
clones->GetObjectRef(0);
 
 
unsigned long long ULong64_t
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
#define ReadBasicArray(name)
#define ConvCBasicPointer(name, ReadArrayFunc)
#define SkipCBasicPointer(name, ReadArrayFunc)
#define ReadBasicType(name)
#define ReadBasicPointerLoop(name)
static TStreamerElement *& CurrentElement()
#define ReadBasicArrayLoop(name)
#define SkipCFloat16(name)
#define ReadBasicTypeLoop(name)
#define SkipCBasicArray(name, ReadArrayFunc)
#define ConvCBasicArray(name, ReadArrayFunc)
#define SkipCDouble32(name)
#define ConvCBasicType(name, stream)
#define ReadBasicPointer(name)
#define SkipCBasicType(name)
void(* ReadFuncPtr_t)(char *, TVirtualObject *)
void(* ReadRawFuncPtr_t)(char *, TBuffer &)
Buffer base class used for serializing objects.
TClass instances represent classes, structs and namespaces in the ROOT type system.
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
Int_t Size() const
Return size of object of this class.
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
An array of clone (identical) objects.
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
Mother of all ROOT objects.
virtual UInt_t GetUniqueID() const
Return the unique object id.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
@ kIsReferenced
if object is referenced by a TRef or TRefArray
A TProcessID identifies a ROOT job in a unique way in time and space.
void PutObjectWithID(TObject *obj, UInt_t uid=0)
stores the object at the uid th slot in the table of objects The object uniqued is set as well as its...
Persistent Reference link to a TObject A TRef is a lightweight object pointing to any TObject.
Describe one element (data member) to be Streamed.
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
Describes a persistent version of a class.
Int_t ReadBufferSTL(TBuffer &b, TVirtualCollectionProxy *cont, Int_t nc, Int_t eoffset, Bool_t v7=kTRUE)
The STL vector/list is deserialized from the buffer b.
Int_t fNfulldata
!number of elements
TCompInfo ** fCompFull
![fElements->GetEntries()]
Int_t ReadBuffer(TBuffer &b, const T &arrptr, TCompInfo *const *const compinfo, Int_t first, Int_t last, Int_t narr=1, Int_t eoffset=0, Int_t mode=0)
Deserialize information from buffer b into object at pointer if (arrayMode & 1) ptr is a pointer to a...
Int_t ReadBufferConv(TBuffer &b, const T &arrptr, const TCompInfo *compinfo, Int_t kase, TStreamerElement *aElement, Int_t narr, Int_t eoffset)
Convert elements of a TClonesArray.
Int_t ReadBufferClones(TBuffer &b, TClonesArray *clones, Int_t nc, Int_t first, Int_t eoffset)
Read for TClonesArray.
TClass * IsA() const override
TClass * fClass
!pointer to class
void Streamer(TBuffer &) override
Stream an object of class TStreamerInfo.
static TStreamerElement * GetCurrentElement()
static function returning a pointer to the current TStreamerElement fgElement points to the current T...
Int_t ReadBufferArtificial(TBuffer &b, const T &arrptr, TStreamerElement *aElement, Int_t narr, Int_t eoffset)
Handle Artificial StreamerElement.
Int_t ReadBufferSkip(TBuffer &b, const T &arrptr, const TCompInfo *compinfo, Int_t kase, TStreamerElement *aElement, Int_t narr, Int_t eoffset)
Skip an element.
Version_t fOldVersion
! Version of the TStreamerInfo object read from the file
virtual void Streamer(TBuffer &)
Stream a string object.
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
RAII helper class that ensures that PushProxy() / PopProxy() are called when entering / leaving a C++...
Defines a common interface to inspect/change the contents of an object that represents a collection.
static const Int_t fgIteratorArenaSize
The size of a small buffer that can be allocated on the stack to store iterator-specific information.
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
@ kUChar
Equal to TDataType's kchar.