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,
1151 Version_t vers =
b.ReadVersion(&start, &count, cle);
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();
1255 Version_t vers =
b.ReadVersion(&start, &count, cle);
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) {
1282 b.SetBufferOffset(start+count+
sizeof(
UInt_t));
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);
1490 b.CheckByteCount(start, count, aElement->
GetFullName());
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();
1695 b.CheckByteCount(start, count, aElement->
GetFullName());
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);
1746template Int_t TStreamerInfo::ReadBufferSkip<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1756template Int_t TStreamerInfo::ReadBufferConv<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1766template Int_t TStreamerInfo::ReadBufferArtificial<char**>(
TBuffer &
b,
char**
const &arr,
1776template Int_t TStreamerInfo::ReadBuffer<char**>(
TBuffer &
b,
char**
const &arr,
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;
bool Bool_t
Boolean (0=false, 1=true) (bool)
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short)
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 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.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
float Float_t
Float 4 bytes (float)
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.
#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
Int_t gDebug
Global variable setting the debug level. Set to 0 to disable, increase it in steps of 1 to increase 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 &)
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...
An array of clone (identical) objects.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
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.
TObject ** GetObjectRef() const
Mother of all ROOT objects.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
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.
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.
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...
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.