52 #define DOLOOP for(Int_t k=0; k<narr; ++k)
54 #define ReadBasicTypeElem(name,index) \
56 name *x=(name*)(arr[index]+ioffset); \
60 #define ReadBasicType(name) \
62 ReadBasicTypeElem(name,0); \
65 #define ReadBasicTypeLoop(name) \
67 for(Int_t k=0; k<narr; ++k) ReadBasicTypeElem(name,k); \
70 #define ReadBasicArrayElem(name,index) \
72 name *x=(name*)(arr[index]+ioffset); \
73 b.ReadFastArray(x,compinfo[i]->fLength); \
76 #define ReadBasicArray(name) \
78 ReadBasicArrayElem(name,0); \
81 #define ReadBasicArrayLoop(name) \
83 for(Int_t k=0; k<narr; ++k) ReadBasicArrayElem(name,k) \
86 #define ReadBasicPointerElem(name,index) \
90 Int_t *l = (Int_t*)(arr[index]+imethod); \
91 if (*l < 0 || *l > b.BufferSize()) continue; \
92 name **f = (name**)(arr[index]+ioffset); \
94 if (isArray) for(j=0;j<compinfo[i]->fLength;j++) { \
96 f[j] = 0; if (*l <=0) continue; \
97 f[j] = new name[*l]; \
98 b.ReadFastArray(f[j],*l); \
100 else for(j=0;j<compinfo[i]->fLength;j++) { \
106 #define ReadBasicPointer(name) \
108 const int imethod = compinfo[i]->fMethod+eoffset; \
109 ReadBasicPointerElem(name,0); \
112 #define ReadBasicPointerLoop(name) \
114 int imethod = compinfo[i]->fMethod+eoffset; \
115 for(int k=0; k<narr; ++k) { \
116 ReadBasicPointerElem(name,k); \
120 #define SkipCBasicType(name) \
123 DOLOOP{ b >> dummy; } \
127 #define SkipCFloat16(name) \
130 DOLOOP { b.ReadFloat16(&dummy,aElement); } \
134 #define SkipCDouble32(name) \
137 DOLOOP { b.ReadDouble32(&dummy,aElement); }\
141 #define SkipCBasicArray(name,ReadArrayFunc) \
143 name* readbuf = new name[compinfo->fLength]; \
145 b.ReadArrayFunc(readbuf, compinfo->fLength); \
151 #define SkipCBasicPointer(name,ReadArrayFunc) \
153 Int_t addCounter = -111; \
154 if ((imethod>0) && (compinfo->fMethod>0)) addCounter = -1; \
155 if((addCounter<-1) && (aElement!=0) && (aElement->IsA()==TStreamerBasicPointer::Class())) { \
156 TStreamerElement* elemCounter = (TStreamerElement*) thisVar->GetElements()->FindObject(((TStreamerBasicPointer*)aElement)->GetCountName()); \
157 if (elemCounter) addCounter = elemCounter->GetTObjectOffset(); \
159 if (addCounter>=-1) { \
160 int len = aElement->GetArrayDim()?aElement->GetArrayLength():1; \
164 char *arr_k = arr[k]; \
165 Int_t *l = (addCounter==-1 && arr_k) ? (Int_t*)(arr_k+imethod) : &addCounter; \
167 name* readbuf = new name[*l]; \
168 for (int j=0;j<len;j++) \
169 b.ReadArrayFunc(readbuf, *l); \
262 char* readbuf =
new char[nch];
295 DOLOOP{ refjunk.Streamer(b);}
384 #define ConvCBasicType(name,stream) \
389 switch(compinfo->fNewType) { \
390 case TStreamerInfo::kBool: {Bool_t *x=(Bool_t*)(arr[k]+ioffset); *x = (Bool_t)u; break;} \
391 case TStreamerInfo::kChar: {Char_t *x=(Char_t*)(arr[k]+ioffset); *x = (Char_t)u; break;} \
392 case TStreamerInfo::kShort: {Short_t *x=(Short_t*)(arr[k]+ioffset); *x = (Short_t)u; break;} \
393 case TStreamerInfo::kInt: {Int_t *x=(Int_t*)(arr[k]+ioffset); *x = (Int_t)u; break;} \
394 case TStreamerInfo::kLong: {Long_t *x=(Long_t*)(arr[k]+ioffset); *x = (Long_t)u; break;} \
395 case TStreamerInfo::kLong64: {Long64_t *x=(Long64_t*)(arr[k]+ioffset); *x = (Long64_t)u; break;} \
396 case TStreamerInfo::kFloat: {Float_t *x=(Float_t*)(arr[k]+ioffset); *x = (Float_t)u; break;} \
397 case TStreamerInfo::kFloat16: {Float_t *x=(Float_t*)(arr[k]+ioffset); *x = (Float_t)u; break;} \
398 case TStreamerInfo::kDouble: {Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \
399 case TStreamerInfo::kDouble32:{Double_t *x=(Double_t*)(arr[k]+ioffset); *x = (Double_t)u; break;} \
400 case TStreamerInfo::kUChar: {UChar_t *x=(UChar_t*)(arr[k]+ioffset); *x = (UChar_t)u; break;} \
401 case TStreamerInfo::kUShort: {UShort_t *x=(UShort_t*)(arr[k]+ioffset); *x = (UShort_t)u; break;} \
402 case TStreamerInfo::kUInt: {UInt_t *x=(UInt_t*)(arr[k]+ioffset); *x = (UInt_t)u; break;} \
403 case TStreamerInfo::kULong: {ULong_t *x=(ULong_t*)(arr[k]+ioffset); *x = (ULong_t)u; break;} \
404 case TStreamerInfo::kULong64: {ULong64_t*x=(ULong64_t*)(arr[k]+ioffset);*x = (ULong64_t)u;break;} \
409 #define ConvCBasicArrayTo(newtype) \
411 newtype *f=(newtype*)(arr[k]+ioffset); \
412 for (j=0;j<len;j++) f[j] = (newtype)readbuf[j]; \
416 #define ConvCBasicArray(name,ReadArrayFunc) \
418 int j, len = compinfo->fLength; \
419 name* readbuf = new name[len]; \
420 int newtype = compinfo->fNewType%20; \
422 b.ReadArrayFunc(readbuf, len); \
424 case TStreamerInfo::kBool: ConvCBasicArrayTo(Bool_t); \
425 case TStreamerInfo::kChar: ConvCBasicArrayTo(Char_t); \
426 case TStreamerInfo::kShort: ConvCBasicArrayTo(Short_t); \
427 case TStreamerInfo::kInt: ConvCBasicArrayTo(Int_t); \
428 case TStreamerInfo::kLong: ConvCBasicArrayTo(Long_t); \
429 case TStreamerInfo::kLong64: ConvCBasicArrayTo(Long64_t); \
430 case TStreamerInfo::kFloat: ConvCBasicArrayTo(Float_t); \
431 case TStreamerInfo::kFloat16: ConvCBasicArrayTo(Float_t); \
432 case TStreamerInfo::kDouble: ConvCBasicArrayTo(Double_t); \
433 case TStreamerInfo::kDouble32: ConvCBasicArrayTo(Double_t); \
434 case TStreamerInfo::kUChar: ConvCBasicArrayTo(UChar_t); \
435 case TStreamerInfo::kUShort: ConvCBasicArrayTo(UShort_t); \
436 case TStreamerInfo::kUInt: ConvCBasicArrayTo(UInt_t); \
437 case TStreamerInfo::kULong: ConvCBasicArrayTo(ULong_t); \
438 case TStreamerInfo::kULong64: ConvCBasicArrayTo(ULong64_t); \
445 #define ConvCBasicPointerToOutOfRange(newtype,ReadArrayFunc) \
447 newtype **f=(newtype**)(arr[k]+ioffset); \
448 for (j=0;j<len;j++) { \
455 #define ConvCBasicPointerTo(newtype,ReadArrayFunc) \
457 newtype **f=(newtype**)(arr[k]+ioffset); \
458 for (j=0;j<len;j++) { \
460 f[j] = new newtype[*l]; \
461 newtype *af = f[j]; \
462 b.ReadArrayFunc(readbuf, *l); \
463 for (jj=0;jj<*l;jj++) af[jj] = (newtype)readbuf[jj]; \
468 #define ConvCBasicPointer(name,ReadArrayFunc) \
471 int j, jj, len = aElement->GetArrayDim()?aElement->GetArrayLength():1; \
473 int newtype = compinfo->fNewType %20; \
474 Int_t imethod = compinfo->fMethod+eoffset; \
477 Int_t *l = (Int_t*)(arr[k]+imethod); \
478 if (*l>0 && *l < b.BufferSize()) { \
479 readbuf = new name[*l]; \
481 case TStreamerInfo::kBool: ConvCBasicPointerTo(Bool_t,ReadArrayFunc); \
482 case TStreamerInfo::kChar: ConvCBasicPointerTo(Char_t,ReadArrayFunc); \
483 case TStreamerInfo::kShort: ConvCBasicPointerTo(Short_t,ReadArrayFunc); \
484 case TStreamerInfo::kInt: ConvCBasicPointerTo(Int_t,ReadArrayFunc); \
485 case TStreamerInfo::kLong: ConvCBasicPointerTo(Long_t,ReadArrayFunc); \
486 case TStreamerInfo::kLong64: ConvCBasicPointerTo(Long64_t,ReadArrayFunc); \
487 case TStreamerInfo::kFloat: ConvCBasicPointerTo(Float_t,ReadArrayFunc); \
488 case TStreamerInfo::kFloat16: ConvCBasicPointerTo(Float_t,ReadArrayFunc); \
489 case TStreamerInfo::kDouble: ConvCBasicPointerTo(Double_t,ReadArrayFunc); \
490 case TStreamerInfo::kDouble32: ConvCBasicPointerTo(Double_t,ReadArrayFunc); \
491 case TStreamerInfo::kUChar: ConvCBasicPointerTo(UChar_t,ReadArrayFunc); \
492 case TStreamerInfo::kUShort: ConvCBasicPointerTo(UShort_t,ReadArrayFunc); \
493 case TStreamerInfo::kUInt: ConvCBasicPointerTo(UInt_t,ReadArrayFunc); \
494 case TStreamerInfo::kULong: ConvCBasicPointerTo(ULong_t,ReadArrayFunc); \
495 case TStreamerInfo::kULong64: ConvCBasicPointerTo(ULong64_t,ReadArrayFunc); \
500 case TStreamerInfo::kBool: ConvCBasicPointerToOutOfRange(Bool_t,ReadArrayFunc); \
501 case TStreamerInfo::kChar: ConvCBasicPointerToOutOfRange(Char_t,ReadArrayFunc); \
502 case TStreamerInfo::kShort: ConvCBasicPointerToOutOfRange(Short_t,ReadArrayFunc); \
503 case TStreamerInfo::kInt: ConvCBasicPointerToOutOfRange(Int_t,ReadArrayFunc); \
504 case TStreamerInfo::kLong: ConvCBasicPointerToOutOfRange(Long_t,ReadArrayFunc); \
505 case TStreamerInfo::kLong64: ConvCBasicPointerToOutOfRange(Long64_t,ReadArrayFunc); \
506 case TStreamerInfo::kFloat: ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc); \
507 case TStreamerInfo::kFloat16: ConvCBasicPointerToOutOfRange(Float_t,ReadArrayFunc); \
508 case TStreamerInfo::kDouble: ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \
509 case TStreamerInfo::kDouble32: ConvCBasicPointerToOutOfRange(Double_t,ReadArrayFunc); \
510 case TStreamerInfo::kUChar: ConvCBasicPointerToOutOfRange(UChar_t,ReadArrayFunc); \
511 case TStreamerInfo::kUShort: ConvCBasicPointerToOutOfRange(UShort_t,ReadArrayFunc); \
512 case TStreamerInfo::kUInt: ConvCBasicPointerToOutOfRange(UInt_t,ReadArrayFunc); \
513 case TStreamerInfo::kULong: ConvCBasicPointerToOutOfRange(ULong_t,ReadArrayFunc); \
514 case TStreamerInfo::kULong64: ConvCBasicPointerToOutOfRange(ULong64_t,ReadArrayFunc); \
533 for(
Int_t k=0; k<narr; ++k) {
534 rawfunc( arr[k], b );
546 for(
Int_t k=0; k<narr; ++k) {
548 readfunc(arr[k]+eoffset, &obj);
552 for(
Int_t k=0; k<narr; ++k) {
553 readfunc(arr[k]+eoffset, &obj);
593 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
601 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
622 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
669 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
677 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
704 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
712 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
755 Bool_t needIncrement = !( arrayMode & 2 );
756 arrayMode = arrayMode & (~2);
765 static const int kHaveLoop = 1024;
766 const Int_t typeOffset = arrayMode ? kHaveLoop : 0;
771 Int_t isPreAlloc = 0;
772 for (
Int_t i=first;i<last;i++) {
780 if (R__TestUseCache<T>(aElement)) {
783 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",thisVar->
GetName(),aElement->
GetName());
787 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
788 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
800 printf(
"ReadBuffer, class:%s, name=%s, fType[%d]=%d,"
801 " %s, bufpos=%d, arr=%p, offset=%d\n",
808 switch (kase + typeOffset) {
849 for(
Int_t k=0; k<narr; ++k) {
856 for(
Int_t k=0; k<narr; ++k) {
900 for(
Int_t k=0; k<narr; ++k) {
906 for(
Int_t k=0; k<narr; ++k) {
929 const int imethod = compinfo[i]->
fMethod+eoffset;
933 for(j=0;j<compinfo[i]->
fLength;j++) {
935 f[j] = 0;
if (*l <=0)
continue;
944 const int imethod = compinfo[i]->
fMethod+eoffset;
948 for(j=0;j<compinfo[i]->
fLength;j++) {
950 f[j] = 0;
if (*l <=0)
continue;
971 const int imethod = compinfo[i]->
fMethod+eoffset;
972 for(
Int_t k=0; k<narr; ++k) {
978 for(j=0;j<compinfo[i]->
fLength;j++) {
980 f[j] = 0;
if (*l <=0)
continue;
988 const int imethod = compinfo[i]->
fMethod+eoffset;
989 for(
Int_t k=0; k<narr; ++k) {
995 for(j=0;j<compinfo[i]->
fLength;j++) {
997 f[j] = 0;
if (*l <=0)
continue;
1011 Int_t nch; b >> nch;
1012 char **
f = (
char**)(arr[k]+ioffset);
1014 *f = 0;
if (nch <=0)
continue;
1015 *f =
new char[nch+1];
1037 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
1066 cle = compinfo[i]->
fClass;
1083 b.
ReadFastArray((
void**)(arr[k]+ioffset),cle,compinfo[i]->fLength,isPreAlloc,pstreamer);
1147 if( vers < 9 && newClass && newClass!=oldClass ) {
1148 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1167 newProxy = oldProxy;
1172 void **contp = (
void**)(arr[k]+ioffset);
1174 for(j=0;j<compinfo[i]->
fLength;j++) {
1175 void *cont = contp[j];
1177 contp[j] = cle->
New();
1183 env = newProxy->
Allocate(nobjects,
true);
1192 if (pstreamer == 0) {
1194 void **contp = (
void**)(arr[k]+ioffset);
1196 for(j=0;j<compinfo[i]->
fLength;j++) {
1197 void *cont = contp[j];
1203 contp[j] = cle->
New();
1210 DOLOOP {(*pstreamer)(b,arr[k]+ioffset,compinfo[i]->
fLength);}
1229 if( vers < 8 && newClass && newClass!=oldClass ) {
1230 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1241 if (valueClass == 0) {
1259 newProxy = oldProxy;
1263 int objectSize = cle->
Size();
1264 char *
obj = arr[k]+ioffset;
1265 char *end = obj + compinfo[i]->
fLength*objectSize;
1267 for(; obj<end; obj+=objectSize) {
1271 void* env = newProxy->
Allocate(nobjects,
true);
1285 }
else if (vers==0) {
1289 if (pstreamer == 0) {
1298 DOLOOP {(*pstreamer)(b,arr[k]+ioffset,compinfo[i]->
fLength);}
1313 DOLOOP {(*pstreamer)(b,arr[k]+ioffset,0);}
1336 b.
ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1343 if (!(arrayMode&1)) {
1371 b.
ReadFastArray((
void*)(arr[k]+ioffset),cle,compinfo[i]->fLength,pstreamer);
1392 if (pstreamer == 0) {
1393 Error(
"ReadBuffer",
"Streamer for %s is null\n",aElement->
GetName());
1395 aElement->
ls();
continue;
1398 DOLOOP {(*pstreamer)(b,arr[k]+ioffset,compinfo[i]->
fLength);}
1427 for (
Int_t k = 0; k < narr; ++k) {
1428 Int_t* counter = (
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod );
1430 (*pstreamer)(b, arr[k] + ioffset , *counter);
1448 if (fileVersion > 51508) {
1451 for (
Int_t k = 0; k < narr; ++k) {
1453 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1460 char** pp = (
char**) (arr[k] + ioffset );
1465 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1506 pp[ndx] = (
char*) cl->
NewArray(vlen);
1508 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1515 pp[ndx] = (
char*)
new char*[vlen];
1517 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1521 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1537 for (
Int_t k = 0; k < narr; ++k) {
1539 Int_t vlen = *((
Int_t*) (arr[k] + eoffset + compinfo[i]->fMethod ));
1546 char** pp = (
char**) (arr[k] + ioffset );
1551 for (
Int_t ndx = 0; ndx < compinfo[i]->
fLength; ++ndx) {
1592 pp[ndx] = (
char*) cl->
NewArray(vlen);
1594 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1601 pp[ndx] = (
char*)
new char*[vlen];
1603 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1607 memset(pp[ndx], 0, vlen *
sizeof(
char*));
1620 char**
r = (
char**) pp[ndx];
1624 r[
v] = (
char*) cl->
New();
1666 ans = thisVar->
ReadBufferConv(b,arr,compinfo[i],kase,aElement,narr,eoffset);
1667 if (ans==0)
continue;
1670 ans = thisVar->
ReadBufferSkip(b,arr,compinfo[i],kase,aElement,narr,eoffset);
1671 if (ans==0)
continue;
1676 if (ans==0)
continue;
1679 Error(
"ReadBuffer",
"The element %s::%s type %d (%s) is not supported yet\n",
1682 Error(
"ReadBuffer",
"The TStreamerElement for %s %d is missing!\n",
1692 template Int_t TStreamerInfo::ReadBufferSkip<char**>(
TBuffer &b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1702 template Int_t TStreamerInfo::ReadBufferConv<char**>(
TBuffer &b,
char**
const &arr,
const TCompInfo *compinfo,
Int_t kase,
1712 template Int_t TStreamerInfo::ReadBufferArtificial<char**>(
TBuffer &b,
char**
const &arr,
1722 template Int_t TStreamerInfo::ReadBuffer<char**>(
TBuffer &b,
char**
const &arr,
1738 if (!nc && v7)
return 0;
TObject * GetParent() const
Return pointer to parent of this buffer.
Describe Streamer information for one class version.
void SetBufferOffset(Int_t offset=0)
XYZVector ans(TestRotation const &t, XYZVector const &v_in)
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...
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.
TClass * fNewClass
Not Owned.
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket...
Version_t fOldVersion
! Version of the TStreamerInfo object read from the file
const char * GetTypeName() const
Equal to TDataType's kchar.
virtual TClass * GetValueClass() const =0
#define SkipCFloat16(name)
#define ConvCBasicType(name, stream)
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
virtual void Commit(void *)=0
Buffer base class used for serializing objects.
#define ReadBasicTypeLoop(name)
TClass * GetNewClass() const
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
Cache the value in memory than is not part of the object but is accessible via a SchemaRule.
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual UShort_t GetPidOffset() const =0
TCompInfo ** fCompFull
![fElements->GetEntries()]
#define ConvCBasicArray(name, ReadArrayFunc)
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
Persistent Reference link to a TObject A TRef is a lightweight object pointing to any TObject...
virtual TProcessID * ReadProcessID(UShort_t pidf)=0
Return the current Process-ID.
The TNamed class is the base class for all named ROOT classes.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
virtual void SetStreamerElementNumber(TStreamerElement *elem, Int_t comp_type)=0
Int_t ReadBufferClones(TBuffer &b, TClonesArray *clones, Int_t nc, Int_t first, Int_t eoffset)
Read for TClonesArray.
#define SkipCBasicArray(name, ReadArrayFunc)
TMemberStreamer * fStreamer
Not Owned.
Int_t fNfulldata
!number of elements
void(* ReadFuncPtr_t)(char *, TVirtualObject *)
A TProcessID identifies a ROOT job in a unique way in time and space.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void SkipObjectAny()=0
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
virtual Version_t ReadVersionForMemberWise(const TClass *cl=0)=0
TClass * fClass
!pointer to class
#define SkipCDouble32(name)
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.
virtual void ls(Option_t *option="") const
Print the content of the element.
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
virtual void ReadFastArrayDouble32(Double_t *d, Int_t n, TStreamerElement *ele=0)=0
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
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...
virtual const char * ClassName() const
Returns name of class to which the object belongs.
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 ReadBufferArtificial(TBuffer &b, const T &arrptr, TStreamerElement *aElement, Int_t narr, Int_t eoffset)
Handle Artificial StreamerElement.
virtual void ReadFastArrayFloat16(Float_t *f, Int_t n, TStreamerElement *ele=0)=0
Bool_t TestBit(UInt_t f) const
Bool_t IsStartingWithTObject() const
Returns true if this class inherits from TObject and if the start of the TObject parts is at the very...
virtual const char * GetName() const
Returns name of object.
The ROOT global object gROOT contains a list of all defined classes.
#define ReadBasicArrayLoop(name)
static TStreamerElement *& CurrentElement()
#define ReadBasicPointerLoop(name)
TClass * fClass
Not Owned.
virtual void ReadFastArray(Bool_t *b, Int_t n)=0
#define SkipCBasicType(name)
virtual void ReadFloat16(Float_t *f, TStreamerElement *ele=0)=0
virtual void DecrementLevel(TVirtualStreamerInfo *)=0
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
void(* ReadRawFuncPtr_t)(char *, TBuffer &)
virtual const char * GetName() const
Returns name of object.
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
unsigned long long ULong64_t
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
static RooMathCoreReg dummy
#define ReadBasicPointer(name)
virtual void SetTObjectOffset(Int_t tobjoffset)
virtual UInt_t GetUniqueID() const
Return the unique object id.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
#define ReadBasicType(name)
Mother of all ROOT objects.
virtual void ReadDouble32(Double_t *d, TStreamerElement *ele=0)=0
static TStreamerElement * GetCurrentElement()
static function returning a pointer to the current TStreamerElement fgElement points to the current T...
An array of clone (identical) objects.
char * GetObjectAt(UInt_t ind) const
ROOT::TSchemaRule::ReadFuncPtr_t GetReadFunc()
#define SkipCBasicPointer(name, ReadArrayFunc)
#define ConvCBasicPointer(name, ReadArrayFunc)
#define ReadBasicArray(name)
TObject ** GetObjectRef() const
virtual void IncrementLevel(TVirtualStreamerInfo *info)=0
ROOT::TSchemaRule::ReadRawFuncPtr_t GetReadRawFunc()
virtual const char * GetFullName() const
Return element name including dimensions, if any Note that this function stores the name into a stati...
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=0) const
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.
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
Int_t Size() const
Return size of object of this class.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.