40#if (defined(__linux) || defined(__APPLE__)) && defined(__i386__) && \
105 TBufferIO(mode,bufsize,buf,adopt,reallocfunc),
148 char *sw = (
char *)
x;
158 char *sw = (
char *)
x;
165 memcpy(
x, buf,
sizeof(
Long_t));
232 if (obj ==
nullptr) {
233 Error(
"TBufferFile::ReadStdString",
"The std::string address is nullptr but should not");
248 obj->resize(nbig,
'\0');
252 obj->resize(nwh,
'\0');
270 Int_t nbig = obj->length();
293 if (nch == std::numeric_limits<Int_t>::max()) {
294 Error(
"ReadCharStar",
"Cannot allocate buffer: maximum capacity exceeded (%d bytes)!", std::numeric_limits<Int_t>::max());
329 &&
"Byte count position is after the end of the buffer");
331 char *buf = (
char *)(
fBuffer + cntpos);
376 const char *
name = clss ? clss->
GetName() : classname ? classname : 0;
380 Error(
"CheckByteCount",
"object of class %s read too few bytes: %d instead of %d",
381 name,bcnt+offset,bcnt);
384 Error(
"CheckByteCount",
"object of class %s read too many bytes: %d instead of %d",
385 name,bcnt+offset,bcnt);
387 Warning(
"CheckByteCount",
"%s::Streamer() not in sync with data on file %s, fix Streamer()",
390 Warning(
"CheckByteCount",
"%s::Streamer() not in sync with data, fix Streamer()",
394 if ( ((
char *)endpos) >
fBufMax ) {
396 Error(
"CheckByteCount",
397 "Byte count probably corrupted around buffer position %d:\n\t%d for a possible maximum of %d",
398 startpos, bcnt, offset);
455 if (!nbits) nbits = 12;
497 ptr[0] = (
Float_t)(aint/factor + minvalue);
516 temp.fIntValue = theExp;
517 temp.fIntValue <<= 23;
518 temp.fIntValue |= (theMan & ((1<<(nbits+1))-1)) <<(23-nbits);
519 if(1<<(nbits+1) & theMan) temp.fFloatValue = -temp.fFloatValue;
520 ptr[0] = temp.fFloatValue;
532 ptr[0] = (
Double_t)(aint/factor + minvalue);
551 temp.fIntValue = theExp;
552 temp.fIntValue <<= 23;
553 temp.fIntValue |= (theMan & ((1<<(nbits+1))-1)) <<(23-nbits);
554 if(1<<(nbits+1) & theMan) temp.fFloatValue = -temp.fFloatValue;
555 ptr[0] = (
Double_t)temp.fFloatValue;
634 if (!nbits) nbits = 12;
644 UShort_t theMan = ((1<<(nbits+1))-1) & (fIntValue>>(23-nbits-1));
647 if (theMan&1<<nbits) theMan = (1<<nbits) - 1;
648 if (fFloatValue < 0) theMan |= 1<<(nbits+1);
717 UShort_t theMan = ((1<<(nbits+1))-1) & (fIntValue>>(23-nbits-1)) ;
720 if (theMan&1<<nbits) theMan = (1<<nbits)-1 ;
721 if (fFloatValue < 0) theMan |= 1<<(nbits+1);
745 for (
int i = 0; i <
n; i++)
801 for (
int i = 0; i <
n; i++)
827 if (!ii) ii =
new Int_t[
n];
834 for (
int i = 0; i <
n; i++)
889 for (
int i = 0; i <
n; i++)
921 for (
int i = 0; i <
n; i++)
950 for (
int i = 0; i <
n; i++)
1019 if (
sizeof(
Bool_t) > 1) {
1020 for (
int i = 0; i <
n; i++)
1074 for (
int i = 0; i <
n; i++)
1106 for (
int i = 0; i <
n; i++)
1159 for (
int i = 0; i <
n; i++)
1190 for (
int i = 0; i <
n; i++)
1218 for (
int i = 0; i <
n; i++)
1277 if (
sizeof(
Bool_t) > 1) {
1278 for (
int i = 0; i <
n; i++)
1307 if (lenchar < 255) {
1315 if (len >=
n) len =
n-1;
1340 for (
int i = 0; i <
n; i++)
1362 for (
int i = 0; i <
n; i++)
1396 for (
int i = 0; i <
n; i++)
1417 for (
int i = 0; i <
n; i++)
1435 for (
int i = 0; i <
n; i++)
1461 for (
int j=0;j <
n; j++) {
1468 if (!nbits) nbits = 12;
1477 for (i = 0; i <
n; i++) {
1482 fIntValue |= (theMan & ((1<<(nbits+1))-1)) <<(23-nbits);
1483 if(1<<(nbits+1) & theMan) fFloatValue = -fFloatValue;
1498 for (
int j=0;j <
n; j++) {
1499 UInt_t aint; *
this >> aint; ptr[j] = (
Float_t)(aint/factor + minvalue);
1511 if (!nbits) nbits = 12;
1520 for (
Int_t i = 0; i <
n; i++) {
1525 fIntValue |= (theMan & ((1<<(nbits+1))-1)) <<(23-nbits);
1526 if(1<<(nbits+1) & theMan) fFloatValue = -fFloatValue;
1527 ptr[i] = fFloatValue;
1548 for (
int j=0;j <
n; j++) {
1558 for (i = 0; i <
n; i++) {
1571 for (i = 0; i <
n; i++) {
1576 fIntValue |= (theMan & ((1<<(nbits+1))-1)) <<(23-nbits);
1577 if (1<<(nbits+1) & theMan) fFloatValue = -fFloatValue;
1593 for (
int j=0;j <
n; j++) {
1594 UInt_t aint; *
this >> aint;
d[j] = (
Double_t)(aint/factor + minvalue);
1609 for (
Int_t i = 0; i <
n; i++) {
1622 for (
Int_t i = 0; i <
n; i++) {
1627 fIntValue |= (theMan & ((1<<(nbits+1))-1)) <<(23-nbits);
1628 if (1<<(nbits+1) & theMan) fFloatValue = -fFloatValue;
1644 (*streamer)(*
this,
start,0);
1648 int objectSize = cl->
Size();
1649 char *obj = (
char*)
start;
1650 char *end = obj +
n*objectSize;
1652 for(; obj<end; obj+=objectSize) ((
TClass*)cl)->Streamer(obj,*
this, onFileClass);
1670 for (
Int_t j=0;j<
n;j++) {
1675 (*streamer)(*
this,(
void*)
start,0);
1681 for (
Int_t j=0; j<
n; j++){
1683 void *old =
start[j];
1685 if (old && old!=
start[j] &&
1710 for (
Int_t j=0; j<
n; j++){
1712 ((
TClass*)cl)->Streamer(
start[j],*
this,onFileClass);
1734 if (
sizeof(
Bool_t) > 1) {
1735 for (
int i = 0; i <
n; i++)
1784 for (
int i = 0; i <
n; i++)
1814 for (
int i = 0; i <
n; i++)
1878 for (
int i = 0; i <
n; i++)
1907 for (
int i = 0; i <
n; i++)
1933 for (
int i = 0; i <
n; i++)
1990 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
1993 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2000 if (
sizeof(
Bool_t) > 1) {
2001 for (
int i = 0; i <
n; i++)
2018 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2021 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2041 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2044 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2071 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2074 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2086 for (
int i = 0; i <
n; i++)
2103 constexpr Int_t dataWidth = 4;
2104 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2107 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2119 for (
int i = 0; i <
n; i++)
2136 constexpr Int_t dataWidth = 8;
2137 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2140 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2160 constexpr Int_t dataWidth = 8;
2161 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2164 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2183 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2186 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2194 for (
int i = 0; i <
n; i++)
2211 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2214 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2226 for (
int i = 0; i <
n; i++)
2244 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2247 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2255 for (
int i = 0; i <
n; i++)
2279 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2282 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2296 for (
int j = 0; j <
n; j++) {
2306 if (!nbits) nbits = 12;
2315 for (i = 0; i <
n; i++) {
2318 UShort_t theMan = ((1<<(nbits+1))-1) & (fIntValue>>(23-nbits-1));
2321 if (theMan&1<<nbits) theMan = (1<<nbits) - 1;
2322 if (fFloatValue < 0) theMan |= 1<<(nbits+1);
2345 const Int_t maxElements = (std::numeric_limits<Int_t>::max() -
Length())/dataWidth;
2348 Fatal(
"WriteFastArray",
"Not enough space left in the buffer (1GB limit). %lld elements is greater than the max left of %d",
n, maxElements);
2362 for (
int j = 0; j <
n; j++) {
2375 for (i = 0; i <
n; i++) {
2387 for (i = 0; i <
n; i++) {
2390 UShort_t theMan = ((1<<(nbits+1))-1) & (fIntValue>>(23-nbits-1));
2393 if(theMan&1<<nbits) theMan = (1<<nbits) - 1;
2394 if (fFloatValue < 0) theMan |= 1<<(nbits+1);
2411 (*streamer)(*
this,
start, 0);
2415 char *obj = (
char*)
start;
2419 Fatal(
"WriteFastArray",
"Negative number of elements %lld",
n);
2425 ((
TClass*)cl)->Streamer(obj,*
this);
2445 (*streamer)(*
this,(
void*)
start,0);
2448 if (
n < 0)
return -1;
2455 for (
Int_t j=0;j<
n;j++) {
2457 if (!strInfo && !
start[j]) {
2472 for (
Int_t j=0;j<
n;j++) {
2532 TClass *clOnfile =
nullptr;
2533 Int_t baseOffset = 0;
2534 if (clRef && (clRef!=(
TClass*)(-1)) && clCast) {
2537 if (baseOffset == -1) {
2544 Error(
"ReadObject",
"got object of wrong class! requested %s but got %s",
2553 Info(
"ReadObjectAny",
"Using Converter StreamerInfo from %s to %s",clRef->
GetName(),clCast->
GetName());
2555 clRef =
const_cast<TClass*
>(clCast);
2560 Error(
"ReadObject",
"trying to read an emulated class (%s) to store in a compiled pointer (%s)",
2572 if (obj == (
void*) -1) obj =
nullptr;
2575 return (obj + baseOffset);
2580 if (clRef == (
TClass*) -1) {
2598 Error(
"ReadObject",
"object tag too large, I/O buffer corrupted");
2606 if (clRef && (clRef!=(
TClass*)(-1)) && clCast) {
2609 if (baseOffset == -1) {
2610 Error(
"ReadObject",
"Got object of wrong class (Got %s while expecting %s)",
2628 obj = (
char*)clRef->
New();
2630 Error(
"ReadObject",
"could not create object of class %s",
2643 clRef->
Streamer( obj, *
this, clOnfile );
2648 return obj+baseOffset;
2665 if (!actualObjectStart) {
2693 Warning(
"WriteObjectAny",
"since %s has no public constructor\n"
2694 "\twhich can be called without argument, objects of this class\n"
2695 "\tcan not be read with the current library. You will need to\n"
2696 "\tadd a default constructor before attempting to read it.",
2713 if (mapsize ==
fMap->Capacity()) {
2714 fMap->AddAt(slot, hash, (
Longptr_t)actualObjectStart, offset);
2724 ((
TClass*)actualClass)->Streamer((
void*)actualObjectStart,*
this);
2749 UInt_t bcnt, tag, startpos = 0;
2762 if (objTag) *objTag = tag;
2791 if (clTag == 0 || clTag > (
UInt_t)
fMap->GetSize()) {
2792 Error(
"ReadClass",
"illegal class tag=%d (0<tag<=%d), I/O buffer corrupted",
2793 clTag,
fMap->GetSize());
2807 Error(
"ReadClass",
"The on-file class is \"%s\" which is not compatible with the requested class: \"%s\"",
2816 if (!cl) cl = (
TClass*)-1;
2892 Error(
"SkipVersion",
"Could not find the StreamerInfo with a checksum of %d for the class \"%s\" in %s.",
2895 Error(
"SkipVersion",
"Could not find the StreamerInfo with a checksum of %d for the class \"%s\" (buffer with no parent)",
2915 Error(
"SkipVersion",
"Could not find the StreamerInfo with a checksum of %d for the class \"%s\" in %s.",
2921 Error(
"SkipVersion",
"Class %s not known to file %s.",
2972 && (
v.cnt &&
v.cnt >= 6)) ||
2974 (clversion == 0 && version == 0 && cl->
IsForeign())
2981 return vinfo->TStreamerInfo::GetClassVersion();
2988 version = clversion;
2991 Error(
"ReadVersion",
"Could not find the StreamerInfo with a checksum of 0x%x for the class \"%s\" in %s.",
2994 Error(
"ReadVersion",
"Could not find the StreamerInfo with a checksum of 0x%x for the class \"%s\" (buffer with no parent)",
3005 if (
v.cnt &&
v.cnt >= 6)
3022 Error(
"ReadVersion",
"Could not find the StreamerInfo with a checksum of 0x%x for the class \"%s\" in %s.",
3028 Error(
"ReadVersion",
"Class %s not known to file %s.",
3100 return vinfo->TStreamerInfo::GetClassVersion();
3140 Error(
"ReadVersion",
"Class %s not known to file %s.",
3163 if (version<=1 && cl->IsForeign()) {
3168 Error(
"WriteVersion",
"version number cannot be larger than %hd)",
3193 if (version<=1 && cl->IsForeign()) {
3194 Error(
"WriteVersionMemberWise",
"Member-wise streaming of foreign collection not yet implemented!");
3199 Error(
"WriteVersionMemberWise",
"version number cannot be larger than %hd)",
3218 else Warning(
"StreamObject",
"No TClass for the type %s is available, the object was not read.", typeinfo.name());
3228 else Warning(
"StreamObject",
"No TClass for the type %s is available, the object was not read.", className);
3236 ((
TClass*)cl)->Streamer(obj, *
this, (
TClass*)onFileClass );
3269 if (!offset)
return offset;
3274 if ((cli =
fMap->GetValue(offset)) == 0) {
3285 fMap->Remove(offset);
3286 fMap->Add(offset, -1);
3289 Warning(
"CheckObject",
"reference to unavailable class %s,"
3290 " pointers of this type will be 0", cl->
GetName());
3292 Warning(
"CheckObject",
"reference to an unavailable class,"
3293 " pointers of that type will be 0");
3298 }
else if (cli == -1) {
3306 if ((cli =
fMap->GetValue(offset)) == 0) {
3317 fMap->Remove(offset);
3318 fMap->Add(offset, -1);
3319 Warning(
"CheckObject",
"reference to object of unavailable class %s, offset=%d"
3320 " pointer will be 0", cl ? cl->
GetName() :
"TObject",offset);
3326 }
else if (cli == -1) {
3346 if (max == 0)
return 0;
3363 if (max == 0)
return;
3386 while (nr < max-1) {
3406 WriteBuf(s, (strlen(s)+1)*
sizeof(
char));
3466 Error(
"ReadClassBuffer",
3467 "Could not find the right streamer info to convert %s version %d into a %s, object skipped at offset %d",
3481 auto ninfos = infos->
GetSize();
3482 if (version < -1 || version >= ninfos) {
3483 Error(
"ReadClassBuffer",
"class: %s, attempting to access a wrong version: %d, object skipped at offset %d",
3489 if (sinfo ==
nullptr) {
3498 if (sinfo ==
nullptr) {
3500 const_cast<TClass*
>(cl)->BuildRealData(pointer);
3504 const_cast<TClass*
>(cl)->RegisterStreamerInfo(sinfo);
3505 if (
gDebug > 0)
Info(
"ReadClassBuffer",
"Creating StreamerInfo for class: %s, version: %d", cl->
GetName(), version);
3507 }
else if (version==0) {
3514 Error(
"ReadClassBuffer",
"Could not find the StreamerInfo for version %d of the class %s, object skipped at offset %d",
3526 const_cast<TClass*
>(cl)->BuildRealData(pointer);
3575 Error(
"ReadClassBuffer",
3576 "Could not find the right streamer info to convert %s version %d into a %s, object skipped at offset %d",
3599 if (version < -1 || version >= infocapacity) {
3600 Error(
"ReadClassBuffer",
"class: %s, attempting to access a wrong version: %d, object skipped at offset %d",
3612 const_cast<TClass*
>(cl)->BuildRealData(pointer);
3622 if (sinfo ==
nullptr) {
3636 auto ninfos = infos->
GetSize();
3637 if (!(version < -1 || version >= ninfos)) {
3641 const_cast<TClass *
>(cl)->BuildRealData(pointer);
3644 const_cast<TClass *
>(cl)->RegisterStreamerInfo(sinfo);
3646 Info(
"ReadClassBuffer",
"Creating StreamerInfo for class: %s, version: %d",
3650 sinfo->
Clear(
"build");
3656 }
else if (version==0) {
3663 Error(
"ReadClassBuffer",
"Could not find the StreamerInfo for version %d of the class %s, object skipped at offset %d",
3674 if (sinfo->TStreamerInfo::IsRecovered()) R__c=0;
3679 if (
gDebug > 2)
Info(
"ReadClassBuffer",
"For class: %s has read %d bytes", cl->
GetName(), R__c);
3695 if (sinfo ==
nullptr) {
3699 if (sinfo ==
nullptr)
3701 if (sinfo ==
nullptr) {
3702 const_cast<TClass*
>(cl)->BuildRealData(pointer);
3704 const_cast<TClass*
>(cl)->SetCurrentStreamerInfo(sinfo);
3705 const_cast<TClass*
>(cl)->RegisterStreamerInfo(sinfo);
3713 const_cast<TClass*
>(cl)->BuildRealData(pointer);
3740 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3741 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = sequence.
fActions.begin();
3744 (*iter).PrintDebug(*
this,obj);
3750 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3751 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = sequence.
fActions.begin();
3769 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3770 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = sequence.
fActions.begin();
3773 if (!start_collection || start_collection == end_collection)
3774 (*iter).PrintDebug(*
this,
nullptr);
3776 (*iter).PrintDebug(*
this, *(
char**)start_collection);
3777 (*iter)(*
this, start_collection, end_collection);
3782 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3783 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = sequence.
fActions.begin();
3786 (*iter)(*
this,start_collection,end_collection);
3804 void *arr0 = start_collection ? loopconfig->
GetFirstAddress(start_collection,end_collection) : 0;
3806 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3807 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = sequence.
fActions.begin();
3810 (*iter).PrintDebug(*
this,arr0);
3811 (*iter)(*
this,start_collection,end_collection,loopconfig);
3816 TStreamerInfoActions::ActionContainer_t::const_iterator end = sequence.
fActions.end();
3817 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = sequence.
fActions.begin();
3820 (*iter)(*
this,start_collection,end_collection,loopconfig);
void * bswapcpy16(void *to, const void *from, size_t n)
void * bswapcpy32(void *to, const void *from, size_t n)
void frombuf(char *&buf, Bool_t *x)
void tobuf(char *&buf, Bool_t x)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short).
int Int_t
Signed integer 4 bytes (int).
long Longptr_t
Integer large enough to hold a pointer (platform-dependent).
short Version_t
Class version identifier (short).
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char).
unsigned long ULongptr_t
Unsigned integer large enough to hold a pointer (platform-dependent).
char Char_t
Character 1 byte (char).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
bool Bool_t
Boolean (0=false, 1=true) (bool).
short Short_t
Signed Short integer 2 bytes (short).
double Double_t
Double 8 bytes.
long long Long64_t
Portable signed long integer 8 bytes.
unsigned long long ULong64_t
Portable unsigned long integer 8 bytes.
float Float_t
Float 4 bytes (float).
const UInt_t kMaxMapCount
const UInt_t kNewClassTag
static void frombufOld(char *&buf, Long_t *x)
Handle old file formats.
const Version_t kMaxVersion
static bool Class_Has_StreamerInfo(const TClass *cl)
Thread-safe check on StreamerInfos of a TClass.
const Version_t kByteCountVMask
const UInt_t kByteCountMask
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
externTVirtualMutex * gInterpreterMutex
char *(* ReAllocCharFun_t)(char *, size_t, size_t)
#define R__LOCKGUARD(mutex)
#define R__WRITE_LOCKGUARD(mutex)
#define R__READ_LOCKGUARD(mutex)
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
void WriteFastArrayFloat16(const Float_t *f, Long64_t n, TStreamerElement *ele=nullptr) override
Write array of n floats (as truncated float) into the I/O buffer.
void ReadWithFactor(Float_t *ptr, Double_t factor, Double_t minvalue) override
Read a Float16_t from the buffer when the factor and minimum value have been specified see comments a...
void WriteBuf(const void *buf, Int_t max) override
Write max bytes from buf into the I/O buffer.
void WriteFastArray(const Bool_t *b, Long64_t n) override
Write array of n bools into the I/O buffer.
TObject * ReadObject(const TClass *cl) override
Read object from I/O buffer.
void ReadDouble32(Double_t *d, TStreamerElement *ele=nullptr) override
Read a Double32_t from the buffer, see comments about Double32_t encoding at TBufferFile::WriteDouble...
Int_t ReadStaticArrayFloat16(Float_t *f, TStreamerElement *ele=nullptr) override
Read array of floats (written as truncated float) from the I/O buffer.
void DecrementLevel(TVirtualStreamerInfo *) override
Decrement level.
Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr) override
Read class version from I/O buffer.
Version_t ReadVersionNoCheckSum(UInt_t *start=nullptr, UInt_t *bcnt=nullptr) override
Read class version from I/O buffer, when the caller knows for sure that there is no checksum written/...
void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE) override
Set byte count at position cntpos in the buffer.
~TBufferFile() override
Delete an I/O buffer object.
void ReadWithNbits(Float_t *ptr, Int_t nbits) override
Read a Float16_t from the buffer when the number of bits is specified (explicitly or not) see comment...
void WriteObjectClass(const void *actualObjStart, const TClass *actualClass, Bool_t cacheReuse) override
Write object to I/O buffer.
void ReadTString(TString &s) override
Read TString from TBuffer.
void ReadCharStar(char *&s) override
Read char* from TBuffer.
void StreamObject(void *obj, const std::type_info &typeinfo, const TClass *onFileClass=nullptr) override
Stream an object given its C++ typeinfo information.
UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE) override
Write class version to I/O buffer.
Int_t ReadBuf(void *buf, Int_t max) override
Read max bytes from the I/O buffer into buf.
void WriteString(const char *s) override
Write string to I/O buffer.
char * ReadString(char *s, Int_t max) override
Read string from I/O buffer.
void WriteArray(const Bool_t *b, Int_t n) override
Write array of n bools into the I/O buffer.
void ReadFastArray(Bool_t *b, Int_t n) override
Read array of n bools from the I/O buffer.
void ReadFastArrayString(Char_t *c, Int_t n) override
Read array of n characters from the I/O buffer.
Int_t ReadArray(Bool_t *&b) override
Read array of bools from the I/O buffer.
Int_t ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *object) override
Read one collection of objects from the buffer using the StreamerInfoLoopAction.
void * ReadObjectAny(const TClass *cast) override
Read object from I/O buffer.
void SkipObjectAny() override
Skip any kind of object from buffer.
Int_t ReadStaticArrayDouble32(Double_t *d, TStreamerElement *ele=nullptr) override
Read array of doubles (written as float) from the I/O buffer.
TClass * ReadClass(const TClass *cl=nullptr, UInt_t *objTag=nullptr) override
Read class definition from I/O buffer.
Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class) override
Deserialize information from a buffer into an object.
void SkipVersion(const TClass *cl=nullptr) override
Skip class version from I/O buffer.
void ReadFloat16(Float_t *f, TStreamerElement *ele=nullptr) override
Read a Float16_t from the buffer, see comments about Float16_t encoding at TBufferFile::WriteFloat16(...
void WriteFastArrayDouble32(const Double_t *d, Long64_t n, TStreamerElement *ele=nullptr) override
Write array of n doubles (as float) into the I/O buffer.
void WriteFastArrayString(const Char_t *c, Long64_t n) override
Write array of n characters into the I/O buffer.
Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss, const char *classname)
Check byte count with current buffer position.
void WriteCharStar(char *s) override
Write char* into TBuffer.
Int_t ApplySequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection) override
Read one collection of objects from the buffer using the StreamerInfoLoopAction.
void WriteStdString(const std::string *s) override
Write std::string to TBuffer.
Int_t WriteClassBuffer(const TClass *cl, void *pointer) override
Function called by the Streamer functions to serialize object at p to buffer b.
void WriteClass(const TClass *cl) override
Write class description to I/O buffer.
void ReadFastArrayDouble32(Double_t *d, Int_t n, TStreamerElement *ele=nullptr) override
Read array of n doubles (written as float) from the I/O buffer.
UInt_t WriteVersionMemberWise(const TClass *cl, Bool_t useBcnt=kFALSE) override
Write class version to I/O buffer after setting the kStreamedMemberWise bit in the version number.
void CheckCount(UInt_t offset) override
Check if offset is not too large (< kMaxMapCount) when writing.
bool ShouldNotReadCollection(Int_t lengthInBytes, Int_t nElements=1) const
Int_t ReadArrayFloat16(Float_t *&f, TStreamerElement *ele=nullptr) override
Read array of floats (written as truncated float) from the I/O buffer.
void ReadFastArrayFloat16(Float_t *f, Int_t n, TStreamerElement *ele=nullptr) override
Read array of n floats (written as truncated float) from the I/O buffer.
void ReadStdString(std::string *s) override
Read std::string from TBuffer.
void WriteFloat16(Float_t *f, TStreamerElement *ele=nullptr) override
Write a Float16_t to the buffer.
Int_t ReadStaticArray(Bool_t *b) override
Read array of bools from the I/O buffer.
void WriteTString(const TString &s) override
Write TString to TBuffer.
UInt_t CheckObject(UInt_t offset, const TClass *cl, Bool_t readClass=kFALSE)
Check for object in the read map.
InfoList_t fInfoStack
Stack of pointers to the TStreamerInfos.
void WriteDouble32(Double_t *d, TStreamerElement *ele=nullptr) override
Write a Double32_t to the buffer.
void ReadLong(Long_t &l) override
Read Long from TBuffer.
void ReadFastArrayWithNbits(Float_t *ptr, Int_t n, Int_t nbits) override
Read array of n floats (written as truncated float) from the I/O buffer.
void IncrementLevel(TVirtualStreamerInfo *info) override
Increment level.
Int_t ReadArrayDouble32(Double_t *&d, TStreamerElement *ele=nullptr) override
Read array of doubles (written as float) from the I/O buffer.
void WriteArrayDouble32(const Double_t *d, Int_t n, TStreamerElement *ele=nullptr) override
Write array of n doubles (as float) into the I/O buffer.
void WriteArrayFloat16(const Float_t *f, Int_t n, TStreamerElement *ele=nullptr) override
Write array of n floats (as truncated float) into the I/O buffer.
void ReadFastArrayWithFactor(Float_t *ptr, Int_t n, Double_t factor, Double_t minvalue) override
Read array of n floats (written as truncated float) from the I/O buffer.
Version_t ReadVersionForMemberWise(const TClass *cl=nullptr) override
Read class version from I/O buffer.
TStreamerInfo * fInfo
Pointer to TStreamerInfo object writing/reading the buffer.
Int_t ReadClassEmulated(const TClass *cl, void *object, const TClass *onfile_class) override
Read emulated class.
void InitMap() override
Create the fMap container and initialize them with the null object.
void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force) override
force writing the TStreamerInfo to the file
TExMap * fMap
Map containing object,offset pairs for reading/writing.
void MapObject(const TObject *obj, UInt_t offset=1) override
Add object to the fMap container.
TExMap * fClassMap
Map containing object,class pairs for reading.
Int_t fDisplacement
Value to be added to the map offsets.
Int_t fMapCount
Number of objects or classes in map.
void TagStreamerInfo(TVirtualStreamerInfo *info) override
Mark the classindex of the current file as using this TStreamerInfo.
static ULong_t Void_Hash(const void *ptr)
Return hash value for provided object.
Int_t WriteObjectAny(const void *obj, const TClass *ptrClass, Bool_t cacheReuse=kTRUE) override
Write object to I/O buffer.
TObject * GetParent() const
Return pointer to parent of this buffer.
void AutoExpand(Int_t size_needed)
Automatically calculate a new size and expand the buffer to fit at least size_needed.
void SetBufferOffset(Int_t offset=0)
TClass instances represent classes, structs and namespaces in the ROOT type system.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
TVirtualStreamerInfo * GetCurrentStreamerInfo()
Bool_t MatchLegacyCheckSum(UInt_t checksum) const
Return true if the checksum passed as argument is one of the checksum value produced by the older che...
TVirtualStreamerInfo * GetLastReadInfo() const
Int_t Size() const
Return size of object of this class.
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
void Store(TBuffer &b) const
Store class description on I/O buffer.
const TObjArray * GetStreamerInfos() const
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method).
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,...
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
Int_t GetBaseClassOffset(const TClass *toBase, void *address=nullptr, bool isDerivedObject=true)
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
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...
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
Version_t GetClassVersion() const
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
virtual void SetOnFileClass(const TClass *cl)
const char * GetName() const override
Returns name of object.
TObject * At(Int_t idx) const override
TObject * UncheckedAt(Int_t i) const
Int_t GetLast() const override
Return index of last object in array.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
TObject()
TObject constructor.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Describe one element (data member) to be Streamed.
Double_t GetFactor() const
std::unique_ptr< TLoopConfiguration > fLoopConfig
If this is a bundle of memberwise streaming action, this configures the looping.
ActionContainer_t fActions
Base class of the Configurations for the member wise looping routines.
virtual void * GetFirstAddress(void *start, const void *end) const =0
Describes a persistent version of a class.
Int_t GetClassVersion() const override
void BuildEmulated(TFile *file) override
Create an Emulation TStreamerInfo object.
void Build(Bool_t isTransient=kFALSE) override
Build the I/O data structure for the current class version.
void BuildOld() override
rebuild the TStreamerInfo structure
TStreamerInfoActions::TActionSequence * GetReadObjectWiseActions()
void SetClassVersion(Int_t vers) override
void Clear(Option_t *="") override
If opt contains 'built', reset this StreamerInfo as if Build or BuildOld was never called on it (usef...
UInt_t GetCheckSum() const override
TStreamerInfoActions::TActionSequence * GetWriteObjectWiseActions()
Ssiz_t Clobber(Ssiz_t nc)
Clear string and make sure it has a capacity of nc.
Abstract Interface class describing Streamer information for one class.
Int_t IsRecovered() const
Bool_t IsCompiled() const
static Bool_t CanDelete()
static function returning true if ReadBuffer can delete object
externTVirtualRWMutex * gCoreMutex