56 void RemovePrefix(
TString& str,
const char* prefix) {
58 if (str.
Length() && prefix && strlen(prefix)) {
59 if (!str.
Index(prefix)) {
60 str.
Remove(0, strlen(prefix));
71 fBuffer.PushDataCache( fOnfileObject );
75 if (fOnfileObject)
fBuffer.PopDataCache();
85 for (
Int_t i = 0; i < nbranches; ++i) {
88 case 31: br->
SetType(41);
break;
110 return CanSelfReference(inside);
115 const static TClassRef stringClass(
"std::string");
160, fReadActionSequence(0)
161, fFillActionSequence(0)
178, fClassName(sinfo->GetName())
182, fCheckSum(sinfo->GetCheckSum())
198, fTargetClass(fClassName)
205, fReadActionSequence(0)
206, fFillActionSequence(0)
215 Init(
tree, 0, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
225, fClassName(sinfo->GetName())
229, fCheckSum(sinfo->GetCheckSum())
245, fTargetClass( fClassName )
252, fReadActionSequence(0)
253, fFillActionSequence(0)
260 Init(parent ? parent->
GetTree() : 0, parent, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
279 if (
fTree == 0)
return;
371 if (hasCustomStreamer) {
424 if (splitlevel > 0) {
472 Unroll(
name, clOfElement, clOfElement, pointer, basketsize, splitlevel+splitSTLP, 0);
473 if (strchr(bname,
'.')) {
506 char **ppointer = (
char**)(pointer);
550 Unroll(
name, clOfClones, clOfClones, pointer, basketsize, splitlevel+splitSTLP, 31);
557 TClass* contCl = elementClass;
605 Unroll(
name, valueClass, valueClass, pointer, basketsize, splitlevel+splitSTLP, 41);
618 TClass* clm = elementClass;
619 Int_t err =
Unroll(
name, clm, clm, pointer, basketsize, splitlevel+splitSTLP, 0);
661, fClassName(
"TClonesArray")
667, fTargetClass( fClassName )
672, fReadActionSequence(0)
673, fFillActionSequence(0)
678 Init(
tree, 0, bname, clones, basketsize, splitlevel, compress);
688, fClassName(
"TClonesArray")
694, fTargetClass( fClassName )
699, fReadActionSequence(0)
700, fFillActionSequence(0)
705 Init(parent ? parent->
GetTree() : 0, parent, bname, clones, basketsize, splitlevel, compress);
752 if (basketsize < 100) basketsize = 100;
772 Error(
"Init",
"Missing class object of the TClonesArray %s\n",clones->
GetName());
784 std::string branchname =
name.Data() + std::string(
"_");
786 leaf->
SetName(branchname.c_str());
788 Unroll(
name, clonesClass, clonesClass, 0, basketsize, splitlevel, 31);
815, fClassName(cont->GetCollectionClass()->GetName())
820, fTargetClass( fClassName )
823, fBranchClass(cont->GetCollectionClass())
825, fReadActionSequence(0)
826, fFillActionSequence(0)
831 Init(
tree, 0, bname, cont, basketsize, splitlevel, compress);
841, fClassName(cont->GetCollectionClass()->GetName())
846, fTargetClass( fClassName )
849, fBranchClass(cont->GetCollectionClass())
851, fReadActionSequence(0)
852, fFillActionSequence(0)
857 Init(parent ? parent->
GetTree() : 0, parent, bname, cont, basketsize, splitlevel, compress);
911 if (basketsize < 100) {
952 Unroll(
name, valueClass, valueClass, 0, basketsize, splitlevel, 41);
1031 if (nbranches > 0) {
1032 TList persistentBranches;
1035 while((branch=(
TBranch*)iB())) {
1036 if (branch->
IsFolder()) persistentBranches.
Add(branch);
1062 mempos=strMember.
First(
'[');
1066 if (!
m ||
m->IsPersistent()) persistentBranches.
Add(branch);
1067 }
else persistentBranches.
Add(branch);
1091 pos = mothername.
First(
'[');
1097 if (mothername(len-1) !=
'.') {
1102 TString doublename = mothername;
1104 Int_t isthere = (
name.Index(doublename) == 0);
1106 name.Prepend(doublename);
1109 doublename.
Append(mothername);
1110 isthere = (
name.Index(doublename) == 0);
1113 name.Prepend(mothername);
1124 name.Prepend(mothername);
1146 for (
Int_t i = 0; i < nbranches; ++i) {
1152 }
else if (
fType == 4) {
1155 Error(
"BuildTitle",
"This cannot happen, fType of parent is not 3 or 4!");
1159 const char* fin = strrchr(bre->
GetTitle(),
'.');
1192 if ((stype > 40) && (stype < 61)) {
1234 Error(
"Fill",
"attempt to fill branch %s while addresss is not set",
GetName());
1257 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1269 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1277 for (
Int_t i = 0; i < nbranches; ++i) {
1280 nwrite = branch->
FillImpl(imtHelper);
1282 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d",
GetName(), branch->
GetName(), nwrite);
1295 printf(
"Fill: %lld, branch=%s, nbytes=%d\n", entry,
GetName(), nbytes);
1333 }
else if (
fType == 31) {
1354 Error(
"FillLeaves",
"The branch counter address was zero!");
1360 Error(
"FillLeaves",
"Clonesa: %s, n=%d, sorry not supported yet",
GetName(),
n);
1383 for (
Int_t ii = 0; ii <
n; ++ii) {
1384 b.WriteDouble32(&(xx[ii]),se);
1393 for (
Int_t ii = 0; ii <
n; ++ii) {
1394 b.WriteFloat16(&(xx[ii]),se);
1476 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1507 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1537 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1568 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1623 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1628 char **end = arr +
n;
1705 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1749 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1764 std::size_t dim =
name.find_first_of(
"[");
1765 if (dim != std::string::npos) {
1788 if (se && se->
IsBase()) {
1796 std::string longnm_parent;
1800 longnm_parent +=
name;
1806 for(
Int_t i = 0; i < nbranches; ++i) {
1809 const char *brname = branch->
GetName();
1810 UInt_t brlen = strlen(brname);
1811 if (brname[brlen-1]==
']') {
1812 const char *dim = strchr(brname,
'[');
1814 brlen = dim - brname;
1817 if (namelen == brlen
1818 && strncmp(
name,brname,brlen) == 0) {
1821 if (brlen == longnm.length()
1822 && strncmp(longnm.c_str(),brname,brlen) == 0) {
1826 if (brlen == longnm_parent.length()
1827 && strncmp(longnm_parent.c_str(),brname,brlen) == 0) {
1831 if (namelen>brlen &&
name[brlen]==
'.' && strncmp(
name,brname,brlen)==0) {
1842 for(
Int_t i = 0; i < nbranches; ++i) {
1848 if (si && br->
GetID() >= 0) {
1850 if (se && se->
IsBase()) {
1872 if (parent==
this || parent->
GetID()<0 )
return 0;
1877 if (! se->
IsBase() )
return 0;
1885 std::string longname( grand_parent->
GetName() );
1891 if ( longname == leafname ) {
1932 if (valueClass == subbe->fInfo->
GetClass()) {
1933 localInfo = subbe->fInfo;
1968 if (targetValueClass && localInfo->
GetClass() != targetValueClass) {
1979 for (
size_t i =0; i < ndata; ++i) {
1994 ename = ename.
Remove(pos);
2002 ids.back().fElement = nextel;
2003 ids.back().fInfo = info;
2009 if (!be && nextel->
IsBase()) {
2014 if (subprefix.Length() && subprefix[subprefix.Length()-1] ==
'.')
2015 subprefix.Remove(subprefix.Length()-1);
2021 TClass *expectedClass =
nullptr;
2028 for (
Int_t bi = 0; bi < nbranches; ++bi) {
2030 if (subprefix != branch->
GetName())
2044 if (elementClass && (!be || be->
GetType() == -2)) {
2058 subprefix = ename +
".";
2060 auto nbranches = search->GetEntriesFast();
2061 bool foundRelatedSplit =
false;
2062 for (
Int_t bi = 0; bi < nbranches; ++bi) {
2065 if (!foundRelatedSplit)
2066 foundRelatedSplit = matchSubPrefix;
2077 if (!foundRelatedSplit) {
2087 ids.emplace_back(nextinfo, offset + nextel->
GetOffset());
2090 ids.back().fNestedIDs->fOwnOnfileObject =
kTRUE;
2092 ids.back().fNestedIDs->fOnfileObject = onfileObject;
2093 GatherArtificialElements(branches, ids.back().fNestedIDs->fIDs, subprefix, nextinfo, offset + nextel->
GetOffset());
2094 if (ids.back().fNestedIDs->fIDs.empty())
2128 if ( !targetClass ) {
2129 Error(
"InitInfo",
"The target class dictionary is not present!" );
2147 target +=
"@@emulated";
2156 if( targetClass != cl ) {
2173 if( targetClass != cl )
2213 Error(
"InitInfo",
"StreamerInfo is not compiled.");
2253 Int_t firstindex = 0;
2254 Int_t lastindex = nbranches - 1;
2261 if (!subbranch->
fInfo)
2265 for(
Int_t i = index - 1; i >= 0; --i) {
2268 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2273 if (!subbranch->
fInfo)
2276 for(
Int_t i = index; i < nbranches; ++i) {
2279 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2291 for(
Int_t i = 0; i < nbranches; ++i) {
2294 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2301 for (
Int_t i = firstindex; i <= lastindex; ++i) {
2304 if (
this != subbranch) {
2306 if (!subbranch->
fInfo)
2309 if (subbranch->
fInfo == info)
2311 else if (subbranch->
fInfo ==
nullptr && subbranch->
fBranchClass == currentClass) {
2327 Error(
"SetOnfileObject (lambda)",
"2 distincts fOnfileObject are in the hierarchy of %s for type %s",
2332 seenExisting =
kTRUE;
2336 lastbranch = subbranch;
2341 if (lastbranch !=
this)
2350 size_t pos =
s.rfind(
'.');
2351 if (pos != std::string::npos) {
2352 s =
s.substr(pos+1);
2354 while ((pos =
s.rfind(
'[')) != std::string::npos) {
2355 s =
s.substr(0, pos);
2362 for (
size_t i = 0; i < ndata; ++i) {
2394 for (
size_t i =
fID+1+(
fNewIDs.size()); i < ndata; ++i) {
2397 std::string ename = nextel->
GetName();
2398 if (ename[0] ==
'*')
2399 ename = ename.substr(1);
2401 while ((pos = ename.rfind(
'[')) != std::string::npos) {
2402 ename = ename.substr(0, pos);
2434 fNewIDs.back().fElement = nextel;
2441 for (
size_t i = 0; i < ndata; ++i) {
2456 SetOnfileObject(
fInfo);
2471 auto start = prefix.
Length();
2472 if (prefix[start - 1] ==
'.')
2475 auto cutoff = view.find_last_of(
'.');
2476 if (cutoff != std::string::npos) {
2477 prefix.
Remove(cutoff + 1);
2480 if (prefix[prefix.
Length()-1] !=
'.') {
2493 SetOnfileObject(localInfo);
2524 const char* className = 0;
2569 Fatal(
"GetCollectionProxy",
2570 "Can not create a Collection Proxy of any kind for the class \"%s\" needed by the branch \"%s\" of the TTree \"%s\"!",
2574 "Fixing the collection proxy of the class \"%s\" \n"
2575 "\tneeded by the branch \"%s\" of the TTree \"%s\" to be similar to \"%s\".",
2581 }
else if (
fType == 41) {
2624 if (newInfo != brInfo) {
2633 if (newType.
Length()==0) {
2716 for (
Int_t i = 0; i < nbranches; ++i) {
2741 char **end = arr +
fNdata;
2744 }
else if (
fType == 4) {
2783 Info(
"GetEntry",
"%lld, branch=%s, nbytes=%d", entry,
GetName(), nbytes);
2801 if ((
type == -1) || (
fID == -1)) {
2810 if (!expectedClass) {
2820 Error(
"GetExpectedType",
"Did not find the type for %s",
GetName());
2833 if (!mother || mother==
this || mother->
GetType() == 3 || mother->
GetType() == 4) {
2838 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
2841 return motherName +
"." +
fName;
2850 return "TBranchElement-folder";
2852 return "TBranchElement-leaf";
2913 const char *types[20] = {
2936 return types[itype];
2945template <
typename T>
2996 }
else if (
fType <= 2) {
3021 }
else if (
fType == 41) {
3074 }
else if (
fType == 4) {
3077 }
else if (
fType == 31) {
3082 }
else if (
fType == 41) {
3087 }
else if (
fType <= 2) {
3102 }
else if (
fType == 41) {
3104 }
else if (prID < 0) {
3109 char **val = (
char**)(
object+
GetInfoImp()->TStreamerInfo::GetElementOffset(prID));
3164 Warning(
"InitializeOffsets",
"No branch class set for branch: %s",
GetName());
3181 Int_t localOffset = 0;
3194 Warning(
"InitializeOffsets",
"Streamer info for branch: %s has no elements array!",
GetName());
3201 Warning(
"InitializeOffsets",
"Cannot get streamer element for branch: %s!",
GetName());
3222 Error(
"InitializeOffsets",
"Could not find class for branch: %s",
GetName());
3236 stlParentName = br->
GetName();
3245 for (
Int_t subBranchIdx = 0; subBranchIdx < nbranches; ++subBranchIdx) {
3246 bool alternateElement =
false;
3250 if (subBranch == 0) {
3264 Warning(
"InitializeOffsets",
"No streamer info for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3269 Warning(
"InitializeOffsets",
"No elements array for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3275 if (!subBranchElement) {
3276 Warning(
"InitializeOffsets",
"No streamer element for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3290 typedef TStreamerInfoActions::ActionContainer_t::iterator iterator;
3293 iter != end; ++iter) {
3298 subBranchElement =
e;
3299 alternateElement =
true;
3306 localOffset = subBranchElement->
GetOffset();
3314 && CanSelfReference(subBranchElement->
GetClass()))
3330 Warning(
"InitializeOffsets",
"Branch '%s' has no mother!",
GetName());
3336 if (motherName.
Length() && strchr(motherName.
Data(),
'.')) {
3340 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
3341 motherDotAtEnd =
kTRUE;
3345 if ((subBranch->
fType == 1) || (subBranchElement && subBranchElement->
IsBase())) {
3353 isBaseSubBranch =
kTRUE;
3357 if ((subBranch->
fType == 31) || (subBranch->
fType == 41)) {
3359 isContDataMember =
kTRUE;
3384 if (motherDotAtEnd) {
3388 if (!stlParentNameUpdated && stlParentName.
Length()) {
3390 stlParentNameUpdated =
kTRUE;
3392 }
else if (motherDot) {
3409 if (!stlParentNameUpdated && stlParentName.
Length()) {
3417 if (!stlParentNameUpdated && stlParentName.
Length()) {
3423 stlParentNameUpdated =
kTRUE;
3424 if (isBaseSubBranch) {
3438 if (dataName[0] ==
'.') {
3448 if (motherDotAtEnd) {
3451 }
else if (motherDot) {
3501 RemovePrefix(dataName, parentName);
3506 if (dataName[0] ==
'.') {
3513 if (dataName[dataName.
Length()-1] ==
'.') {
3555 target +=
"@@emulated";
3573 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class, and cannot get class for clones class: '%s'!", subBranch->
GetName(),
GetClonesName());
3577 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass->
GetName());
3581 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass ? pClass->
GetName() :
"unknowned class");
3586 pClass = branchClass;
3591 if (renamed && pClass) {
3592 if (pClass == branchClass) {
3607 if( !strncmp( stlParentName.
Data(), dataName.
Data(), stlParentName.
Length()-1 )
3608 && dataName[ stlParentName.
Length() ] ==
'.' )
3616 if (alternateElement) {
3619 if (dotpos !=
kNPOS) ++dotpos;
else dotpos = 0;
3641 Error(
"InitializeOffsets",
3642 "Could not find the real data member '%s' when constructing the branch '%s' [Likely missing ShowMember].",
3647 Info(
"InitializeOffsets",
3648 "TTree created with an older schema, some data might not be copied in 'slow-cloning' mode; fast-cloning should have the correct result. '%s' is missing when constructing the branch '%s'. ",
3652 Fatal(
"InitializeOffsets",
3653 "Could not find the real data member '%s' when constructing the branch '%s' [Likely an internal error, please report to the developers].",
3661 if (isBaseSubBranch) {
3664 Warning(
"InitializeOffsets",
"Could not find the data member name for branch '%s' with parent branch '%s', assuming offset is zero!", subBranch->
GetName(),
GetName());
3672 if (isContDataMember) {
3686 if (isBaseSubBranch) {
3693 subBranch->
SetOffset(offset - localOffset);
3703 }
else if (isSplit) {
3704 if (isBaseSubBranch) {
3715 if (isBaseSubBranch) {
3755 if (nbranches >= 1) {
3759 return browsables && browsables->
GetSize();
3774 if (basket &&
fTree) {
3787 bufbegin = entryOffset[entry-
first];
3790 bufnext = entryOffset[entry+1-
first];
3794 if (bufnext == bufbegin) {
3812 for(
auto &cursor : ids) {
3813 auto id = cursor.fElemID;
3819 Error(
"TBranchElement::Print",
"Element for id #%d not found in StreamerInfo for %s",
3823 }
else if (cursor.fNestedIDs) {
3824 Printf(
" Within subobject of type %s offset = %d", cursor.fNestedIDs->fInfo->GetName(), cursor.fNestedIDs->fOffset);
3825 PrintElements(cursor.fNestedIDs->fInfo, cursor.fNestedIDs->fIDs);
3833 if (strncmp(option,
"debugAddress",strlen(
"debugAddress"))==0) {
3834 if (strlen(option)==strlen(
"debugAddress")) {
3835 Printf(
"%-24s %-16s %2s %4s %-16s %-16s %8s %8s %s %s\n",
3836 "Branch Name",
"Streamer Class",
"ID",
"Type",
"Class",
"Parent",
"pOffset",
"fOffset",
"fObject",
"fOnfileObject");
3845 Printf(
"%-16s %2d %4d %-16s %-16s %8x %8x %p %p%s\n",
3850 for (
Int_t i = 0; i < nbranches; ++i) {
3852 subbranch->
Print(
"debugAddressSub");
3856 if (strncmp(option,
"debugInfo",strlen(
"debugInfo"))==0) {
3868 Printf(
" With elements:");
3872 Printf(
" with read actions:");
3874 Printf(
" with write actions:");
3883 Printf(
" with read actions:");
3885 Printf(
" with write actions:");
3888 TString suboption =
"debugInfoSub";
3889 suboption += (option+strlen(
"debugInfo"));
3890 for (
Int_t i = 0; i < nbranches; ++i) {
3892 subbranch->
Print(suboption);
3905 Printf(
"*............................................................................*");
3910 for (
Int_t i=0;i<nbranches;i++) {
3912 branch->
Print(option);
3969 }
else if (
fType <= 2) {
3986 }
else if (
fType == 3) {
3988 }
else if (
fType == 31) {
3993 }
else if (
fType == 41) {
4010 Fatal(
"ReadLeaves",
"The ReadLeaves function has not been configured for %s",
GetName());
4028 b.SetBufferOffset(
b.Length() -
sizeof(
n));
4030 Error(
"ReadLeaves",
"Incorrect size read for the container in %s\nThe size read is %d when the maximum is %d\nThe size is reset to 0 for this entry (%lld)",
GetName(),
n[0],
fMaximum,
GetReadEntry());
4042 for (
Int_t i=0; i<nbranches; i++) {
4059 if (atype > 54)
return;
4068 if (!len_where)
return;
4073 for( k=0; k<
n; k++) {
4074 char **where = &(((
char**)
fAddress)[k]);
4078 case 1: {length = ((
Char_t*) len_where)[k];
break;}
4079 case 2: {length = ((
Short_t*) len_where)[k];
break;}
4080 case 3: {length = ((
Int_t*) len_where)[k];
break;}
4081 case 4: {length = ((
Long_t*) len_where)[k];
break;}
4083 case 6: {length = ((
Int_t*) len_where)[k];
break;}
4085 case 11: {length = ((
UChar_t*) len_where)[k];
break;}
4086 case 12: {length = ((
UShort_t*) len_where)[k];
break;}
4087 case 13: {length = ((
UInt_t*) len_where)[k];
break;}
4088 case 14: {length = ((
ULong_t*) len_where)[k];
break;}
4089 case 15: {length = ((
UInt_t*) len_where)[k];
break;}
4090 case 16: {length = ((
Long64_t*) len_where)[k];
break;}
4091 case 17: {length = ((
ULong64_t*)len_where)[k];
break;}
4092 case 18: {length = ((
Bool_t*) len_where)[k];
break;}
4096 if (length <= 0)
continue;
4097 if (isArray == 0)
continue;
4099 case 1: {*where=
new char[
sizeof(
Char_t)*length];
b.ReadFastArray((
Char_t*) *where, length);
break;}
4100 case 2: {*where=
new char[
sizeof(
Short_t)*length];
b.ReadFastArray((
Short_t*) *where, length);
break;}
4101 case 3: {*where=
new char[
sizeof(
Int_t)*length];
b.ReadFastArray((
Int_t*) *where, length);
break;}
4102 case 4: {*where=
new char[
sizeof(
Long_t)*length];
b.ReadFastArray((
Long_t*) *where, length);
break;}
4103 case 5: {*where=
new char[
sizeof(
Float_t)*length];
b.ReadFastArray((
Float_t*) *where, length);
break;}
4104 case 6: {*where=
new char[
sizeof(
Int_t)*length];
b.ReadFastArray((
Int_t*) *where, length);
break;}
4105 case 8: {*where=
new char[
sizeof(
Double_t)*length];
b.ReadFastArray((
Double_t*)*where, length);
break;}
4106 case 11: {*where=
new char[
sizeof(
UChar_t)*length];
b.ReadFastArray((
UChar_t*) *where, length);
break;}
4107 case 12: {*where=
new char[
sizeof(
UShort_t)*length];
b.ReadFastArray((
UShort_t*)*where, length);
break;}
4108 case 13: {*where=
new char[
sizeof(
UInt_t)*length];
b.ReadFastArray((
UInt_t*) *where, length);
break;}
4109 case 14: {*where=
new char[
sizeof(
ULong_t)*length];
b.ReadFastArray((
ULong_t*) *where, length);
break;}
4110 case 15: {*where=
new char[
sizeof(
UInt_t)*length];
b.ReadFastArray((
UInt_t*) *where, length);
break;}
4111 case 16: {*where=
new char[
sizeof(
Long64_t)*length];
b.ReadFastArray((
Long64_t*) *where, length);
break;}
4112 case 17: {*where=
new char[
sizeof(
ULong64_t)*length];
b.ReadFastArray((
ULong64_t*)*where, length);
break;}
4113 case 18: {*where=
new char[
sizeof(
Bool_t)*length];
b.ReadFastArray((
Bool_t*) *where, length);
break;}
4143 for (
Int_t ii=0;ii<
n;ii++) {
4144 b.ReadDouble32(&(xx[ii]),se);
4152 for (
Int_t ii=0;ii<
n;ii++) {
4153 b.ReadFloat16(&(xx[ii]),se);
4159 }
else if (
fType <= 2) {
4179 loc = counter.
Last(
']');
4183 countname += counter;
4189 Warning(
"ReadLeaves",
"Missing fBranchCount for %s. Data will not be read correctly by the MakeClass mode.",
GetName());
4215 for (
Int_t ii=0;ii<
n;ii++) {
4216 b.ReadDouble32(&(xx[ii]),se);
4224 for (
Int_t ii=0;ii<
n;ii++) {
4225 b.ReadFloat16(&(xx[ii]),se);
4277 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4279 Error(
"ReadLeaves",
"Incorrect size read for the container in %s\n\tThe size read is %d while the maximum is %d\n\tThe size is reset to 0 for this entry (%lld)",
GetName(),
n,
fMaximum,
GetReadEntry());
4313 for (
Int_t i = 0; i < nbranches; ++i) {
4341 if( !
fNdata || *(
void**)proxy->
At( 0 ) != 0 )
4346 void **el = (
void**)proxy->
At( i );
4348 *el = elClass->
New();
4352 proxy->
Commit(alternate);
4378 if (info == 0)
return;
4410 if (info == 0)
return;
4441 if (info == 0)
return;
4472 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4474 Error(
"ReadLeaves",
"Incorrect size read for the container in %s\n\tThe size read is %d while the maximum is %d\n\tThe size is reset to 0 for this entry (%lld)",
GetName(),
n,
fMaximum,
GetReadEntry());
4513 if (info==0)
return;
4521 char **end = arr +
fNdata;
4660 Fatal(
"FillLeaves",
"The FillLeaves function has not been configured for %s",
GetName());
4683 }
else if (
fType == 4) {
4688 Warning(
"ReleaseObject",
"Cannot delete allocated STL container because I do not have a proxy! branch: %s",
GetName());
4692 if (needDelete &&
fID >= 0) {
4699 proxy->
Clear(
"force");
4724 proxy->
Clear(
"force");
4728 proxy->
Clear(
"force");
4749 for (
Int_t i = 0; i < nbranches; ++i) {
4751 branch->
Reset(option);
4764 for (
Int_t i = 0; i < nbranches; ++i) {
4786 for (
Int_t i = 0; i < nbranches; ++i) {
4812 for (
Int_t i = 0; i < nb; ++i) {
4838 for (
Int_t i = 0; i < nbranches; ++i) {
4986 if (
Long_t(addr) == -1) {
5080 if (clm == content) {
5086 Warning(
"SetAddress",
"The type of the %s was changed from TClonesArray to %s but we do not have a TVirtualCollectionProxy for that container type!",
GetName(), newType->
GetName());
5113 }
else if (
fType == 4) {
5125 for (
Int_t i = 0; i < nbranches; ++i) {
5158 for (
Int_t i = 0; i < nbranches; ++i) {
5186 Error(
"SetAddress",
"For %s, we can not convert %s into %s\n",
5321 Error(
"SetAddress",
"Embedded TClonesArray given a zero address for branch '%s'",
GetName());
5337 Error(
"SetAddress",
"Embedded pointer to a TClonesArray given a zero address for branch '%s'",
GetName());
5341 }
else if (
fType == 4) {
5361 "Branch %s is a split STL container (fStreamerType is: %d), the address can not be set directly.",
5370 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5388 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5408 Error(
"SetAddress",
"Embedded STL container given a zero address for branch '%s'",
GetName());
5414 "Branch %s is a split STL container (fStreamerType is: %d), the address can not be set directly.",
5423 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5432 Error(
"SetAddress",
"Embedded pointer to an STL container given a zero address for branch '%s'",
GetName());
5436 }
else if (
fType == 41) {
5442 }
else if (
fID < 0) {
5462 Error(
"SetAddress",
"I have no TClass for branch %s, so I cannot allocate an I/O buffer!",
GetName());
5489 for (
Int_t i = 0; i < nbranches; ++i) {
5514 for (
Int_t i = 0; i < nbranches; ++i) {
5530 if (leafOfCounter && leaf) {
5533 if (!leafOfCounter) {
5534 Warning(
"SetBranchCount",
"Counter branch %s for branch %s has no leaves!", brOfCounter->
GetName(),
GetName());
5537 Warning(
"SetBranchCount",
"Branch %s has no leaves!",
GetName());
5556 for (
Int_t i = 0; i < nbranches; ++i) {
5631 if (actionSequence)
delete actionSequence;
5665 TClass *originalClass =
nullptr;
5684 }
else if (
fType == 31) {
5709 }
else if (
fType == 4) {
5711 }
else if (
fType == 41) {
5721 }
else if (
fType == 3) {
5723 }
else if (
fType == 31) {
5725 }
else if (
fType < 0) {
5727 }
else if (
fType == 0 &&
fID == -1) {
5730 if (hasCustomStreamer) {
5738 }
else if (
fType <= 2) {
5765 TClass *originalClass =
nullptr;
5784 }
else if (
fType == 31) {
5809 }
else if (
fType == 4) {
5811 }
else if (
fType == 41) {
5823 }
else if (
fType == 3) {
5825 }
else if (
fType == 31) {
5827 }
else if (
fType < 0) {
5829 }
else if (
fType <=2) {
5851 if (
name == 0)
return;
5861 for (
Int_t i = 0; i < nbranches; ++i) {
5958void TBranchElement::Streamer(
TBuffer& R__b)
6023 else if (
fType == 4) {
6054 const char* motherFileName = treeFileName;
6055 if (mother && (mother !=
this)) {
6081 char* dot = (
char*) strchr(
name,
'.');
6084 if (nch && (
name[nch-1] ==
'.')) {
6103 char* pointer = (
char*) (objptr + element->
GetOffset());
6240 for (
Int_t elemID = 0; elemID < ndata; ++elemID) {
6262 if ((btype == 31) || (btype == 41)) {
6274 unroll =
Unroll(
name, clParent, clOfBase, ptr + offset, basketsize, splitlevel+splitSTLP, btype);
6333 Int_t subSplitlevel = splitlevel-1;
6334 if (btype == 31 || btype == 41 || elem->
CannotSplit()) {
6349 Int_t unroll =
Unroll(branchname, clParent, elemClass, ptr + offset, basketsize, splitlevel-1+splitSTLP, btype);
6361 splitSTLP &&
fType != 4 )
6366 basketsize, splitlevel - 1+splitSTLP, sinfo, elemID );
6374 Int_t subSplitlevel = splitlevel - 1;
6375 if ((btype == 31) || (btype == 41) || elem->
CannotSplit()) {
6379 TBranchElement* branch =
new TBranchElement(
this, branchname, sinfo, elemID, ptr + offset, basketsize, subSplitlevel+splitSTLP, btype);
#define R__unlikely(expr)
unsigned long long ULong64_t
static void PrintElements(const TStreamerInfo *info, const TStreamerInfoActions::TIDs &ids)
Print branch parameters.
static void R__CleanName(std::string &name)
Remove trailing dimensions and make sure there is a trailing dot.
void Error(const char *location, const char *msgfmt,...)
R__EXTERN TVirtualMutex * gInterpreterMutex
R__EXTERN TVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
#define R__LOCKGUARD_IMT(mutex)
#define R__LOCKGUARD(mutex)
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
TIOFeatures provides the end-user with the ability to change the IO behavior of data written via a TT...
Manages buffers for branches of a Tree.
Int_t GetNevBufSize() const
A Branch for the case of an object.
void ReadLeavesClonesMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
Bool_t fInit
! Initialization flag for branch assignment
virtual void ResetAddress()
Set branch address to zero and free all allocated memory.
void SetActionSequence(TClass *originalClass, TStreamerInfo *localInfo, TStreamerInfoActions::TActionSequence::SequenceGetter_t create, TStreamerInfoActions::TActionSequence *&actionSequence)
Set the sequence of actions needed to read the data out of the buffer.
char * fObject
! Pointer to object at *fAddress
TStreamerInfo * fInfo
! Pointer to StreamerInfo
Int_t fSTLtype
! STL container type
void ReadLeavesCustomStreamer(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetParentClass(TClass *clparent)
TBranchElement * fBranchCount2
pointer to secondary branchcount branch
Int_t fNdata
! Number of data in this branch
const char * GetIconName() const
Return icon name depending on type of branch element.
void FillLeavesCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
TString fClassName
Class name of referenced object.
virtual void Print(Option_t *option="") const
Print TBranch parameters.
TStreamerInfoActions::TActionSequence * fFillActionSequence
! Set of actions to be executed to write the data to the basket.
Bool_t fInInitInfo
! True during the 2nd part of InitInfo (cut recursion).
TStreamerInfo * GetInfo() const
Get streamer info for the branch class.
void ReadLeavesCollection(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill the basket buffer.
virtual void SetType(Int_t btype)
void FillLeavesMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void SetBranchCount(TBranchElement *bre)
Set the branch counter for this branch.
virtual char * GetAddress() const
Get the branch address.
static void SwitchContainer(TObjArray *)
Modify the container type of the branches.
void SetReadActionSequence()
Set the sequence of actions needed to read the data out of the buffer.
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any.
virtual Int_t GetExpectedType(TClass *&clptr, EDataType &type)
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
TVirtualCollectionProxy * GetCollectionProxy()
Return the collection proxy describing the branch content, if any.
@ kOwnOnfileObj
We are the owner of fOnfileObject.
@ kAddressSet
The addressing set have been called for this branch.
@ kDecomposedObj
More explicit alias for kMakeClass.
@ kDeleteObject
We are the owner of fObject.
@ kCache
Need to pushd/pop fOnfileObject.
void SetupAddressesImpl()
If the branch address is not set, we set all addresses starting with the top level parent branch.
TClassRef fParentClass
! Reference to class definition in fParentName
void BuildTitle(const char *name)
Set branch and leaf name and title in the case of a container sub-branch.
virtual Int_t GetMaximum() const
Return maximum count value of the branchcount if any.
TString fParentName
Name of parent class.
void ReadLeavesCollectionSplitPtrMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
Double_t GetValue(Int_t i, Int_t len, Bool_t subarr=kFALSE) const
TClassRef fBranchClass
! Reference to class definition in fClassName
TStreamerInfoActions::TIDs fNewIDs
! Nested List of the serial number of all the StreamerInfo to be used.
Int_t GetStreamerType() const
TClass * GetCurrentClass()
Return a pointer to the current type of the data member corresponding to branch element.
UInt_t fCheckSum
CheckSum of class.
TStreamerInfoActions::TActionSequence * fReadActionSequence
! Set of actions to be executed to extract the data from the basket.
void FillLeavesClones(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
virtual void SetAddress(void *addobj)
Point this branch at an object.
virtual TLeaf * FindLeaf(const char *name)
Find the leaf corresponding to the name 'searchname'.
void ReadLeavesMemberBranchCount(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetReadLeavesPtr()
Set the ReadLeaves pointer to execute the expected operations.
Int_t Unroll(const char *name, TClass *cltop, TClass *cl, char *ptr, Int_t basketsize, Int_t splitlevel, Int_t btype)
Split class cl into sub-branches of this branch.
void FillLeavesMakeClass(TBuffer &b)
Write leaves into i/o buffers for this branch.
void FillLeavesCollectionSplitVectorPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void FillLeavesCollection(TBuffer &b)
Write leaves into i/o buffers for this branch.
Int_t fID
element serial number in fInfo
Bool_t IsMissingCollection() const
Detect a collection written using a zero pointer in old versions of root.
void FillLeavesMemberCounter(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void Browse(TBrowser *b)
Browse the branch content.
void SetAddressImpl(void *addr, Bool_t implied)
See TBranchElement::SetAddress.
void SetBranchCount2(TBranchElement *bre)
void FillLeavesCollectionSplitPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of a BranchElement and return total number of bytes.
TStreamerInfo * GetInfoImp() const
Get streamer info for the branch class.
virtual void SetTargetClass(const char *name)
Set the name of the class of the in-memory object into which the data will loaded.
virtual void ResetDeleteObject()
Release ownership of any allocated objects.
virtual const char * GetParentName() const
void ValidateAddress() const
TVirtualArray * GetOnfileObject() const
TVirtualCollectionIterators * fWriteIterators
! holds the read (non-staging) iterators when the branch is of fType==4 and associative containers.
void PrintValue(Int_t i) const
Prints values of leaves.
TVirtualArray * fOnfileObject
! Place holder for the onfile representation of data members.
virtual const char * GetTypeName() const
Return type name of element in the branch.
void FillLeavesAssociativeCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void Init(TTree *tree, TBranch *parent, const char *name, TStreamerInfo *sinfo, Int_t id, char *pointer, Int_t basketsize=32000, Int_t splitlevel=0, Int_t btype=0)
Init when the branch object is not a TClonesArray nor an STL container.
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
TClassRef fClonesClass
! Reference to class definition in fClonesName
virtual void * GetValuePointer() const
Returns pointer to first data element of this branch.
void ReadLeavesImpl(TBuffer &b)
Unconfiguration Read Leave function.
void SetupInfo()
Set the value of fInfo.
void FillLeavesImpl(TBuffer &b)
Unconfiguration Fill Leave function.
void FillLeavesClonesMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
TClassRef fCurrentClass
! Reference to current (transient) class definition
char * GetObject() const
Return a pointer to our object.
TStreamerInfo * FindOnfileInfo(TClass *valueClass, const TObjArray &branches) const
void ReadLeavesClones(TBuffer &b)
Read leaves into i/o buffers for this branch.
Bool_t IsFolder() const
Return kTRUE if more than one leaf, kFALSE otherwise.
virtual TString GetFullName() const
Return the 'full' name of the branch.
Bool_t GetMakeClass() const
Return whether this branch is in a mode where the object are decomposed or not (Also known as MakeCla...
Int_t * fBranchOffset
! Sub-Branch offsets with respect to current transient class
virtual void ResetInitInfo(bool recurse)
Reset offset and StremerInfo information from this branch.
friend class TLeafElement
void ReadLeavesMakeClass(TBuffer &b)
Read leaves into i/o buffers for this branch.
TBranchElement()
Default and I/O constructor.
void FillLeavesCustomStreamer(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual const char * GetClonesName() const
virtual TClass * GetClass() const
Int_t fMaximum
Maximum entries for a TClonesArray or variable array.
T GetTypedValue(Int_t i, Int_t len, Bool_t subarr=kFALSE) const
void ReadLeavesMemberCounter(TBuffer &b)
Read leaves into i/o buffers for this branch.
Int_t fBranchID
! ID number assigned by a TRefTable.
TVirtualCollectionIterators * fIterators
! holds the iterators when the branch is of fType==4.
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
void ReleaseObject()
Delete any object we may have allocated on a previous call to SetAddress.
TClassRef fTargetClass
! Reference to the target in-memory class
void FillLeavesMemberBranchCount(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void SetMissing()
Set offset of the object (to which the data member represented by this branch belongs) inside its con...
virtual Bool_t SetMakeClass(Bool_t decomposeObj=kTRUE)
Set the branch in a mode where the object are decomposed (Also known as MakeClass mode).
virtual void SetBasketSize(Int_t buffsize)
Reset the basket size for all sub-branches of this branch element.
TString fClonesName
Name of class in TClonesArray (if any)
TBranchElement * fBranchCount
pointer to primary branchcount branch
void ReadLeavesMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch after a Merge operation (drop data but keep customizations)
virtual ~TBranchElement()
Destructor.
Bool_t fInitOffsets
! Initialization flag to not endlessly recalculate offsets
Version_t fClassVersion
Version number of class.
TVirtualCollectionPtrIterators * fPtrIterators
! holds the iterators when the branch is of fType==4 and it is a split collection of pointers.
virtual void InitInfo()
Init the streamer info for the branch class, try to compensate for class code unload/reload and schem...
virtual void InitializeOffsets()
Initialize the base class subobjects offsets of our sub-branches and set fOffset if we are a containe...
virtual void SetupAddresses()
If the branch address is not set, we set all addresses starting with the top level parent branch.
TClass * GetParentClass()
Return a pointer to the parent class of the branch element.
TVirtualCollectionProxy * fCollProxy
! collection interface (if any)
void SetFillActionSequence()
Set the sequence of actions needed to write the data out from the buffer.
virtual void SetOffset(Int_t offset)
Set offset of the object (to which the data member represented by this branch belongs) inside its con...
virtual void Reset(Option_t *option="")
Reset a Branch.
Int_t fStreamerType
branch streamer type
void ReadLeavesCollectionSplitVectorPtrMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetFillLeavesPtr()
Set the FillLeaves pointer to execute the expected operations.
void ReadLeavesCollectionMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
A branch containing and managing a TRefTable for TRef autoloading.
virtual void SetRequestedEntry(Long64_t entry)
virtual Int_t SetParent(const TObject *obj, Int_t branchID)
Set the current parent branch.
A Branch handling STL collection of pointers (vectors, lists, queues, sets and multisets) while stori...
virtual void SetAddress(void *addr)
Set Address.
A TTree is a list of TBranches.
virtual void ResetAddress()
Reset the address of the branch.
virtual void SetAutoDelete(Bool_t autodel=kTRUE)
Set the automatic delete bit.
TString fFileName
Name of file where buffers are stored ("" if in same file as Tree header)
Int_t fEntryOffsetLen
Initial Length of fEntryOffset table in the basket buffers.
Int_t fMaxBaskets
Maximum number of Baskets so far.
FillLeaves_t fFillLeaves
! Pointer to the FillLeaves implementation to use.
void(TBranch::* ReadLeaves_t)(TBuffer &b)
TObjArray fLeaves
-> List of leaves of this branch
char * fAddress
! Address of 1st leaf (variable or object)
TObjArray * GetListOfBranches()
virtual TList * GetBrowsables()
Returns (and, if 0, creates) browsable objects for this branch See TVirtualBranchBrowsable::FillListO...
Int_t fOffset
Offset of this branch.
Long64_t * fBasketEntry
[fMaxBaskets] Table of first entry in each basket
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
const char * GetFileName() const
TIOFeatures GetIOFeatures() const
Returns the IO settings currently in use for this branch.
Long64_t fReadEntry
! Current entry number when reading
virtual void SetAddressImpl(void *addr, Bool_t)
TBranch * GetSubBranch(const TBranch *br) const
Find the parent branch of child.
ReadLeaves_t fReadLeaves
! Pointer to the ReadLeaves implementation to use.
void(TBranch::* FillLeaves_t)(TBuffer &b)
Bool_t IsFolder() const
Return kTRUE if more than one leaf or browsables, kFALSE otherwise.
Bool_t IsAutoDelete() const
Return kTRUE if an existing object in a TBranchObject must be deleted.
virtual TLeaf * FindLeaf(const char *name)
Find the leaf corresponding to the name 'searchname'.
Long64_t GetReadEntry() const
Long64_t GetEntries() const
Int_t fNleaves
! Number of leaves
Int_t fSplitLevel
Branch split level.
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
Int_t * fBasketBytes
[fMaxBaskets] Length of baskets on file
virtual void Print(Option_t *option="") const
Print TBranch parameters.
TObjArray fBranches
-> List of Branches of this branch
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch.
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
TDirectory * fDirectory
! Pointer to directory where this branch buffers are stored
TObjArray fBaskets
-> List of baskets of this branch
void SetIOFeatures(TIOFeatures &features)
TBranch * fMother
! Pointer to top-level parent branch in the tree.
virtual Bool_t SetMakeClass(Bool_t decomposeObj=kTRUE)
Set the branch in a mode where the object are decomposed (Also known as MakeClass mode).
TBranch * fParent
! Pointer to parent branch.
virtual void SetBasketSize(Int_t buffsize)
Set the basket size The function makes sure that the basket size is greater than fEntryOffsetlen.
Int_t fWriteBasket
Last basket number written.
Long64_t * fBasketSeek
[fMaxBaskets] Addresses of baskets on file
TObjArray * GetListOfLeaves()
Int_t fReadBasket
! Current basket number when reading
Int_t fBasketSize
Initial Size of Basket Buffer.
virtual void Reset(Option_t *option="")
Reset a Branch.
Long64_t fEntryNumber
Current entry number (last one filled in this branch)
TBranch * GetMother() const
Get our top-level parent branch in the tree.
Int_t fCompress
Compression level and algorithm.
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill Basket buffer.
Long64_t fEntries
Number of entries.
TTree * fTree
! Pointer to Tree header
Using a TBrowser one can browse all ROOT objects.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TClassRef is used to implement a permanent reference to a TClass object.
void SetName(const char *new_name)
TClass * GetClass() const
const char * GetClassName()
TClass instances represent classes, structs and namespaces in the ROOT type system.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
TVirtualStreamerInfo * GetStreamerInfoAbstractEmulated(Int_t version=0) const
For the case where the requestor class is emulated and this class is abstract, returns a pointer to t...
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
TList * GetListOfRealData() const
Bool_t CanIgnoreTObjectStreamer()
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
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 IsTObject() const
Return kTRUE is the class inherits from TObject.
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,...
Long_t Property() const
Returns the properties of the TClass as a bit field stored as a Long_t value.
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...
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
Bool_t IsVersioned() const
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
Version_t GetClassVersion() const
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
@ kHasCustomStreamerMember
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.
An array of clone (identical) objects.
virtual void ExpandCreateFast(Int_t n)
Expand or shrink the array to n elements and create the clone objects by calling their default ctor.
TClass * GetClass() const
virtual const char * GetName() const
Return name of this collection.
void Browse(TBrowser *b)
Browse this collection (called by TBrowser).
virtual Int_t GetEntries() const
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
All ROOT classes may have RTTI (run time type identification) support added.
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
Basic data type descriptor (datatype information is obtained from CINT).
Describe directory structure in memory.
virtual Int_t WriteTObject(const TObject *obj, const char *name=nullptr, Option_t *="", Int_t=0)
See TDirectoryFile::WriteTObject for details.
virtual TFile * GetFile() const
virtual Bool_t IsWritable() const
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Int_t GetCompressionSettings() const
A TLeaf for the general case when using the branches created via a TStreamerInfo (i....
virtual void SetLeafCount(TLeaf *leaf)
Set the leaf count of this leaf.
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
virtual Int_t GetMaximum() const
virtual void SetAddress(void *add=0)
virtual void SetRange(Bool_t range=kTRUE)
virtual Int_t GetLenStatic() const
Return the fixed length of this leaf.
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Int_t IndexOf(const TObject *obj) const
Int_t GetEntriesFast() const
TObject ** GetObjectRef() const
Int_t GetEntries() const
Return the number of objects in array (i.e.
TObject * UncheckedAt(Int_t i) const
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
TObject * At(Int_t idx) const
Mother of all ROOT objects.
friend class TClonesArray
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
R__ALWAYS_INLINE Bool_t IsZombie() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
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.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
TRangeDynCast is an adaptater class that allows the typed iteration through a TCollection.
The TRealData class manages the effective list of all data members for a given class.
Long_t GetThisOffset() const
const char * GetCountName() const
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
virtual Bool_t IsTransient() const
Return kTRUE if the element represent an entity that is not written to the disk (transient members,...
virtual Bool_t IsaPointer() const
const char * GetTypeName() const
virtual Bool_t CannotSplit() const
Returns true if the element cannot be split, false otherwise.
TClass * GetClass() const
const char * GetTypeNameBasic() const
Return type name of this element in case the type name is not a standard basic type,...
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual void ls(Option_t *option="") const
Print the content of the element.
static SequencePtr WriteMemberWiseActionsViaProxyGetter(TStreamerInfo *, TVirtualCollectionProxy *collectionProxy, TClass *)
void Print(Option_t *="") const
This method must be overridden when a class wants to print itself.
static SequencePtr WriteMemberWiseActionsGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
static SequencePtr ConversionReadMemberWiseActionsViaProxyGetter(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *originalClass)
static SequencePtr WriteMemberWiseActionsCollectionCreator(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *)
static SequencePtr ReadMemberWiseActionsCollectionCreator(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *)
static SequencePtr ReadMemberWiseActionsGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
SequencePtr(*)(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *originalClass) SequenceGetter_t
static SequencePtr WriteMemberWiseActionsCollectionGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
ActionContainer_t fActions
TActionSequence * CreateSubSequence(const std::vector< Int_t > &element_ids, size_t offset)
static SequencePtr ReadMemberWiseActionsCollectionGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
void AddToOffset(Int_t delta)
static SequencePtr ReadMemberWiseActionsViaProxyGetter(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *)
Base class of the Configurations.
TVirtualStreamerInfo * fInfo
TStreamerInfo form which the action is derived.
UInt_t fElemId
Identifier of the TStreamerElement.
Describe Streamer information for one class version.
TObjArray * GetElements() const
TStreamerElement * GetStreamerElement(const char *datamember, Int_t &offset) const
Return the StreamerElement of "datamember" inside our class or any of its base classes.
T GetTypedValue(char *pointer, Int_t i, Int_t j, Int_t len) const
Return value of element i in object at pointer.
Int_t GetNelement() const
void PrintValue(const char *name, char *pointer, Int_t i, Int_t len, Int_t lenmax=1000) const
print value of element i in object at pointer The function may be called in two ways: -method1 len < ...
T GetTypedValueSTLP(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
Return value of element i in object number j in a TClonesArray and eventually element k in a sub-arra...
TClass * GetClass() const
void ls(Option_t *option="") const
List the TStreamerElement list and also the precomputed tables if option contains the string "incOrig...
T GetTypedValueSTL(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
Return value of element i in object number j in a TClonesArray and eventually element k in a sub-arra...
TStreamerElement * GetElement(Int_t id) const
T GetTypedValueClones(TClonesArray *clones, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
void PrintValueSTL(const char *name, TVirtualCollectionProxy *cont, Int_t i, Int_t eoffset, Int_t lenmax=1000) const
Print value of element i in a TClonesArray.
Int_t GetClassVersion() const
UInt_t GetCheckSum() const
void PrintValueClones(const char *name, TClonesArray *clones, Int_t i, Int_t eoffset, Int_t lenmax=1000) const
Print value of element i in a TClonesArray.
const char * GetCountName() const
static const Ssiz_t kNPOS
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
Ssiz_t Last(char c) const
Find last occurrence of a character c.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
A TTree represents a columnar dataset.
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
Int_t GetDefaultEntryOffsetLen() const
virtual TObjArray * GetListOfLeaves()
TDirectory * GetDirectory() const
virtual TBranchRef * GetBranchRef() const
virtual Long64_t GetReadEntry() const
@ kSplitCollectionOfPointers
Long64_t GetDebugMin() const
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=0, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
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
void SetSize(UInt_t size)
Small helper class to generically acquire and release iterators.
void CreateIterators(void *collection, TVirtualCollectionProxy *proxy)
virtual Int_t GetProperties() const
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE) const
virtual EDataType GetType() const =0
virtual void Clear(const char *opt="")=0
virtual void * New() const
virtual TClass * GetValueClass() const =0
virtual void Commit(void *)=0
virtual void * At(UInt_t idx)=0
virtual Int_t GetCollectionType() const =0
virtual UInt_t Size() const =0
virtual TVirtualCollectionProxy * Generate() const =0
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
virtual Bool_t HasPointers() const =0
virtual TClass * GetCollectionClass() const
void CreateIterators(void *collection, TVirtualCollectionProxy *proxy)
Abstract Interface class describing Streamer information for one class.
Bool_t IsCompiled() const
virtual TStreamerElement * GetElement(Int_t id) const =0
virtual TObjArray * GetElements() const =0
virtual TClass * GetClass() const =0
basic_string_view< char > string_view
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
static constexpr double s
Short_t Min(Short_t a, Short_t b)
std::vector< TIDNode > TIDs