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); \
262 char* readbuf =
new char[nch];
263 b.ReadFastArray(readbuf,nch);
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); \
533 for(
Int_t k=0; k<narr; ++k) {
534 rawfunc( arr[k],
b );
547 for(
Int_t k=0; k<narr; ++k) {
549 readfunc(arr[k]+eoffset, &obj);
553 for(
Int_t k=0; k<narr; ++k) {
554 readfunc(arr[k]+eoffset, &obj);
594#if defined(_MSC_VER) && (_MSC_VER <= 1200)
602#if defined(_MSC_VER) && (_MSC_VER <= 1200)
614 pidf +=
b.GetPidOffset();
623 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
670#if defined(_MSC_VER) && (_MSC_VER <= 1200)
678#if defined(_MSC_VER) && (_MSC_VER <= 1200)
705#if defined(_MSC_VER) && (_MSC_VER <= 1200)
713#if defined(_MSC_VER) && (_MSC_VER <= 1200)
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;
772 Int_t isPreAlloc = 0;
777 if (needIncrement)
b.SetStreamerElementNumber(aElement,compinfo[i]->fType);
781 if (R__TestUseCache<T>(aElement)) {
782 Int_t bufpos =
b.Length();
784 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",thisVar->
GetName(),aElement->
GetName());
788 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
789 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
801 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
802 " %s, bufpos=%d, arr=%p, offset=%d\n",
804 aElement->
ClassName(),
b.Length(),arr[0], ioffset);
809 switch (kase + typeOffset) {
827 b.ReadFloat16(
x,aElement);
832 b.ReadDouble32(
x,aElement);
850 for(
Int_t k=0; k<narr; ++k) {
852 b.ReadFloat16(
x,aElement);
857 for(
Int_t k=0; k<narr; ++k) {
859 b.ReadDouble32(
x,aElement);
879 b.ReadFastArrayFloat16((
Float_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
883 b.ReadFastArrayDouble32((
Double_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
901 for(
Int_t k=0; k<narr; ++k) {
902 b.ReadFastArrayFloat16((
Float_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
907 for(
Int_t k=0; k<narr; ++k) {
908 b.ReadFastArrayDouble32((
Double_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
930 const int imethod = compinfo[i]->
fMethod+eoffset;
934 for(j=0;j<compinfo[i]->
fLength;j++) {
936 f[j] = 0;
if (*
l <=0)
continue;
938 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
945 const int imethod = compinfo[i]->
fMethod+eoffset;
949 for(j=0;j<compinfo[i]->
fLength;j++) {
951 f[j] = 0;
if (*
l <=0)
continue;
953 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
972 const int imethod = compinfo[i]->
fMethod+eoffset;
973 for(
Int_t k=0; k<narr; ++k) {
979 for(j=0;j<compinfo[i]->
fLength;j++) {
981 f[j] = 0;
if (*
l <=0)
continue;
983 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
989 const int imethod = compinfo[i]->
fMethod+eoffset;
990 for(
Int_t k=0; k<narr; ++k) {
996 for(j=0;j<compinfo[i]->
fLength;j++) {
998 f[j] = 0;
if (*
l <=0)
continue;
1000 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
1012 char **
f = (
char**)(arr[k]+ioffset);
1025 pidf +=
b.GetPidOffset();
1034 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
1063 cle = compinfo[i]->
fClass;
1080 b.ReadFastArray((
void**)(arr[k]+ioffset),cle,compinfo[i]->fLength,isPreAlloc,pstreamer);
1135 Version_t vers =
b.ReadVersion(&start, &count, cle);
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() );
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();
1180 env = newProxy->
Allocate(nobjects,
true);
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();
1217 Version_t vers =
b.ReadVersion(&start, &count, cle);
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() );
1235 vClVersion =
b.ReadVersionForMemberWise( valueClass );
1238 if (valueClass == 0) {
1244 b.SetBufferOffset(start+count+
sizeof(
UInt_t));
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) {
1268 void* env = newProxy->
Allocate(nobjects,
true);
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 );
1310 DOLOOP {(*pstreamer)(
b,arr[k]+ioffset,0);}
1321 if (
file &&
file->GetVersion() < 30208) {
1333 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1340 if (!(arrayMode&1)) {
1363 b.SetBufferOffset(start);
1368 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1382 b.SetBufferOffset(start);
1385 b.SetBufferOffset(start);
1389 if (pstreamer == 0) {
1390 Error(
"ReadBuffer",
"Streamer for %s is null\n",aElement->
GetName());
1392 aElement->
ls();
continue;
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());
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) {
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) {
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*));
1617 char**
r = (
char**) pp[ndx];
1621 r[
v] = (
char*) cl->
New();
1634 b.CheckByteCount(start, count, aElement->
GetFullName());
1663 ans = thisVar->
ReadBufferConv(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1664 if (ans==0)
continue;
1667 ans = thisVar->
ReadBufferSkip(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1668 if (ans==0)
continue;
1673 if (ans==0)
continue;
1676 Error(
"ReadBuffer",
"The element %s::%s type %d (%s) is not supported yet\n",
1679 Error(
"ReadBuffer",
"The TStreamerElement for %s %d is missing!\n",
1685 if (needIncrement)
b.DecrementLevel(thisVar);
1689template Int_t TStreamerInfo::ReadBufferSkip<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1699template Int_t TStreamerInfo::ReadBufferConv<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1709template Int_t TStreamerInfo::ReadBufferArtificial<char**>(
TBuffer &
b,
char**
const &arr,
1719template Int_t TStreamerInfo::ReadBuffer<char**>(
TBuffer &
b,
char**
const &arr,
1735 if (!nc && v7)
return 0;
static RooMathCoreReg dummy
unsigned long long ULong64_t
#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 &)
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
Buffer base class used for serializing objects.
TClass instances represent classes, structs and namespaces in the ROOT type system.
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.
Bool_t IsStartingWithTObject() const
Returns true if this class inherits from TObject and if the start of the TObject parts is at the very...
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.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=0) const
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
An array of clone (identical) objects.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetName() const
Returns name of object.
TObject ** GetObjectRef() const
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
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.
ROOT::TSchemaRule::ReadRawFuncPtr_t GetReadRawFunc()
ROOT::TSchemaRule::ReadFuncPtr_t GetReadFunc()
virtual const char * GetFullName() const
Return element name including dimensions, if any Note that this function stores the name into a stati...
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
TClass * GetNewClass() const
const char * GetTypeName() const
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual void SetTObjectOffset(Int_t tobjoffset)
virtual void ls(Option_t *option="") const
Print the content of the element.
TClass * fClass
Not Owned.
TMemberStreamer * fStreamer
Not Owned.
TClass * fNewClass
Not Owned.
Describe Streamer information for one class version.
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...
@ kArtificial
Cache the value in memory than is not part of the object but is accessible via a SchemaRule.
@ kUChar
Equal to TDataType's kchar.
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 * fClass
!pointer to class
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
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
char * GetObjectAt(UInt_t ind) const
virtual TClass * GetValueClass() const =0
virtual void Commit(void *)=0
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
static constexpr double s