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);
385#define ConvCBasicType(name,stream) \
390 switch(compinfo->fNewType) { \
391 case TStreamerInfo::kBool: {Bool_t *x=(Bool_t*)(arr[k]+ioffset); *x = (Bool_t)u; break;} \
392 case TStreamerInfo::kChar: {Char_t *x=(Char_t*)(arr[k]+ioffset); *x = (Char_t)u; break;} \
393 case TStreamerInfo::kShort: {Short_t *x=(Short_t*)(arr[k]+ioffset); *x = (Short_t)u; break;} \
394 case TStreamerInfo::kInt: {Int_t *x=(Int_t*)(arr[k]+ioffset); *x = (Int_t)u; break;} \
395 case TStreamerInfo::kLong: {Long_t *x=(Long_t*)(arr[k]+ioffset); *x = (Long_t)u; break;} \
396 case TStreamerInfo::kLong64: {Long64_t *x=(Long64_t*)(arr[k]+ioffset); *x = (Long64_t)u; break;} \
397 case TStreamerInfo::kFloat: {Float_t *x=(Float_t*)(arr[k]+ioffset); *x = (Float_t)u; break;} \
398 case TStreamerInfo::kFloat16: {Float_t *x=(Float_t*)(arr[k]+ioffset); *x = (Float_t)u; break;} \
399 case TStreamerInfo::kDouble: {Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \
400 case TStreamerInfo::kDouble32:{Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \
401 case TStreamerInfo::kUChar: {UChar_t *x=(UChar_t*)(arr[k]+ioffset); *x = (UChar_t)u; break;} \
402 case TStreamerInfo::kUShort: {UShort_t *x=(UShort_t*)(arr[k]+ioffset); *x = (UShort_t)u; break;} \
403 case TStreamerInfo::kUInt: {UInt_t *x=(UInt_t*)(arr[k]+ioffset); *x = (UInt_t)u; break;} \
404 case TStreamerInfo::kULong: {ULong_t *x=(ULong_t*)(arr[k]+ioffset); *x = (ULong_t)u; break;} \
405 case TStreamerInfo::kULong64: {ULong64_t*x=(ULong64_t*)(arr[k]+ioffset);*x = (ULong64_t)u;break;} \
410#define ConvCBasicArrayTo(newtype) \
412 newtype *f=(newtype*)(arr[k]+ioffset); \
413 for (j=0;j<len;j++) f[j] = (newtype)readbuf[j]; \
417#define ConvCBasicArray(name,ReadArrayFunc) \
419 int j, len = compinfo->fLength; \
420 name* readbuf = new name[len]; \
421 int newtype = compinfo->fNewType%20; \
423 b.ReadArrayFunc(readbuf, len); \
425 case TStreamerInfo::kBool: ConvCBasicArrayTo(Bool_t); \
426 case TStreamerInfo::kChar: ConvCBasicArrayTo(Char_t); \
427 case TStreamerInfo::kShort: ConvCBasicArrayTo(Short_t); \
428 case TStreamerInfo::kInt: ConvCBasicArrayTo(Int_t); \
429 case TStreamerInfo::kLong: ConvCBasicArrayTo(Long_t); \
430 case TStreamerInfo::kLong64: ConvCBasicArrayTo(Long64_t); \
431 case TStreamerInfo::kFloat: ConvCBasicArrayTo(Float_t); \
432 case TStreamerInfo::kFloat16: ConvCBasicArrayTo(Float_t); \
433 case TStreamerInfo::kDouble: ConvCBasicArrayTo(Double_t); \
434 case TStreamerInfo::kDouble32: ConvCBasicArrayTo(Double_t); \
435 case TStreamerInfo::kUChar: ConvCBasicArrayTo(UChar_t); \
436 case TStreamerInfo::kUShort: ConvCBasicArrayTo(UShort_t); \
437 case TStreamerInfo::kUInt: ConvCBasicArrayTo(UInt_t); \
438 case TStreamerInfo::kULong: ConvCBasicArrayTo(ULong_t); \
439 case TStreamerInfo::kULong64: ConvCBasicArrayTo(ULong64_t); \
446#define ConvCBasicPointerToOutOfRange(newtype,ReadArrayFunc) \
448 newtype **f=(newtype**)(arr[k]+ioffset); \
449 for (j=0;j<len;j++) { \
456#define ConvCBasicPointerTo(newtype,ReadArrayFunc) \
458 newtype **f=(newtype**)(arr[k]+ioffset); \
459 for (j=0;j<len;j++) { \
461 f[j] = new newtype[*l]; \
462 newtype *af = f[j]; \
463 b.ReadArrayFunc(readbuf, *l); \
464 for (jj=0;jj<*l;jj++) af[jj] = (newtype)readbuf[jj]; \
469#define ConvCBasicPointer(name,ReadArrayFunc) \
472 int j, jj, len = aElement->GetArrayDim()?aElement->GetArrayLength():1; \
474 int newtype = compinfo->fNewType %20; \
475 Int_t imethod = compinfo->fMethod+eoffset; \
478 Int_t *l = (Int_t*)(arr[k]+imethod); \
479 if (*l>0 && *l < b.BufferSize()) { \
480 readbuf = new name[*l]; \
482 case TStreamerInfo::kBool: ConvCBasicPointerTo(Bool_t,ReadArrayFunc); \
483 case TStreamerInfo::kChar: ConvCBasicPointerTo(Char_t,ReadArrayFunc); \
484 case TStreamerInfo::kShort: ConvCBasicPointerTo(Short_t,ReadArrayFunc); \
485 case TStreamerInfo::kInt: ConvCBasicPointerTo(Int_t,ReadArrayFunc); \
486 case TStreamerInfo::kLong: ConvCBasicPointerTo(Long_t,ReadArrayFunc); \
487 case TStreamerInfo::kLong64: ConvCBasicPointerTo(Long64_t,ReadArrayFunc); \
488 case TStreamerInfo::kFloat: ConvCBasicPointerTo(Float_t,ReadArrayFunc); \
489 case TStreamerInfo::kFloat16: ConvCBasicPointerTo(Float_t,ReadArrayFunc); \
490 case TStreamerInfo::kDouble: ConvCBasicPointerTo(Double_t,ReadArrayFunc); \
491 case TStreamerInfo::kDouble32: ConvCBasicPointerTo(Double_t,ReadArrayFunc); \
492 case TStreamerInfo::kUChar: ConvCBasicPointerTo(UChar_t,ReadArrayFunc); \
493 case TStreamerInfo::kUShort: ConvCBasicPointerTo(UShort_t,ReadArrayFunc); \
494 case TStreamerInfo::kUInt: ConvCBasicPointerTo(UInt_t,ReadArrayFunc); \
495 case TStreamerInfo::kULong: ConvCBasicPointerTo(ULong_t,ReadArrayFunc); \
496 case TStreamerInfo::kULong64: ConvCBasicPointerTo(ULong64_t,ReadArrayFunc); \
501 case TStreamerInfo::kBool: ConvCBasicPointerToOutOfRange(Bool_t,ReadArrayFunc); \
502 case TStreamerInfo::kChar: ConvCBasicPointerToOutOfRange(Char_t,ReadArrayFunc); \
503 case TStreamerInfo::kShort: ConvCBasicPointerToOutOfRange(Short_t,ReadArrayFunc); \
504 case TStreamerInfo::kInt: ConvCBasicPointerToOutOfRange(Int_t,ReadArrayFunc); \
505 case TStreamerInfo::kLong: ConvCBasicPointerToOutOfRange(Long_t,ReadArrayFunc); \
506 case TStreamerInfo::kLong64: ConvCBasicPointerToOutOfRange(Long64_t,ReadArrayFunc); \
507 case TStreamerInfo::kFloat: ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc); \
508 case TStreamerInfo::kFloat16: ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc); \
509 case TStreamerInfo::kDouble: ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \
510 case TStreamerInfo::kDouble32: ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \
511 case TStreamerInfo::kUChar: ConvCBasicPointerToOutOfRange(UChar_t,ReadArrayFunc); \
512 case TStreamerInfo::kUShort: ConvCBasicPointerToOutOfRange(UShort_t,ReadArrayFunc); \
513 case TStreamerInfo::kUInt: ConvCBasicPointerToOutOfRange(UInt_t,ReadArrayFunc); \
514 case TStreamerInfo::kULong: ConvCBasicPointerToOutOfRange(ULong_t,ReadArrayFunc); \
515 case TStreamerInfo::kULong64: ConvCBasicPointerToOutOfRange(ULong64_t,ReadArrayFunc); \
534 for(
Int_t k=0; k<narr; ++k) {
535 rawfunc( arr[k],
b );
548 for(
Int_t k=0; k<narr; ++k) {
550 readfunc(arr[k]+eoffset, &obj);
554 for(
Int_t k=0; k<narr; ++k) {
555 readfunc(arr[k]+eoffset, &obj);
595#if defined(_MSC_VER) && (_MSC_VER <= 1200)
603#if defined(_MSC_VER) && (_MSC_VER <= 1200)
616 pidf +=
b.GetPidOffset();
625 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
672#if defined(_MSC_VER) && (_MSC_VER <= 1200)
680#if defined(_MSC_VER) && (_MSC_VER <= 1200)
707#if defined(_MSC_VER) && (_MSC_VER <= 1200)
715#if defined(_MSC_VER) && (_MSC_VER <= 1200)
758 Bool_t needIncrement = !( arrayMode & 2 );
759 arrayMode = arrayMode & (~2);
761 if (needIncrement)
b.IncrementLevel(thisVar);
768 static const int kHaveLoop = 1024;
769 const Int_t typeOffset = arrayMode ? kHaveLoop : 0;
774 Int_t isPreAlloc = 0;
775 for (
Int_t i=first;i<last;i++) {
779 if (needIncrement)
b.SetStreamerElementNumber(aElement,compinfo[i]->fType);
783 if (R__TestUseCache<T>(aElement)) {
784 Int_t bufpos =
b.Length();
786 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",thisVar->
GetName(),aElement->
GetName());
790 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
791 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
803 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
804 " %s, bufpos=%d, arr=%p, offset=%d\n",
806 aElement->
ClassName(),
b.Length(),arr[0], ioffset);
811 switch (kase + typeOffset) {
829 b.ReadFloat16(
x,aElement);
834 b.ReadDouble32(
x,aElement);
852 for(
Int_t k=0; k<narr; ++k) {
854 b.ReadFloat16(
x,aElement);
859 for(
Int_t k=0; k<narr; ++k) {
861 b.ReadDouble32(
x,aElement);
881 b.ReadFastArrayFloat16((
Float_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
885 b.ReadFastArrayDouble32((
Double_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
903 for(
Int_t k=0; k<narr; ++k) {
904 b.ReadFastArrayFloat16((
Float_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
909 for(
Int_t k=0; k<narr; ++k) {
910 b.ReadFastArrayDouble32((
Double_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
932 const int imethod = compinfo[i]->
fMethod+eoffset;
936 for(j=0;j<compinfo[i]->
fLength;j++) {
938 f[j] = 0;
if (*
l <=0)
continue;
940 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
947 const int imethod = compinfo[i]->
fMethod+eoffset;
951 for(j=0;j<compinfo[i]->
fLength;j++) {
953 f[j] = 0;
if (*
l <=0)
continue;
955 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
974 const int imethod = compinfo[i]->
fMethod+eoffset;
975 for(
Int_t k=0; k<narr; ++k) {
981 for(j=0;j<compinfo[i]->
fLength;j++) {
983 f[j] = 0;
if (*
l <=0)
continue;
985 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
991 const int imethod = compinfo[i]->
fMethod+eoffset;
992 for(
Int_t k=0; k<narr; ++k) {
998 for(j=0;j<compinfo[i]->
fLength;j++) {
1000 f[j] = 0;
if (*
l <=0)
continue;
1002 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
1014 char **
f = (
char**)(arr[k]+ioffset);
1030 pidf +=
b.GetPidOffset();
1039 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
1068 cle = compinfo[i]->
fClass;
1085 b.ReadFastArray((
void**)(arr[k]+ioffset),cle,compinfo[i]->fLength,isPreAlloc,pstreamer);
1140 Version_t vers =
b.ReadVersion(&start, &count, cle);
1149 if( vers < 9 && newClass && newClass!=oldClass ) {
1150 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1151 vers,
b.GetParent() ?
b.GetParent()->GetName() :
"memory/socket", oldClass->
GetName(), newClass->
GetName() );
1169 newProxy = oldProxy;
1174 void **contp = (
void**)(arr[k]+ioffset);
1176 for(j=0;j<compinfo[i]->
fLength;j++) {
1177 void *cont = contp[j];
1179 contp[j] = cle->
New();
1185 env = newProxy->
Allocate(nobjects,
true);
1194 if (pstreamer == 0) {
1196 void **contp = (
void**)(arr[k]+ioffset);
1198 for(j=0;j<compinfo[i]->
fLength;j++) {
1199 void *cont = contp[j];
1205 contp[j] = cle->
New();
1222 Version_t vers =
b.ReadVersion(&start, &count, cle);
1231 if( vers < 8 && newClass && newClass!=oldClass ) {
1232 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1233 vers,
b.GetParent() ?
b.GetParent()->GetName() :
"memory/socket", oldClass->
GetName(), newClass->
GetName() );
1240 vClVersion =
b.ReadVersionForMemberWise( valueClass );
1243 if (valueClass == 0) {
1249 b.SetBufferOffset(start+count+
sizeof(
UInt_t));
1261 newProxy = oldProxy;
1265 int objectSize = cle->
Size();
1266 char *obj = arr[k]+ioffset;
1267 char *end = obj + compinfo[i]->
fLength*objectSize;
1269 for(; obj<end; obj+=objectSize) {
1273 void* env = newProxy->
Allocate(nobjects,
true);
1286 b.SetBufferOffset(start);
1287 }
else if (vers==0) {
1288 b.SetBufferOffset(start);
1291 if (pstreamer == 0) {
1297 b.ReadFastArray((
void*)(arr[k]+ioffset),newCle,compinfo[i]->fLength,(
TMemberStreamer*)0, cle );
1315 DOLOOP {(*pstreamer)(
b,arr[k]+ioffset,0);}
1338 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1345 if (!(arrayMode&1)) {
1368 b.SetBufferOffset(start);
1373 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1387 b.SetBufferOffset(start);
1390 b.SetBufferOffset(start);
1394 if (pstreamer == 0) {
1395 Error(
"ReadBuffer",
"Streamer for %s is null\n",aElement->
GetName());
1397 aElement->
ls();
continue;
1427 b.ReadVersion(&start, &count, cl);
1429 for (
Int_t k = 0; k < narr; ++k) {
1430 Int_t* counter = (
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod );
1432 (*pstreamer)(
b, arr[k] + ioffset , *counter);
1434 b.CheckByteCount(start, count, aElement->
GetFullName());
1449 b.ReadVersion(&start, &count, cl);
1450 if (fileVersion > 51508) {
1453 for (
Int_t k = 0; k < narr; ++k) {
1455 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1462 char** pp = (
char**) (arr[k] + ioffset );
1467 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1508 pp[ndx] = (
char*) cl->
NewArray(vlen);
1510 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1517 pp[ndx] = (
char*)
new char*[vlen];
1519 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1523 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1527 b.ReadFastArray(pp[ndx], cl, vlen, 0);
1531 b.ReadFastArray((
void**) pp[ndx], cl, vlen,
kFALSE, 0);
1539 for (
Int_t k = 0; k < narr; ++k) {
1541 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1548 char** pp = (
char**) (arr[k] + ioffset );
1553 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1594 pp[ndx] = (
char*) cl->
NewArray(vlen);
1596 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1603 pp[ndx] = (
char*)
new char*[vlen];
1605 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1609 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1622 char**
r = (
char**) pp[ndx];
1626 r[
v] = (
char*) cl->
New();
1639 b.CheckByteCount(start, count, aElement->
GetFullName());
1668 ans = thisVar->
ReadBufferConv(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1669 if (ans==0)
continue;
1672 ans = thisVar->
ReadBufferSkip(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1673 if (ans==0)
continue;
1678 if (ans==0)
continue;
1681 Error(
"ReadBuffer",
"The element %s::%s type %d (%s) is not supported yet\n",
1684 Error(
"ReadBuffer",
"The TStreamerElement for %s %d is missing!\n",
1690 if (needIncrement)
b.DecrementLevel(thisVar);
1694template Int_t TStreamerInfo::ReadBufferSkip<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1704template Int_t TStreamerInfo::ReadBufferConv<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1714template Int_t TStreamerInfo::ReadBufferArtificial<char**>(
TBuffer &
b,
char**
const &arr,
1724template Int_t TStreamerInfo::ReadBuffer<char**>(
TBuffer &
b,
char**
const &arr,
1725 TCompInfo *
const*
const compinfo,
Int_t first,
Int_t last,
1728 TCompInfo *
const*
const compinfo,
Int_t first,
Int_t last,
1731 TCompInfo *
const*
const compinfo,
Int_t first,
Int_t last,
1740 if (!nc && v7)
return 0;
unsigned long long ULong64_t
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 &)
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 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 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.
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.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
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()
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
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...
@ 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
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 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 void * Allocate(UInt_t n, Bool_t forceDelete)=0
Allocates space for storing at least n elements.
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...