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);
294 if (cle == TRef::Class()) {
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)
615 pidf +=
b.GetPidOffset();
624 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
671#if defined(_MSC_VER) && (_MSC_VER <= 1200)
679#if defined(_MSC_VER) && (_MSC_VER <= 1200)
706#if defined(_MSC_VER) && (_MSC_VER <= 1200)
714#if defined(_MSC_VER) && (_MSC_VER <= 1200)
757 Bool_t needIncrement = !( arrayMode & 2 );
758 arrayMode = arrayMode & (~2);
760 if (needIncrement)
b.IncrementLevel(thisVar);
767 static const int kHaveLoop = 1024;
768 const Int_t typeOffset = arrayMode ? kHaveLoop : 0;
773 Int_t isPreAlloc = 0;
778 if (needIncrement)
b.SetStreamerElementNumber(aElement,compinfo[i]->fType);
782 if (R__TestUseCache<T>(aElement)) {
783 Int_t bufpos =
b.Length();
785 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",thisVar->
GetName(),aElement->
GetName());
789 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
790 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
802 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
803 " %s, bufpos=%d, arr=%p, offset=%d\n",
805 aElement->
ClassName(),
b.Length(),arr[0], ioffset);
810 switch (kase + typeOffset) {
828 b.ReadFloat16(
x,aElement);
833 b.ReadDouble32(
x,aElement);
851 for(
Int_t k=0; k<narr; ++k) {
853 b.ReadFloat16(
x,aElement);
858 for(
Int_t k=0; k<narr; ++k) {
860 b.ReadDouble32(
x,aElement);
880 b.ReadFastArrayFloat16((
Float_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
884 b.ReadFastArrayDouble32((
Double_t*)(arr[0]+ioffset),compinfo[i]->fLength,aElement);
902 for(
Int_t k=0; k<narr; ++k) {
903 b.ReadFastArrayFloat16((
Float_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
908 for(
Int_t k=0; k<narr; ++k) {
909 b.ReadFastArrayDouble32((
Double_t*)(arr[k]+ioffset),compinfo[i]->fLength,aElement);
931 const int imethod = compinfo[i]->
fMethod+eoffset;
935 for(j=0;j<compinfo[i]->
fLength;j++) {
937 f[j] = 0;
if (*
l <=0)
continue;
939 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
946 const int imethod = compinfo[i]->
fMethod+eoffset;
950 for(j=0;j<compinfo[i]->
fLength;j++) {
952 f[j] = 0;
if (*
l <=0)
continue;
954 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
973 const int imethod = compinfo[i]->
fMethod+eoffset;
974 for(
Int_t k=0; k<narr; ++k) {
980 for(j=0;j<compinfo[i]->
fLength;j++) {
982 f[j] = 0;
if (*
l <=0)
continue;
984 b.ReadFastArrayFloat16(
f[j],*
l,aElement);
990 const int imethod = compinfo[i]->
fMethod+eoffset;
991 for(
Int_t k=0; k<narr; ++k) {
997 for(j=0;j<compinfo[i]->
fLength;j++) {
999 f[j] = 0;
if (*
l <=0)
continue;
1001 b.ReadFastArrayDouble32(
f[j],*
l,aElement);
1013 char **
f = (
char**)(arr[k]+ioffset);
1026 pidf +=
b.GetPidOffset();
1035 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
1064 cle = compinfo[i]->
fClass;
1081 b.ReadFastArray((
void**)(arr[k]+ioffset),cle,compinfo[i]->fLength,isPreAlloc,pstreamer);
1136 Version_t vers =
b.ReadVersion(&start, &count, cle);
1145 if( vers < 9 && newClass && newClass!=oldClass ) {
1146 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1147 vers,
b.GetParent() ?
b.GetParent()->GetName() :
"memory/socket", oldClass->
GetName(), newClass->
GetName() );
1165 newProxy = oldProxy;
1170 void **contp = (
void**)(arr[k]+ioffset);
1172 for(j=0;j<compinfo[i]->
fLength;j++) {
1173 void *cont = contp[j];
1175 contp[j] = cle->
New();
1181 env = newProxy->
Allocate(nobjects,
true);
1190 if (pstreamer == 0) {
1192 void **contp = (
void**)(arr[k]+ioffset);
1194 for(j=0;j<compinfo[i]->
fLength;j++) {
1195 void *cont = contp[j];
1201 contp[j] = cle->
New();
1218 Version_t vers =
b.ReadVersion(&start, &count, cle);
1227 if( vers < 8 && newClass && newClass!=oldClass ) {
1228 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1229 vers,
b.GetParent() ?
b.GetParent()->GetName() :
"memory/socket", oldClass->
GetName(), newClass->
GetName() );
1236 vClVersion =
b.ReadVersionForMemberWise( valueClass );
1239 if (valueClass == 0) {
1245 b.SetBufferOffset(start+count+
sizeof(
UInt_t));
1257 newProxy = oldProxy;
1261 int objectSize = cle->
Size();
1262 char *obj = arr[k]+ioffset;
1263 char *end = obj + compinfo[i]->
fLength*objectSize;
1265 for(; obj<end; obj+=objectSize) {
1269 void* env = newProxy->
Allocate(nobjects,
true);
1281 if (aElement->
IsBase() && aElement->IsA()!=TStreamerBase::Class()) {
1282 b.SetBufferOffset(start);
1283 }
else if (vers==0) {
1284 b.SetBufferOffset(start);
1287 if (pstreamer == 0) {
1293 b.ReadFastArray((
void*)(arr[k]+ioffset),newCle,compinfo[i]->fLength,(
TMemberStreamer*)0, cle );
1311 DOLOOP {(*pstreamer)(
b,arr[k]+ioffset,0);}
1322 if (
file &&
file->GetVersion() < 30208) {
1334 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1341 if (!(arrayMode&1)) {
1364 b.SetBufferOffset(start);
1369 b.ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1382 if (aElement->
IsBase() && aElement->IsA()!=TStreamerBase::Class()) {
1383 b.SetBufferOffset(start);
1386 b.SetBufferOffset(start);
1390 if (pstreamer == 0) {
1391 Error(
"ReadBuffer",
"Streamer for %s is null\n",aElement->
GetName());
1393 aElement->
ls();
continue;
1423 b.ReadVersion(&start, &count, cl);
1425 for (
Int_t k = 0; k < narr; ++k) {
1426 Int_t* counter = (
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod );
1428 (*pstreamer)(
b, arr[k] + ioffset , *counter);
1430 b.CheckByteCount(start, count, aElement->
GetFullName());
1440 fileVersion =
file->GetVersion();
1445 b.ReadVersion(&start, &count, cl);
1446 if (fileVersion > 51508) {
1449 for (
Int_t k = 0; k < narr; ++k) {
1451 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1458 char** pp = (
char**) (arr[k] + ioffset );
1463 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1504 pp[ndx] = (
char*) cl->
NewArray(vlen);
1506 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1513 pp[ndx] = (
char*)
new char*[vlen];
1515 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1519 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1523 b.ReadFastArray(pp[ndx], cl, vlen, 0);
1527 b.ReadFastArray((
void**) pp[ndx], cl, vlen,
kFALSE, 0);
1535 for (
Int_t k = 0; k < narr; ++k) {
1537 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1544 char** pp = (
char**) (arr[k] + ioffset );
1549 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1590 pp[ndx] = (
char*) cl->
NewArray(vlen);
1592 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1599 pp[ndx] = (
char*)
new char*[vlen];
1601 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1605 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1618 char**
r = (
char**) pp[ndx];
1622 r[
v] = (
char*) cl->
New();
1635 b.CheckByteCount(start, count, aElement->
GetFullName());
1664 ans = thisVar->
ReadBufferConv(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1665 if (ans==0)
continue;
1668 ans = thisVar->
ReadBufferSkip(
b,arr,compinfo[i],kase,aElement,narr,eoffset);
1669 if (ans==0)
continue;
1674 if (ans==0)
continue;
1677 Error(
"ReadBuffer",
"The element %s::%s type %d (%s) is not supported yet\n",
1680 Error(
"ReadBuffer",
"The TStreamerElement for %s %d is missing!\n",
1686 if (needIncrement)
b.DecrementLevel(thisVar);
1690template Int_t TStreamerInfo::ReadBufferSkip<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1700template Int_t TStreamerInfo::ReadBufferConv<char**>(
TBuffer &
b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1710template Int_t TStreamerInfo::ReadBufferArtificial<char**>(
TBuffer &
b,
char**
const &arr,
1720template Int_t TStreamerInfo::ReadBuffer<char**>(
TBuffer &
b,
char**
const &arr,
1736 if (!nc && v7)
return 0;
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.
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
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...