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));
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)
182, fCheckSum(sinfo->GetCheckSum())
183, fClassVersion(sinfo->
GetClass()->GetClassVersion())
198, fTargetClass(fClassName)
205, fReadActionSequence(0)
206, fFillActionSequence(0)
215 Init(
tree, 0, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
229, fCheckSum(sinfo->GetCheckSum())
230, fClassVersion(sinfo->
GetClass()->GetClassVersion())
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) {
1150 }
else if (
fType == 4) {
1153 Error(
"BuildTitle",
"This cannot happen, fType of parent is not 3 or 4!");
1157 const char* fin = strrchr(bre->
GetTitle(),
'.');
1190 if ((stype > 40) && (stype < 61)) {
1232 Error(
"Fill",
"attempt to fill branch %s while addresss is not set",
GetName());
1255 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1267 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1275 for (
Int_t i = 0; i < nbranches; ++i) {
1278 nwrite = branch->
FillImpl(imtHelper);
1280 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d",
GetName(), branch->
GetName(), nwrite);
1293 printf(
"Fill: %lld, branch=%s, nbytes=%d\n", entry,
GetName(), nbytes);
1331 }
else if (
fType == 31) {
1352 Error(
"FillLeaves",
"The branch counter address was zero!");
1358 Error(
"FillLeaves",
"Clonesa: %s, n=%d, sorry not supported yet",
GetName(),
n);
1381 for (
Int_t ii = 0; ii <
n; ++ii) {
1382 b.WriteDouble32(&(xx[ii]),se);
1391 for (
Int_t ii = 0; ii <
n; ++ii) {
1392 b.WriteFloat16(&(xx[ii]),se);
1474 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1505 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1535 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1566 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1621 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1626 char **end = arr +
n;
1703 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1747 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1762 std::size_t dim =
name.find_first_of(
"[");
1763 if (dim != std::string::npos) {
1786 if (se && se->
IsBase()) {
1794 std::string longnm_parent;
1798 longnm_parent +=
name;
1804 for(
Int_t i = 0; i < nbranches; ++i) {
1807 const char *brname = branch->
GetName();
1808 UInt_t brlen = strlen(brname);
1809 if (brname[brlen-1]==
']') {
1810 const char *dim = strchr(brname,
'[');
1812 brlen = dim - brname;
1815 if (namelen == brlen
1816 && strncmp(
name,brname,brlen) == 0) {
1819 if (brlen == longnm.length()
1820 && strncmp(longnm.c_str(),brname,brlen) == 0) {
1824 if (brlen == longnm_parent.length()
1825 && strncmp(longnm_parent.c_str(),brname,brlen) == 0) {
1829 if (namelen>brlen &&
name[brlen]==
'.' && strncmp(
name,brname,brlen)==0) {
1840 for(
Int_t i = 0; i < nbranches; ++i) {
1846 if (si && br->
GetID() >= 0) {
1848 if (se && se->
IsBase()) {
1870 if (parent==
this || parent->
GetID()<0 )
return 0;
1875 if (! se->
IsBase() )
return 0;
1883 std::string longname( grand_parent->
GetName() );
1889 if ( longname == leafname ) {
1930 if (valueClass == subbe->fInfo->
GetClass()) {
1931 localInfo = subbe->fInfo;
1966 if (targetValueClass && localInfo->
GetClass() != targetValueClass) {
1977 for (
size_t i =0; i < ndata; ++i) {
1992 ename = ename.
Remove(pos);
2000 ids.back().fElement = nextel;
2001 ids.back().fInfo = info;
2007 if (!be && nextel->
IsBase()) {
2012 if (subprefix.Length() && subprefix[subprefix.Length()-1] ==
'.')
2013 subprefix.Remove(subprefix.Length()-1);
2019 TClass *expectedClass =
nullptr;
2026 for (
Int_t bi = 0; bi < nbranches; ++bi) {
2028 if (subprefix != branch->
GetName())
2042 if (elementClass && (!be || be->
GetType() == -2)) {
2056 subprefix = ename +
".";
2058 auto nbranches = search->GetEntriesFast();
2059 bool foundRelatedSplit =
false;
2060 for (
Int_t bi = 0; bi < nbranches; ++bi) {
2063 if (!foundRelatedSplit)
2064 foundRelatedSplit = matchSubPrefix;
2075 if (!foundRelatedSplit) {
2085 ids.emplace_back(nextinfo, offset + nextel->
GetOffset());
2088 ids.back().fNestedIDs->fOwnOnfileObject =
kTRUE;
2090 ids.back().fNestedIDs->fOnfileObject = onfileObject;
2091 GatherArtificialElements(branches, ids.back().fNestedIDs->fIDs, subprefix, nextinfo, offset + nextel->
GetOffset());
2092 if (ids.back().fNestedIDs->fIDs.empty())
2126 if ( !targetClass ) {
2127 Error(
"InitInfo",
"The target class dictionary is not present!" );
2145 target +=
"@@emulated";
2154 if( targetClass != cl ) {
2171 if( targetClass != cl )
2211 Error(
"InitInfo",
"StreamerInfo is not compiled.");
2251 Int_t firstindex = 0;
2252 Int_t lastindex = nbranches - 1;
2259 if (!subbranch->
fInfo)
2263 for(
Int_t i = index - 1; i >= 0; --i) {
2266 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2271 if (!subbranch->
fInfo)
2274 for(
Int_t i = index; i < nbranches; ++i) {
2277 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2289 for(
Int_t i = 0; i < nbranches; ++i) {
2292 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2299 for (
Int_t i = firstindex; i <= lastindex; ++i) {
2302 if (
this != subbranch) {
2304 if (!subbranch->
fInfo)
2307 if (subbranch->
fInfo == info)
2309 else if (subbranch->
fInfo ==
nullptr && subbranch->
fBranchClass == currentClass) {
2325 Error(
"SetOnfileObject (lambda)",
"2 distincts fOnfileObject are in the hierarchy of %s for type %s",
2330 seenExisting =
kTRUE;
2334 lastbranch = subbranch;
2339 if (lastbranch !=
this)
2348 size_t pos =
s.rfind(
'.');
2349 if (pos != std::string::npos) {
2350 s =
s.substr(pos+1);
2352 while ((pos =
s.rfind(
'[')) != std::string::npos) {
2353 s =
s.substr(0, pos);
2360 for (
size_t i = 0; i < ndata; ++i) {
2392 for (
size_t i =
fID+1+(
fNewIDs.size()); i < ndata; ++i) {
2395 std::string ename = nextel->
GetName();
2396 if (ename[0] ==
'*')
2397 ename = ename.substr(1);
2399 while ((pos = ename.rfind(
'[')) != std::string::npos) {
2400 ename = ename.substr(0, pos);
2432 fNewIDs.back().fElement = nextel;
2439 for (
size_t i = 0; i < ndata; ++i) {
2454 SetOnfileObject(
fInfo);
2469 auto start = prefix.
Length();
2470 if (prefix[start - 1] ==
'.')
2473 auto cutoff = view.find_last_of(
'.');
2474 if (cutoff != std::string::npos) {
2475 prefix.
Remove(cutoff + 1);
2478 if (prefix[prefix.
Length()-1] !=
'.') {
2491 SetOnfileObject(localInfo);
2522 const char* className = 0;
2567 Fatal(
"GetCollectionProxy",
2568 "Can not create a Collection Proxy of any kind for the class \"%s\" needed by the branch \"%s\" of the TTree \"%s\"!",
2572 "Fixing the collection proxy of the class \"%s\" \n"
2573 "\tneeded by the branch \"%s\" of the TTree \"%s\" to be similar to \"%s\".",
2579 }
else if (
fType == 41) {
2622 if (newInfo != brInfo) {
2631 if (newType.
Length()==0) {
2714 for (
Int_t i = 0; i < nbranches; ++i) {
2739 char **end = arr +
fNdata;
2742 }
else if (
fType == 4) {
2781 Info(
"GetEntry",
"%lld, branch=%s, nbytes=%d", entry,
GetName(), nbytes);
2799 if ((
type == -1) || (
fID == -1)) {
2808 if (!expectedClass) {
2818 Error(
"GetExpectedType",
"Did not find the type for %s",
GetName());
2831 if (!mother || mother==
this || mother->
GetType() == 3 || mother->
GetType() == 4) {
2836 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
2839 return motherName +
"." +
fName;
2848 return "TBranchElement-folder";
2850 return "TBranchElement-leaf";
2911 const char *types[20] = {
2934 return types[itype];
2943template <
typename T>
2994 }
else if (
fType <= 2) {
3019 }
else if (
fType == 41) {
3072 }
else if (
fType == 4) {
3075 }
else if (
fType == 31) {
3080 }
else if (
fType == 41) {
3085 }
else if (
fType <= 2) {
3100 }
else if (
fType == 41) {
3102 }
else if (prID < 0) {
3107 char **val = (
char**)(
object+
GetInfoImp()->TStreamerInfo::GetElementOffset(prID));
3162 Warning(
"InitializeOffsets",
"No branch class set for branch: %s",
GetName());
3179 Int_t localOffset = 0;
3192 Warning(
"InitializeOffsets",
"Streamer info for branch: %s has no elements array!",
GetName());
3199 Warning(
"InitializeOffsets",
"Cannot get streamer element for branch: %s!",
GetName());
3220 Error(
"InitializeOffsets",
"Could not find class for branch: %s",
GetName());
3234 stlParentName = br->
GetName();
3243 for (
Int_t subBranchIdx = 0; subBranchIdx < nbranches; ++subBranchIdx) {
3244 bool alternateElement =
false;
3248 if (subBranch == 0) {
3262 Warning(
"InitializeOffsets",
"No streamer info for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3267 Warning(
"InitializeOffsets",
"No elements array for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3273 if (!subBranchElement) {
3274 Warning(
"InitializeOffsets",
"No streamer element for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3288 typedef TStreamerInfoActions::ActionContainer_t::iterator iterator;
3291 iter != end; ++iter) {
3296 subBranchElement =
e;
3297 alternateElement =
true;
3304 localOffset = subBranchElement->
GetOffset();
3312 && CanSelfReference(subBranchElement->
GetClass()))
3328 Warning(
"InitializeOffsets",
"Branch '%s' has no mother!",
GetName());
3334 if (motherName.
Length() && strchr(motherName.
Data(),
'.')) {
3338 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
3339 motherDotAtEnd =
kTRUE;
3343 if ((subBranch->
fType == 1) || (subBranchElement && subBranchElement->
IsBase())) {
3351 isBaseSubBranch =
kTRUE;
3355 if ((subBranch->
fType == 31) || (subBranch->
fType == 41)) {
3357 isContDataMember =
kTRUE;
3382 if (motherDotAtEnd) {
3386 if (!stlParentNameUpdated && stlParentName.
Length()) {
3388 stlParentNameUpdated =
kTRUE;
3390 }
else if (motherDot) {
3407 if (!stlParentNameUpdated && stlParentName.
Length()) {
3415 if (!stlParentNameUpdated && stlParentName.
Length()) {
3421 stlParentNameUpdated =
kTRUE;
3422 if (isBaseSubBranch) {
3436 if (dataName[0] ==
'.') {
3446 if (motherDotAtEnd) {
3449 }
else if (motherDot) {
3499 RemovePrefix(dataName, parentName);
3504 if (dataName[0] ==
'.') {
3511 if (dataName[dataName.
Length()-1] ==
'.') {
3553 target +=
"@@emulated";
3571 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class, and cannot get class for clones class: '%s'!", subBranch->
GetName(),
GetClonesName());
3575 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass->
GetName());
3579 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass ? pClass->
GetName() :
"unknowned class");
3584 pClass = branchClass;
3589 if (renamed && pClass) {
3590 if (pClass == branchClass) {
3605 if( !strncmp( stlParentName.
Data(), dataName.
Data(), stlParentName.
Length()-1 )
3606 && dataName[ stlParentName.
Length() ] ==
'.' )
3614 if (alternateElement) {
3617 if (dotpos !=
kNPOS) ++dotpos;
else dotpos = 0;
3639 Error(
"InitializeOffsets",
3640 "Could not find the real data member '%s' when constructing the branch '%s' [Likely missing ShowMember].",
3645 Info(
"InitializeOffsets",
3646 "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'. ",
3650 Fatal(
"InitializeOffsets",
3651 "Could not find the real data member '%s' when constructing the branch '%s' [Likely an internal error, please report to the developers].",
3659 if (isBaseSubBranch) {
3662 Warning(
"InitializeOffsets",
"Could not find the data member name for branch '%s' with parent branch '%s', assuming offset is zero!", subBranch->
GetName(),
GetName());
3670 if (isContDataMember) {
3684 if (isBaseSubBranch) {
3691 subBranch->
SetOffset(offset - localOffset);
3701 }
else if (isSplit) {
3702 if (isBaseSubBranch) {
3713 if (isBaseSubBranch) {
3753 if (nbranches >= 1) {
3757 return browsables && browsables->
GetSize();
3772 if (basket &&
fTree) {
3785 bufbegin = entryOffset[entry-
first];
3788 bufnext = entryOffset[entry+1-
first];
3792 if (bufnext == bufbegin) {
3810 for(
auto &cursor : ids) {
3811 auto id = cursor.fElemID;
3817 Error(
"TBranchElement::Print",
"Element for id #%d not found in StreamerInfo for %s",
3821 }
else if (cursor.fNestedIDs) {
3822 Printf(
" Within subobject of type %s offset = %d", cursor.fNestedIDs->fInfo->GetName(), cursor.fNestedIDs->fOffset);
3823 PrintElements(cursor.fNestedIDs->fInfo, cursor.fNestedIDs->fIDs);
3831 if (strncmp(option,
"debugAddress",strlen(
"debugAddress"))==0) {
3832 if (strlen(option)==strlen(
"debugAddress")) {
3833 Printf(
"%-24s %-16s %2s %4s %-16s %-16s %8s %8s %s %s\n",
3834 "Branch Name",
"Streamer Class",
"ID",
"Type",
"Class",
"Parent",
"pOffset",
"fOffset",
"fObject",
"fOnfileObject");
3843 Printf(
"%-16s %2d %4d %-16s %-16s %8x %8x %p %p%s\n",
3848 for (
Int_t i = 0; i < nbranches; ++i) {
3850 subbranch->
Print(
"debugAddressSub");
3854 if (strncmp(option,
"debugInfo",strlen(
"debugInfo"))==0) {
3866 Printf(
" With elements:");
3870 Printf(
" with read actions:");
3872 Printf(
" with write actions:");
3881 Printf(
" with read actions:");
3883 Printf(
" with write actions:");
3886 TString suboption =
"debugInfoSub";
3887 suboption += (option+strlen(
"debugInfo"));
3888 for (
Int_t i = 0; i < nbranches; ++i) {
3890 subbranch->
Print(suboption);
3903 Printf(
"*............................................................................*");
3908 for (
Int_t i=0;i<nbranches;i++) {
3910 branch->
Print(option);
3967 }
else if (
fType <= 2) {
3984 }
else if (
fType == 3) {
3986 }
else if (
fType == 31) {
3991 }
else if (
fType == 41) {
4008 Fatal(
"ReadLeaves",
"The ReadLeaves function has not been configured for %s",
GetName());
4026 b.SetBufferOffset(
b.Length() -
sizeof(
n));
4028 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());
4040 for (
Int_t i=0; i<nbranches; i++) {
4057 if (atype > 54)
return;
4066 if (!len_where)
return;
4071 for( k=0; k<
n; k++) {
4072 char **where = &(((
char**)
fAddress)[k]);
4076 case 1: {length = ((
Char_t*) len_where)[k];
break;}
4077 case 2: {length = ((
Short_t*) len_where)[k];
break;}
4078 case 3: {length = ((
Int_t*) len_where)[k];
break;}
4079 case 4: {length = ((
Long_t*) len_where)[k];
break;}
4081 case 6: {length = ((
Int_t*) len_where)[k];
break;}
4083 case 11: {length = ((
UChar_t*) len_where)[k];
break;}
4084 case 12: {length = ((
UShort_t*) len_where)[k];
break;}
4085 case 13: {length = ((
UInt_t*) len_where)[k];
break;}
4086 case 14: {length = ((
ULong_t*) len_where)[k];
break;}
4087 case 15: {length = ((
UInt_t*) len_where)[k];
break;}
4088 case 16: {length = ((
Long64_t*) len_where)[k];
break;}
4089 case 17: {length = ((
ULong64_t*)len_where)[k];
break;}
4090 case 18: {length = ((
Bool_t*) len_where)[k];
break;}
4094 if (length <= 0)
continue;
4095 if (isArray == 0)
continue;
4097 case 1: {*where=
new char[
sizeof(
Char_t)*length];
b.ReadFastArray((
Char_t*) *where, length);
break;}
4098 case 2: {*where=
new char[
sizeof(
Short_t)*length];
b.ReadFastArray((
Short_t*) *where, length);
break;}
4099 case 3: {*where=
new char[
sizeof(
Int_t)*length];
b.ReadFastArray((
Int_t*) *where, length);
break;}
4100 case 4: {*where=
new char[
sizeof(
Long_t)*length];
b.ReadFastArray((
Long_t*) *where, length);
break;}
4101 case 5: {*where=
new char[
sizeof(
Float_t)*length];
b.ReadFastArray((
Float_t*) *where, length);
break;}
4102 case 6: {*where=
new char[
sizeof(
Int_t)*length];
b.ReadFastArray((
Int_t*) *where, length);
break;}
4103 case 8: {*where=
new char[
sizeof(
Double_t)*length];
b.ReadFastArray((
Double_t*)*where, length);
break;}
4104 case 11: {*where=
new char[
sizeof(
UChar_t)*length];
b.ReadFastArray((
UChar_t*) *where, length);
break;}
4105 case 12: {*where=
new char[
sizeof(
UShort_t)*length];
b.ReadFastArray((
UShort_t*)*where, length);
break;}
4106 case 13: {*where=
new char[
sizeof(
UInt_t)*length];
b.ReadFastArray((
UInt_t*) *where, length);
break;}
4107 case 14: {*where=
new char[
sizeof(
ULong_t)*length];
b.ReadFastArray((
ULong_t*) *where, length);
break;}
4108 case 15: {*where=
new char[
sizeof(
UInt_t)*length];
b.ReadFastArray((
UInt_t*) *where, length);
break;}
4109 case 16: {*where=
new char[
sizeof(
Long64_t)*length];
b.ReadFastArray((
Long64_t*) *where, length);
break;}
4110 case 17: {*where=
new char[
sizeof(
ULong64_t)*length];
b.ReadFastArray((
ULong64_t*)*where, length);
break;}
4111 case 18: {*where=
new char[
sizeof(
Bool_t)*length];
b.ReadFastArray((
Bool_t*) *where, length);
break;}
4141 for (
Int_t ii=0;ii<
n;ii++) {
4142 b.ReadDouble32(&(xx[ii]),se);
4150 for (
Int_t ii=0;ii<
n;ii++) {
4151 b.ReadFloat16(&(xx[ii]),se);
4157 }
else if (
fType <= 2) {
4177 loc = counter.
Last(
']');
4181 countname += counter;
4187 Warning(
"ReadLeaves",
"Missing fBranchCount for %s. Data will not be read correctly by the MakeClass mode.",
GetName());
4213 for (
Int_t ii=0;ii<
n;ii++) {
4214 b.ReadDouble32(&(xx[ii]),se);
4222 for (
Int_t ii=0;ii<
n;ii++) {
4223 b.ReadFloat16(&(xx[ii]),se);
4275 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4277 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());
4311 for (
Int_t i = 0; i < nbranches; ++i) {
4339 if( !
fNdata || *(
void**)proxy->
At( 0 ) != 0 )
4344 void **el = (
void**)proxy->
At( i );
4346 *el = elClass->
New();
4350 proxy->
Commit(alternate);
4376 if (info == 0)
return;
4408 if (info == 0)
return;
4439 if (info == 0)
return;
4470 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4472 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());
4511 if (info==0)
return;
4519 char **end = arr +
fNdata;
4658 Fatal(
"FillLeaves",
"The FillLeaves function has not been configured for %s",
GetName());
4681 }
else if (
fType == 4) {
4686 Warning(
"ReleaseObject",
"Cannot delete allocated STL container because I do not have a proxy! branch: %s",
GetName());
4690 if (needDelete &&
fID >= 0) {
4697 proxy->
Clear(
"force");
4722 proxy->
Clear(
"force");
4726 proxy->
Clear(
"force");
4747 for (
Int_t i = 0; i < nbranches; ++i) {
4749 branch->
Reset(option);
4762 for (
Int_t i = 0; i < nbranches; ++i) {
4784 for (
Int_t i = 0; i < nbranches; ++i) {
4810 for (
Int_t i = 0; i < nb; ++i) {
4836 for (
Int_t i = 0; i < nbranches; ++i) {
4984 if (
Long_t(addr) == -1) {
5078 if (clm == content) {
5084 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());
5111 }
else if (
fType == 4) {
5123 for (
Int_t i = 0; i < nbranches; ++i) {
5156 for (
Int_t i = 0; i < nbranches; ++i) {
5184 Error(
"SetAddress",
"For %s, we can not convert %s into %s\n",
5319 Error(
"SetAddress",
"Embedded TClonesArray given a zero address for branch '%s'",
GetName());
5335 Error(
"SetAddress",
"Embedded pointer to a TClonesArray given a zero address for branch '%s'",
GetName());
5339 }
else if (
fType == 4) {
5366 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5384 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5404 Error(
"SetAddress",
"Embedded STL container given a zero address for branch '%s'",
GetName());
5417 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5426 Error(
"SetAddress",
"Embedded pointer to an STL container given a zero address for branch '%s'",
GetName());
5430 }
else if (
fType == 41) {
5436 }
else if (
fID < 0) {
5456 Error(
"SetAddress",
"I have no TClass for branch %s, so I cannot allocate an I/O buffer!",
GetName());
5483 for (
Int_t i = 0; i < nbranches; ++i) {
5507 for (
Int_t i = 0; i < nbranches; ++i) {
5523 if (leafOfCounter && leaf) {
5526 if (!leafOfCounter) {
5527 Warning(
"SetBranchCount",
"Counter branch %s for branch %s has no leaves!", brOfCounter->
GetName(),
GetName());
5530 Warning(
"SetBranchCount",
"Branch %s has no leaves!",
GetName());
5549 for (
Int_t i = 0; i < nbranches; ++i) {
5624 if (actionSequence)
delete actionSequence;
5658 TClass *originalClass =
nullptr;
5677 }
else if (
fType == 31) {
5702 }
else if (
fType == 4) {
5704 }
else if (
fType == 41) {
5714 }
else if (
fType == 3) {
5716 }
else if (
fType == 31) {
5718 }
else if (
fType < 0) {
5720 }
else if (
fType == 0 &&
fID == -1) {
5723 if (hasCustomStreamer) {
5731 }
else if (
fType <= 2) {
5758 TClass *originalClass =
nullptr;
5777 }
else if (
fType == 31) {
5802 }
else if (
fType == 4) {
5804 }
else if (
fType == 41) {
5816 }
else if (
fType == 3) {
5818 }
else if (
fType == 31) {
5820 }
else if (
fType < 0) {
5822 }
else if (
fType <=2) {
5844 if (
name == 0)
return;
5854 for (
Int_t i = 0; i < nbranches; ++i) {
5951void TBranchElement::Streamer(
TBuffer& R__b)
6016 else if (
fType == 4) {
6047 const char* motherFileName = treeFileName;
6048 if (mother && (mother !=
this)) {
6074 char* dot = (
char*) strchr(
name,
'.');
6077 if (nch && (
name[nch-1] ==
'.')) {
6096 char* pointer = (
char*) (objptr + element->
GetOffset());
6233 for (
Int_t elemID = 0; elemID < ndata; ++elemID) {
6255 if ((btype == 31) || (btype == 41)) {
6267 unroll =
Unroll(
name, clParent, clOfBase, ptr + offset, basketsize, splitlevel+splitSTLP, btype);
6326 Int_t subSplitlevel = splitlevel-1;
6327 if (btype == 31 || btype == 41 || elem->
CannotSplit()) {
6342 Int_t unroll =
Unroll(branchname, clParent, elemClass, ptr + offset, basketsize, splitlevel-1+splitSTLP, btype);
6354 splitSTLP &&
fType != 4 )
6359 basketsize, splitlevel - 1+splitSTLP, sinfo, elemID );
6367 Int_t subSplitlevel = splitlevel - 1;
6368 if ((btype == 31) || (btype == 41) || elem->
CannotSplit()) {
6372 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 PushDataCache(TVirtualArray *)
Push a new data cache area onto the list of area to be used for temporarily store 'missing' data memb...
virtual TVirtualArray * PopDataCache()
Pop and Return the 'current' data cache area from the list of area to be used for temporarily store '...
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".
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
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).
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
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...
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
@ kSplitCollectionOfPointers
virtual Long64_t GetReadEntry() const
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
std::string GetName(const std::string &scope_name)
static constexpr double s
Short_t Min(Short_t a, Short_t b)
std::vector< TIDNode > TIDs