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); \
263 char* readbuf =
new char[nch];
264 b.ReadFastArray(readbuf,nch);
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); \
544 for(
Int_t k=0; k<narr; ++k) {
545 rawfunc( arr[k],
b );
558 for(
Int_t k=0; k<narr; ++k) {
560 readfunc(arr[k]+eoffset, &obj);
564 for(
Int_t k=0; k<narr; ++k) {
565 readfunc(arr[k]+eoffset, &obj);
605#if defined(_MSC_VER) && (_MSC_VER <= 1200)
613#if defined(_MSC_VER) && (_MSC_VER <= 1200)
626 pidf +=
b.GetPidOffset();
635 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
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)
768 Bool_t needIncrement = !( arrayMode & 2 );
769 arrayMode = arrayMode & (~2);
771 if (needIncrement)
b.IncrementLevel(thisVar);
778 static const int kHaveLoop = 1024;
779 const Int_t typeOffset = arrayMode ? kHaveLoop : 0;
784 Int_t isPreAlloc = 0;
785 for (
Int_t i=first;i<last;i++) {
789 if (needIncrement)
b.SetStreamerElementNumber(aElement,compinfo[i]->fType);
793 if (R__TestUseCache<T>(aElement)) {
794 Int_t bufpos =
b.Length();
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));
805 thisVar->
ReadBuffer(
b, *
b.PeekDataCache(), compinfo, i, i + 1, narr, eoffset, arrayMode);
813 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
814 " %s, bufpos=%d, arr=%p, offset=%d\n",
816 aElement->
ClassName(),
b.Length(),arr[0], ioffset);
821 switch (kase + typeOffset) {
839 b.ReadFloat16(
x,aElement);
844 b.ReadDouble32(
x,aElement);
862 for(
Int_t k=0; k<narr; ++k) {
864 b.ReadFloat16(
x,aElement);
869 for(
Int_t k=0; k<narr; ++k) {
871 b.ReadDouble32(
x,aElement);
891 b.ReadFastArrayFloat16((
Float_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
895 b.ReadFastArrayDouble32((
Double_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
913 for(
Int_t k=0; k<narr; ++k) {
914 b.ReadFastArrayFloat16((
Float_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
919 for(
Int_t k=0; k<narr; ++k) {
920 b.ReadFastArrayDouble32((
Double_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
942 const int imethod = compinfo[i]->
fMethod+eoffset;
946 for(j=0;j<compinfo[i]->
fLength;j++) {
948 f[j] = 0;
if (*
l <=0)
continue;
950 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
957 const int imethod = compinfo[i]->
fMethod+eoffset;
961 for(j=0;j<compinfo[i]->
fLength;j++) {
963 f[j] = 0;
if (*
l <=0)
continue;
965 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
984 const int imethod = compinfo[i]->
fMethod+eoffset;
985 for(
Int_t k=0; k<narr; ++k) {
991 for(j=0;j<compinfo[i]->
fLength;j++) {
993 f[j] = 0;
if (*
l <=0)
continue;
995 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
1001 const int imethod = compinfo[i]->
fMethod+eoffset;
1002 for(
Int_t k=0; k<narr; ++k) {
1008 for(j=0;j<compinfo[i]->
fLength;j++) {
1010 f[j] = 0;
if (*
l <=0)
continue;
1012 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
1024 char **
f = (
char**)(arr[k]+ioffset);
1040 pidf +=
b.GetPidOffset();
1049 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
1078 cle = compinfo[i]->
fClass;
1095 b.ReadFastArray((
void **)(arr[k] + ioffset), newCle ? newCle : cle, compinfo[i]->fLength, isPreAlloc,
1160 if( vers < 9 && newClass && newClass!=oldClass ) {
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() );
1180 newProxy = oldProxy;
1185 void **contp = (
void**)(arr[k]+ioffset);
1187 for(j=0;j<compinfo[i]->
fLength;j++) {
1188 void *cont = contp[j];
1190 contp[j] = cle->
New();
1196 env = newProxy->
Allocate(nobjects,
true);
1197 if (!nobjects && (vers>=7)) {
1202 if (newProxy != oldProxy) {
1209 void *begin = &(startbuf[0]);
1210 void *end = &(endbuf[0]);
1214 b.ApplySequence(*actions, begin, end);
1215 if (begin != &(startbuf[0])) {
1227 if (pstreamer == 0) {
1229 void **contp = (
void**)(arr[k]+ioffset);
1231 for(j=0;j<compinfo[i]->
fLength;j++) {
1232 void *cont = contp[j];
1238 contp[j] = cle->
New();
1264 if( vers < 8 && newClass && newClass!=oldClass ) {
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() );
1273 vClVersion =
b.ReadVersionForMemberWise( valueClass );
1276 if (valueClass == 0) {
1294 newProxy = oldProxy;
1298 int objectSize = cle->
Size();
1299 char *obj = arr[k]+ioffset;
1300 char *end = obj + compinfo[i]->
fLength*objectSize;
1302 for(; obj<end; obj+=objectSize) {
1306 void* env = newProxy->
Allocate(nobjects,
true);
1307 if (!nobjects && (vers>=7)) {
1312 if (newProxy != oldProxy) {
1320 void *begin_iter = &(startbuf[0]);
1321 void *end_iter = &(endbuf[0]);
1325 b.ApplySequence(*actions, begin_iter, end_iter);
1326 if (begin_iter != &(startbuf[0])) {
1342 b.SetBufferOffset(
start);
1343 }
else if (vers==0) {
1344 b.SetBufferOffset(
start);
1347 if (pstreamer == 0) {
1353 b.ReadFastArray((
void*)(arr[k]+ioffset),newCle,compinfo[i]->fLength,(
TMemberStreamer*)0, cle );
1371 DOLOOP {(*pstreamer)(
b,arr[k]+ioffset,0);}
1394 b.ReadFastArray((
void *)(arr[k] + ioffset), newCle ? newCle : cle, compinfo[i]->fLength, pstreamer, cle);
1401 if (!(arrayMode&1)) {
1424 b.SetBufferOffset(
start);
1429 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1443 b.SetBufferOffset(
start);
1446 b.SetBufferOffset(
start);
1450 if (pstreamer == 0) {
1451 Error(
"ReadBuffer",
"Streamer for %s is null\n",aElement->
GetName());
1453 aElement->
ls();
continue;
1483 b.ReadVersion(&
start, &count, cl);
1485 for (
Int_t k = 0; k < narr; ++k) {
1486 Int_t* counter = (
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod );
1488 (*pstreamer)(
b, arr[k] + ioffset , *counter);
1505 b.ReadVersion(&
start, &count, cl);
1506 if (fileVersion > 51508) {
1509 for (
Int_t k = 0; k < narr; ++k) {
1511 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1518 char** pp = (
char**) (arr[k] + ioffset );
1523 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1564 pp[ndx] = (
char*) cl->
NewArray(vlen);
1566 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1573 pp[ndx] = (
char*)
new char*[vlen];
1575 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1579 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1583 b.ReadFastArray(pp[ndx], cl, vlen, 0);
1587 b.ReadFastArray((
void**) pp[ndx], cl, vlen,
kFALSE, 0);
1595 for (
Int_t k = 0; k < narr; ++k) {
1597 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1604 char** pp = (
char**) (arr[k] + ioffset );
1609 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1650 pp[ndx] = (
char*) cl->
NewArray(vlen);
1652 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1659 pp[ndx] = (
char*)
new char*[vlen];
1661 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1665 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1678 char**
r = (
char**) pp[ndx];
1682 r[
v] = (
char*) cl->
New();
1720 ans = thisVar->
ReadBufferConv(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1721 if (ans==0)
continue;
1724 ans = thisVar->
ReadBufferSkip(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
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",
1742 if (needIncrement)
b.DecrementLevel(thisVar);
1777 TCompInfo *
const*
const compinfo,
Int_t first,
Int_t last,
1780 TCompInfo *
const*
const compinfo,
Int_t first,
Int_t last,
1783 TCompInfo *
const*
const compinfo,
Int_t first,
Int_t last,
1792 if (!nc && v7)
return 0;
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short).
double Double32_t
Double 8 bytes in memory, written to disk as a 4 bytes Float_t (32-bits) by default,...
int Int_t
Signed integer 4 bytes (int).
short Version_t
Class version identifier (short).
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char).
char Char_t
Character 1 byte (char).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
bool Bool_t
Boolean (0=false, 1=true) (bool).
short Short_t
Signed Short integer 2 bytes (short).
double Double_t
Double 8 bytes.
long long Long64_t
Portable signed long integer 8 bytes.
unsigned long long ULong64_t
Portable unsigned long integer 8 bytes.
float Float_t
Float 4 bytes (float).
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
#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.
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).
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...
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
const char * GetName() const override
Returns name of object.
TObject ** GetObjectRef() const
friend class TClonesArray
Bool_t TestBit(UInt_t f) const
virtual UInt_t GetUniqueID() const
Return the unique object id.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
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.
TObject()
TObject constructor.
@ 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.
void Streamer(TBuffer &) override
Stream an object of class TRef.
ROOT::TSchemaRule::ReadRawFuncPtr_t GetReadRawFunc()
ROOT::TSchemaRule::ReadFuncPtr_t GetReadFunc()
Describe one element (data member) to be Streamed.
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 and updates fClassObject.
TClass * GetNewClass() const
void ls(Option_t *option="") const override
Print the content of the element.
const char * GetTypeName() const
TClass * IsA() const override
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual void SetTObjectOffset(Int_t tobjoffset)
TClass * fClass
Not Owned.
TMemberStreamer * fStreamer
Not Owned.
TClass * fNewClass
Not Owned.
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.
TStreamerInfo(const TStreamerInfo &)=delete
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
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...
char * GetObjectAt(UInt_t ind) const
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.
virtual TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Int_t version)=0
virtual TClass * GetValueClass() const =0
If the value type is a user-defined class, return a pointer to the TClass representing the value type...
virtual void Commit(void *)=0
Commits pending elements in a staging area (see Allocate() for more information).
virtual DeleteTwoIterators_t GetFunctionDeleteTwoIterators(Bool_t read=kTRUE)=0
static const Int_t fgIteratorArenaSize
The size of a small buffer that can be allocated on the stack to store iterator-specific information.
virtual CreateIterators_t GetFunctionCreateIterators(Bool_t read=kTRUE)=0
Return a pointer to a function that can create an iterator pair, where each iterator points to the be...
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
Allocates space for storing at least n elements.
virtual TStreamerInfoActions::TActionSequence * GetConversionReadMemberWiseActions(TClass *oldClass, Int_t version)=0
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.