62 if (!str.
Index(prefix))
73 fBuffer.PushDataCache( fOnfileObject );
77 if (fOnfileObject)
fBuffer.PopDataCache();
87 for (
Int_t i = 0; i < nbranches; ++i) {
90 case 31: br->
SetType(41);
break;
112 return CanSelfReference(inside);
117 const static TClassRef stringClass(
"std::string");
118 if (cl == stringClass || cl == TString::Class()) {
145, fSTLtype(
ROOT::kNotSTL)
162, fReadActionSequence(0)
163, fFillActionSequence(0)
180, fClassName(sinfo->GetName())
184, fCheckSum(sinfo->GetCheckSum())
185, fClassVersion(sinfo->GetClass()->GetClassVersion())
190, fSTLtype(
ROOT::kNotSTL)
200, fTargetClass(fClassName)
203, fBranchClass(sinfo->GetClass())
207, fReadActionSequence(0)
208, fFillActionSequence(0)
217 Init(
tree, 0, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
227, fClassName(sinfo->GetName())
231, fCheckSum(sinfo->GetCheckSum())
232, fClassVersion(sinfo->GetClass()->GetClassVersion())
237, fSTLtype(
ROOT::kNotSTL)
247, fTargetClass( fClassName )
250, fBranchClass(sinfo->GetClass())
254, fReadActionSequence(0)
255, fFillActionSequence(0)
262 Init(parent ? parent->
GetTree() : 0, parent, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
281 if (
fTree == 0)
return;
373 if (hasCustomStreamer) {
392 if (element->IsA() == TStreamerBasicPointer::Class()) {
408 }
else if (element->IsA() == TStreamerLoop::Class()) {
426 if (splitlevel > 0) {
433 }
else if (element->IsA() == TStreamerBase::Class()) {
474 Unroll(
name, clOfElement, clOfElement, pointer, basketsize, splitlevel+splitSTLP, 0);
475 if (strchr(bname,
'.')) {
492 const auto bnamelen = strlen(bname);
494 name.Form(
"%s%s%s", bname, bname[bnamelen-1]==
'.' ?
"" :
".", clOfElement->
GetName());
509 char **ppointer = (
char**)(pointer);
553 Unroll(
name, clOfClones, clOfClones, pointer, basketsize, splitlevel+splitSTLP, 31);
560 TClass* contCl = elementClass;
567 }
else if ((valueClass == TString::Class()) || (valueClass ==
TClass::GetClass(
"string"))) {
608 Unroll(
name, valueClass, valueClass, pointer, basketsize, splitlevel+splitSTLP, 41);
621 TClass* clm = elementClass;
622 Int_t err =
Unroll(
name, clm, clm, pointer, basketsize, splitlevel+splitSTLP, 0);
664, fClassName(
"TClonesArray")
670, fTargetClass( fClassName )
675, fReadActionSequence(0)
676, fFillActionSequence(0)
681 Init(
tree, 0, bname, clones, basketsize, splitlevel, compress);
691, fClassName(
"TClonesArray")
697, fTargetClass( fClassName )
702, fReadActionSequence(0)
703, fFillActionSequence(0)
708 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());
785 if (branchname[branchname.
Length()-1]==
'.') {
792 Unroll(
name, clonesClass, clonesClass, 0, basketsize, splitlevel, 31);
819, fClassName(cont->GetCollectionClass()->GetName())
824, fTargetClass( fClassName )
827, fBranchClass(cont->GetCollectionClass())
829, fReadActionSequence(0)
830, fFillActionSequence(0)
835 Init(
tree, 0, bname, cont, basketsize, splitlevel, compress);
845, fClassName(cont->GetCollectionClass()->GetName())
850, fTargetClass( fClassName )
853, fBranchClass(cont->GetCollectionClass())
855, fReadActionSequence(0)
856, fFillActionSequence(0)
861 Init(parent ? parent->
GetTree() : 0, parent, bname, cont, basketsize, splitlevel, compress);
915 if (basketsize < 100) {
956 Unroll(
name, valueClass, valueClass, 0, basketsize, splitlevel, 41);
1035 if (nbranches > 0) {
1036 TList persistentBranches;
1039 while((branch=(
TBranch*)iB())) {
1040 if (branch->
IsFolder()) persistentBranches.
Add(branch);
1066 mempos=strMember.
First(
'[');
1070 if (!
m ||
m->IsPersistent()) persistentBranches.
Add(branch);
1071 }
else persistentBranches.
Add(branch);
1095 pos = mothername.
First(
'[');
1101 if (mothername(len-1) !=
'.') {
1106 TString doublename = mothername;
1108 Int_t isthere = (
name.Index(doublename) == 0);
1110 name.Prepend(doublename);
1113 doublename.
Append(mothername);
1114 isthere = (
name.Index(doublename) == 0);
1151 if (indexname[indexname.
Length()-1]==
'.') {
1156 for (
Int_t i = 0; i < nbranches; ++i) {
1162 }
else if (
fType == 4) {
1165 Error(
"BuildTitle",
"This cannot happen, fType of parent is not 3 or 4!");
1169 const char* fin = strrchr(bre->
GetTitle(),
'.');
1202 if ((stype > 40) && (stype < 61)) {
1244 Error(
"Fill",
"attempt to fill branch %s while address is not set",
GetName());
1267 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1279 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1287 for (
Int_t i = 0; i < nbranches; ++i) {
1290 nwrite = branch->
FillImpl(imtHelper);
1292 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d",
GetName(), branch->
GetName(), nwrite);
1305 printf(
"Fill: %lld, branch=%s, nbytes=%d\n", entry,
GetName(), nbytes);
1343 }
else if (
fType == 31) {
1364 Error(
"FillLeaves",
"The branch counter address was zero!");
1370 Error(
"FillLeaves",
"Clonesa: %s, n=%d, sorry not supported yet",
GetName(),
n);
1393 for (
Int_t ii = 0; ii <
n; ++ii) {
1394 b.WriteDouble32(&(xx[ii]),se);
1403 for (
Int_t ii = 0; ii <
n; ++ii) {
1404 b.WriteFloat16(&(xx[ii]),se);
1486 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1517 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1547 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1578 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1633 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1638 char **end = arr +
n;
1715 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1759 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1774 std::size_t dim =
name.find_first_of(
"[");
1775 if (dim != std::string::npos) {
1798 if (se && se->
IsBase()) {
1806 std::string longnm_parent;
1810 longnm_parent +=
name;
1816 for(
Int_t i = 0; i < nbranches; ++i) {
1819 const char *brname = branch->
GetName();
1820 UInt_t brlen = strlen(brname);
1821 if (brname[brlen-1]==
']') {
1822 const char *dim = strchr(brname,
'[');
1824 brlen = dim - brname;
1827 if (namelen == brlen
1828 && strncmp(
name,brname,brlen) == 0) {
1831 if (brlen == longnm.length()
1832 && strncmp(longnm.c_str(),brname,brlen) == 0) {
1836 if (brlen == longnm_parent.length()
1837 && strncmp(longnm_parent.c_str(),brname,brlen) == 0) {
1841 if (namelen>brlen &&
name[brlen]==
'.' && strncmp(
name,brname,brlen)==0) {
1852 for(
Int_t i = 0; i < nbranches; ++i) {
1854 if(obj->IsA() != TBranchElement :: Class() )
1858 if (si && br->
GetID() >= 0) {
1860 if (se && se->
IsBase()) {
1878 if( br->IsA() != TBranchElement::Class() )
1882 if (parent==
this || parent->
GetID()<0 )
return 0;
1887 if (! se->
IsBase() )
return 0;
1890 if( br->IsA() != TBranchElement::Class() )
1895 std::string longname( grand_parent->
GetName() );
1901 if ( longname == leafname ) {
1942 if (valueClass == subbe->fInfo->
GetClass()) {
1943 localInfo = subbe->fInfo;
1978 if (targetValueClass && localInfo->
GetClass() != targetValueClass) {
1989 for (
size_t i =0; i < ndata; ++i) {
2004 ename = ename.
Remove(pos);
2008 if (nextel->IsA() == TStreamerArtificial::Class()
2012 ids.back().fElement = nextel;
2013 ids.back().fInfo = info;
2019 if (!be && nextel->
IsBase()) {
2024 if (subprefix.Length() && subprefix[subprefix.Length()-1] ==
'.')
2025 subprefix.Remove(subprefix.Length()-1);
2031 TClass *expectedClass =
nullptr;
2038 for (
Int_t bi = 0; bi < nbranches; ++bi) {
2040 if (subprefix != branch->
GetName())
2054 if (elementClass && (!be || be->
GetType() == -2)) {
2063 if (prefix.
Length() && nextel->IsA() == TStreamerBase::Class()) {
2068 subprefix = ename +
".";
2070 auto nbranches = search->GetEntriesFast();
2071 bool foundRelatedSplit =
false;
2072 for (
Int_t bi = 0; bi < nbranches; ++bi) {
2075 if (!foundRelatedSplit)
2076 foundRelatedSplit = matchSubPrefix;
2087 if (!foundRelatedSplit) {
2097 ids.emplace_back(nextinfo, offset + nextel->
GetOffset());
2100 ids.back().fNestedIDs->fOwnOnfileObject =
kTRUE;
2102 ids.back().fNestedIDs->fOnfileObject = onfileObject;
2103 GatherArtificialElements(branches, ids.back().fNestedIDs->fIDs, subprefix, nextinfo, offset + nextel->
GetOffset());
2104 if (ids.back().fNestedIDs->fIDs.empty())
2138 if ( !targetClass ) {
2139 Error(
"InitInfo",
"The target class dictionary is not present!" );
2157 target +=
"@@emulated";
2166 if( targetClass != cl ) {
2183 if( targetClass != cl )
2223 Error(
"InitInfo",
"StreamerInfo is not compiled.");
2263 Int_t firstindex = 0;
2264 Int_t lastindex = nbranches - 1;
2271 if (!subbranch->
fInfo)
2275 for(
Int_t i = index - 1; i >= 0; --i) {
2278 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2283 if (!subbranch->
fInfo)
2286 for(
Int_t i = index; i < nbranches; ++i) {
2289 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2301 for(
Int_t i = 0; i < nbranches; ++i) {
2304 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2311 for (
Int_t i = firstindex; i <= lastindex; ++i) {
2314 if (
this != subbranch) {
2316 if (!subbranch->
fInfo)
2319 if (subbranch->
fInfo == info)
2321 else if (subbranch->
fInfo ==
nullptr && subbranch->
fBranchClass == currentClass) {
2337 Error(
"SetOnfileObject (lambda)",
"2 distincts fOnfileObject are in the hierarchy of %s for type %s",
2342 seenExisting =
kTRUE;
2346 lastbranch = subbranch;
2351 if (lastbranch !=
this)
2360 size_t pos = s.rfind(
'.');
2361 if (pos != std::string::npos) {
2362 s = s.substr(pos+1);
2364 while ((pos = s.rfind(
'[')) != std::string::npos) {
2365 s = s.substr(0, pos);
2372 for (
size_t i = 0; i < ndata; ++i) {
2404 for (
size_t i =
fID+1+(
fNewIDs.size()); i < ndata; ++i) {
2407 std::string ename = nextel->
GetName();
2408 if (ename[0] ==
'*')
2409 ename = ename.substr(1);
2411 while ((pos = ename.rfind(
'[')) != std::string::npos) {
2412 ename = ename.substr(0, pos);
2436 if (nextel->IsA() != TStreamerArtificial::Class()
2444 fNewIDs.back().fElement = nextel;
2451 for (
size_t i = 0; i < ndata; ++i) {
2466 SetOnfileObject(
fInfo);
2481 auto start = prefix.
Length();
2482 if (prefix[start - 1] ==
'.')
2484 std::string_view view(prefix.
Data(), start);
2485 auto cutoff = view.find_last_of(
'.');
2486 if (cutoff != std::string::npos) {
2487 prefix.
Remove(cutoff + 1);
2490 if (prefix[prefix.
Length()-1] !=
'.') {
2503 SetOnfileObject(localInfo);
2534 const char* className = 0;
2579 Fatal(
"GetCollectionProxy",
2580 "Can not create a Collection Proxy of any kind for the class \"%s\" needed by the branch \"%s\" of the TTree \"%s\"!",
2584 "Fixing the collection proxy of the class \"%s\" \n"
2585 "\tneeded by the branch \"%s\" of the TTree \"%s\" to be similar to \"%s\".",
2591 }
else if (
fType == 41) {
2634 if (newInfo != brInfo) {
2643 if (newType.
Length()==0) {
2726 for (
Int_t i = 0; i < nbranches; ++i) {
2751 char **end = arr +
fNdata;
2754 }
else if (
fType == 4) {
2793 Info(
"GetEntry",
"%lld, branch=%s, nbytes=%d", entry,
GetName(), nbytes);
2811 if ((
type == -1) || (
fID == -1)) {
2820 if (!expectedClass) {
2830 Error(
"GetExpectedType",
"Did not find the type for %s",
GetName());
2843 if (!mother || mother==
this || mother->
GetType() == 3 || mother->
GetType() == 4) {
2848 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
2851 return motherName +
"." +
fName;
2860 return "TBranchElement-folder";
2862 return "TBranchElement-leaf";
2923 const char *types[20] = {
2946 return types[itype];
2955template <
typename T>
3006 }
else if (
fType <= 2) {
3031 }
else if (
fType == 41) {
3084 }
else if (
fType == 4) {
3087 }
else if (
fType == 31) {
3092 }
else if (
fType == 41) {
3097 }
else if (
fType <= 2) {
3112 }
else if (
fType == 41) {
3114 }
else if (prID < 0) {
3119 char **val = (
char**)(
object+
GetInfoImp()->TStreamerInfo::GetElementOffset(prID));
3174 Warning(
"InitializeOffsets",
"No branch class set for branch: %s",
GetName());
3191 Int_t localOffset = 0;
3204 Warning(
"InitializeOffsets",
"Streamer info for branch: %s has no elements array!",
GetName());
3211 Warning(
"InitializeOffsets",
"Cannot get streamer element for branch: %s!",
GetName());
3232 Error(
"InitializeOffsets",
"Could not find class for branch: %s",
GetName());
3246 stlParentName = br->
GetName();
3255 for (
Int_t subBranchIdx = 0; subBranchIdx < nbranches; ++subBranchIdx) {
3256 bool alternateElement =
false;
3260 if (subBranch == 0) {
3274 Warning(
"InitializeOffsets",
"No streamer info for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3279 Warning(
"InitializeOffsets",
"No elements array for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3285 if (!subBranchElement) {
3286 Warning(
"InitializeOffsets",
"No streamer element for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3300 typedef TStreamerInfoActions::ActionContainer_t::iterator iterator;
3303 iter != end; ++iter) {
3308 subBranchElement =
e;
3309 alternateElement =
true;
3316 localOffset = subBranchElement->
GetOffset();
3324 && CanSelfReference(subBranchElement->
GetClass()))
3340 Warning(
"InitializeOffsets",
"Branch '%s' has no mother!",
GetName());
3346 if (motherName.
Length() && strchr(motherName.
Data(),
'.')) {
3350 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
3351 motherDotAtEnd =
kTRUE;
3355 if ((subBranch->
fType == 1) || (subBranchElement && subBranchElement->
IsBase())) {
3363 isBaseSubBranch =
kTRUE;
3367 if ((subBranch->
fType == 31) || (subBranch->
fType == 41)) {
3369 isContDataMember =
kTRUE;
3394 if (motherDotAtEnd) {
3398 if (!stlParentNameUpdated && stlParentName.
Length()) {
3400 stlParentNameUpdated =
kTRUE;
3402 }
else if (motherDot) {
3411 if ((
fID < 0) && (subBranchElement->IsA() == TStreamerBase::Class())) {
3419 if (!stlParentNameUpdated && stlParentName.
Length()) {
3427 if (!stlParentNameUpdated && stlParentName.
Length()) {
3433 stlParentNameUpdated =
kTRUE;
3434 if (isBaseSubBranch) {
3448 if (dataName[0] ==
'.') {
3458 if (motherDotAtEnd) {
3461 }
else if (motherDot) {
3470 if ((
fID > -1) && (mother == mother->
GetSubBranch(
this)) && (branchElem->IsA() == TStreamerBase::Class())) {
3511 RemovePrefix(dataName, parentName);
3516 if (dataName[0] ==
'.') {
3523 if (dataName[dataName.
Length()-1] ==
'.') {
3565 target +=
"@@emulated";
3583 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class, and cannot get class for clones class: '%s'!", subBranch->
GetName(),
GetClonesName());
3587 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass->
GetName());
3591 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass ? pClass->
GetName() :
"unknown class");
3596 pClass = branchClass;
3601 if (renamed && pClass) {
3602 if (pClass == branchClass) {
3617 if( !strncmp( stlParentName.
Data(), dataName.
Data(), stlParentName.
Length()-1 )
3618 && dataName[ stlParentName.
Length() ] ==
'.' )
3626 if (alternateElement) {
3629 if (dotpos !=
kNPOS) ++dotpos;
else dotpos = 0;
3651 Error(
"InitializeOffsets",
3652 "Could not find the real data member '%s' when constructing the branch '%s' [Likely missing ShowMember].",
3657 Info(
"InitializeOffsets",
3658 "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'. ",
3662 Fatal(
"InitializeOffsets",
3663 "Could not find the real data member '%s' when constructing the branch '%s' [Likely an internal error, please report to the developers].",
3671 if (isBaseSubBranch) {
3674 Warning(
"InitializeOffsets",
"Could not find the data member name for branch '%s' with parent branch '%s', assuming offset is zero!", subBranch->
GetName(),
GetName());
3682 if (isContDataMember) {
3696 if (isBaseSubBranch) {
3703 subBranch->
SetOffset(offset - localOffset);
3713 }
else if (isSplit) {
3714 if (isBaseSubBranch) {
3725 if (isBaseSubBranch) {
3765 if (nbranches >= 1) {
3769 return browsables && browsables->
GetSize();
3784 if (basket &&
fTree) {
3797 bufbegin = entryOffset[entry-
first];
3800 bufnext = entryOffset[entry+1-
first];
3804 if (bufnext == bufbegin) {
3822 for(
auto &cursor : ids) {
3823 auto id = cursor.fElemID;
3829 Error(
"TBranchElement::Print",
"Element for id #%d not found in StreamerInfo for %s",
3833 }
else if (cursor.fNestedIDs) {
3834 Printf(
" Within subobject of type %s offset = %d", cursor.fNestedIDs->fInfo->GetName(), cursor.fNestedIDs->fOffset);
3835 PrintElements(cursor.fNestedIDs->fInfo, cursor.fNestedIDs->fIDs);
3843 if (strncmp(option,
"debugAddress",strlen(
"debugAddress"))==0) {
3844 if (strlen(option)==strlen(
"debugAddress")) {
3845 Printf(
"%-24s %-16s %2s %4s %-16s %-16s %8s %8s %s %s\n",
3846 "Branch Name",
"Streamer Class",
"ID",
"Type",
"Class",
"Parent",
"pOffset",
"fOffset",
"fObject",
"fOnfileObject");
3855 Printf(
"%-16s %2d %4d %-16s %-16s %8x %8x %p %p%s\n",
3860 for (
Int_t i = 0; i < nbranches; ++i) {
3862 subbranch->
Print(
"debugAddressSub");
3866 if (strncmp(option,
"debugInfo",strlen(
"debugInfo"))==0) {
3878 Printf(
" With elements:");
3882 Printf(
" with read actions:");
3884 Printf(
" with write actions:");
3893 Printf(
" with read actions:");
3895 Printf(
" with write actions:");
3898 TString suboption =
"debugInfoSub";
3899 suboption += (option+strlen(
"debugInfo"));
3900 for (
Int_t i = 0; i < nbranches; ++i) {
3902 subbranch->
Print(suboption);
3915 Printf(
"*............................................................................*");
3920 for (
Int_t i=0;i<nbranches;i++) {
3922 branch->
Print(option);
3979 }
else if (
fType <= 2) {
3996 }
else if (
fType == 3) {
3998 }
else if (
fType == 31) {
4003 }
else if (
fType == 41) {
4020 Fatal(
"ReadLeaves",
"The ReadLeaves function has not been configured for %s",
GetName());
4038 b.SetBufferOffset(
b.Length() -
sizeof(
n));
4040 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());
4052 for (
Int_t i=0; i<nbranches; i++) {
4069 if (atype > 54)
return;
4078 if (!len_where)
return;
4083 for( k=0; k<
n; k++) {
4084 char **where = &(((
char**)
fAddress)[k]);
4088 case 1: {length = ((
Char_t*) len_where)[k];
break;}
4089 case 2: {length = ((
Short_t*) len_where)[k];
break;}
4090 case 3: {length = ((
Int_t*) len_where)[k];
break;}
4091 case 4: {length = ((
Long_t*) len_where)[k];
break;}
4093 case 6: {length = ((
Int_t*) len_where)[k];
break;}
4095 case 11: {length = ((
UChar_t*) len_where)[k];
break;}
4096 case 12: {length = ((
UShort_t*) len_where)[k];
break;}
4097 case 13: {length = ((
UInt_t*) len_where)[k];
break;}
4098 case 14: {length = ((
ULong_t*) len_where)[k];
break;}
4099 case 15: {length = ((
UInt_t*) len_where)[k];
break;}
4100 case 16: {length = ((
Long64_t*) len_where)[k];
break;}
4101 case 17: {length = ((
ULong64_t*)len_where)[k];
break;}
4102 case 18: {length = ((
Bool_t*) len_where)[k];
break;}
4106 if (length <= 0)
continue;
4107 if (isArray == 0)
continue;
4109 case 1: {*where=
new char[
sizeof(
Char_t)*length];
b.ReadFastArray((
Char_t*) *where, length);
break;}
4110 case 2: {*where=
new char[
sizeof(
Short_t)*length];
b.ReadFastArray((
Short_t*) *where, length);
break;}
4111 case 3: {*where=
new char[
sizeof(
Int_t)*length];
b.ReadFastArray((
Int_t*) *where, length);
break;}
4112 case 4: {*where=
new char[
sizeof(
Long_t)*length];
b.ReadFastArray((
Long_t*) *where, length);
break;}
4113 case 5: {*where=
new char[
sizeof(
Float_t)*length];
b.ReadFastArray((
Float_t*) *where, length);
break;}
4114 case 6: {*where=
new char[
sizeof(
Int_t)*length];
b.ReadFastArray((
Int_t*) *where, length);
break;}
4115 case 8: {*where=
new char[
sizeof(
Double_t)*length];
b.ReadFastArray((
Double_t*)*where, length);
break;}
4116 case 11: {*where=
new char[
sizeof(
UChar_t)*length];
b.ReadFastArray((
UChar_t*) *where, length);
break;}
4117 case 12: {*where=
new char[
sizeof(
UShort_t)*length];
b.ReadFastArray((
UShort_t*)*where, length);
break;}
4118 case 13: {*where=
new char[
sizeof(
UInt_t)*length];
b.ReadFastArray((
UInt_t*) *where, length);
break;}
4119 case 14: {*where=
new char[
sizeof(
ULong_t)*length];
b.ReadFastArray((
ULong_t*) *where, length);
break;}
4120 case 15: {*where=
new char[
sizeof(
UInt_t)*length];
b.ReadFastArray((
UInt_t*) *where, length);
break;}
4121 case 16: {*where=
new char[
sizeof(
Long64_t)*length];
b.ReadFastArray((
Long64_t*) *where, length);
break;}
4122 case 17: {*where=
new char[
sizeof(
ULong64_t)*length];
b.ReadFastArray((
ULong64_t*)*where, length);
break;}
4123 case 18: {*where=
new char[
sizeof(
Bool_t)*length];
b.ReadFastArray((
Bool_t*) *where, length);
break;}
4153 for (
Int_t ii=0;ii<
n;ii++) {
4154 b.ReadDouble32(&(xx[ii]),se);
4162 for (
Int_t ii=0;ii<
n;ii++) {
4163 b.ReadFloat16(&(xx[ii]),se);
4169 }
else if (
fType <= 2) {
4189 loc = counter.
Last(
']');
4193 countname += counter;
4199 Warning(
"ReadLeaves",
"Missing fBranchCount for %s. Data will not be read correctly by the MakeClass mode.",
GetName());
4225 for (
Int_t ii=0;ii<
n;ii++) {
4226 b.ReadDouble32(&(xx[ii]),se);
4234 for (
Int_t ii=0;ii<
n;ii++) {
4235 b.ReadFloat16(&(xx[ii]),se);
4287 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4289 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());
4323 for (
Int_t i = 0; i < nbranches; ++i) {
4351 if( !
fNdata || *(
void**)proxy->
At( 0 ) != 0 )
4356 void **el = (
void**)proxy->
At( i );
4358 *el = elClass->
New();
4362 proxy->
Commit(alternate);
4388 if (info == 0)
return;
4420 if (info == 0)
return;
4451 if (info == 0)
return;
4482 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4484 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());
4523 if (info==0)
return;
4531 char **end = arr +
fNdata;
4670 Fatal(
"FillLeaves",
"The FillLeaves function has not been configured for %s",
GetName());
4685 TClonesArray::Class()->Destructor(
fObject);
4693 }
else if (
fType == 4) {
4698 Warning(
"ReleaseObject",
"Cannot delete allocated STL container because I do not have a proxy! branch: %s",
GetName());
4702 if (needDelete &&
fID >= 0) {
4709 proxy->
Clear(
"force");
4734 proxy->
Clear(
"force");
4738 proxy->
Clear(
"force");
4759 for (
Int_t i = 0; i < nbranches; ++i) {
4761 branch->
Reset(option);
4774 for (
Int_t i = 0; i < nbranches; ++i) {
4796 for (
Int_t i = 0; i < nbranches; ++i) {
4822 for (
Int_t i = 0; i < nb; ++i) {
4848 for (
Int_t i = 0; i < nbranches; ++i) {
4996 if (
Long_t(addr) == -1) {
5083 if (newType && (newType != TClonesArray::Class())) {
5090 if (clm == content) {
5096 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());
5123 }
else if (
fType == 4) {
5135 for (
Int_t i = 0; i < nbranches; ++i) {
5168 for (
Int_t i = 0; i < nbranches; ++i) {
5196 Error(
"SetAddress",
"For %s, we can not convert %s into %s\n",
5331 Error(
"SetAddress",
"Embedded TClonesArray given a zero address for branch '%s'",
GetName());
5347 Error(
"SetAddress",
"Embedded pointer to a TClonesArray given a zero address for branch '%s'",
GetName());
5351 }
else if (
fType == 4) {
5371 "Branch %s is a split STL container (fStreamerType is: %d), the address can not be set directly.",
5380 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5398 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5418 Error(
"SetAddress",
"Embedded STL container given a zero address for branch '%s'",
GetName());
5424 "Branch %s is a split STL container (fStreamerType is: %d), the address can not be set directly.",
5433 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5442 Error(
"SetAddress",
"Embedded pointer to an STL container given a zero address for branch '%s'",
GetName());
5446 }
else if (
fType == 41) {
5452 }
else if (
fID < 0) {
5472 Error(
"SetAddress",
"I have no TClass for branch %s, so I cannot allocate an I/O buffer!",
GetName());
5499 for (
Int_t i = 0; i < nbranches; ++i) {
5524 for (
Int_t i = 0; i < nbranches; ++i) {
5540 if (leafOfCounter && leaf) {
5543 if (!leafOfCounter) {
5544 Warning(
"SetBranchCount",
"Counter branch %s for branch %s has no leaves!", brOfCounter->
GetName(),
GetName());
5547 Warning(
"SetBranchCount",
"Branch %s has no leaves!",
GetName());
5566 for (
Int_t i = 0; i < nbranches; ++i) {
5641 if (actionSequence)
delete actionSequence;
5675 TClass *originalClass =
nullptr;
5694 }
else if (
fType == 31) {
5719 }
else if (
fType == 4) {
5721 }
else if (
fType == 41) {
5731 }
else if (
fType == 3) {
5733 }
else if (
fType == 31) {
5735 }
else if (
fType < 0) {
5737 }
else if (
fType == 0 &&
fID == -1) {
5740 if (hasCustomStreamer) {
5748 }
else if (
fType <= 2) {
5775 TClass *originalClass =
nullptr;
5794 }
else if (
fType == 31) {
5819 }
else if (
fType == 4) {
5821 }
else if (
fType == 41) {
5833 }
else if (
fType == 3) {
5835 }
else if (
fType == 31) {
5837 }
else if (
fType < 0) {
5839 }
else if (
fType <=2) {
5861 if (
name == 0)
return;
5871 for (
Int_t i = 0; i < nbranches; ++i) {
5968void TBranchElement::Streamer(
TBuffer& R__b)
6033 else if (
fType == 4) {
6064 const char* motherFileName = treeFileName;
6065 if (mother && (mother !=
this)) {
6091 char* dot = (
char*) strchr(
name,
'.');
6094 if (nch && (
name[nch-1] ==
'.')) {
6104 if (element->IsA() == TStreamerArtificial::Class()) {
6113 char* pointer = (
char*) (objptr + element->
GetOffset());
6118 Bool_t isBase = (element->IsA() == TStreamerBase::Class());
6241 const auto namelen = strlen(
name);
6242 Bool_t dotlast = (namelen && (
name[namelen-1] ==
'.'));
6253 for (
Int_t elemID = 0; elemID < ndata; ++elemID) {
6256 if (elem->IsA() == TStreamerArtificial::Class()) {
6268 if (elem->IsA() == TStreamerBase::Class()) {
6275 if ((btype == 31) || (btype == 41)) {
6286 if (!elem->
CannotSplit() || clOfBase == TObject::Class()) {
6287 unroll =
Unroll(
name, clParent, clOfBase, ptr + offset, basketsize, splitlevel+splitSTLP, btype);
6329 if ((splitlevel > 1) && ((elem->IsA() == TStreamerObject::Class()) || (elem->IsA() == TStreamerObjectAny::Class()))) {
6344 }
else if (elemClass->
InheritsFrom(TClonesArray::Class())) {
6346 Int_t subSplitlevel = splitlevel-1;
6347 if (btype == 31 || btype == 41 || elem->
CannotSplit()) {
6362 Int_t unroll =
Unroll(branchname, clParent, elemClass, ptr + offset, basketsize, splitlevel-1+splitSTLP, btype);
6374 splitSTLP &&
fType != 4 )
6379 basketsize, splitlevel - 1+splitSTLP, sinfo, elemID );
6383 else if ((elem->IsA() == TStreamerSTL::Class()) && !elem->
IsaPointer()) {
6387 Int_t subSplitlevel = splitlevel - 1;
6388 if ((btype == 31) || (btype == 41) || elem->
CannotSplit()) {
6392 TBranchElement* branch =
new TBranchElement(
this, branchname, sinfo, elemID, ptr + offset, basketsize, subSplitlevel+splitSTLP, btype);
6395 }
else if (((btype != 31) && (btype != 41)) && ptr && ((elem->
GetClassPointer() == TClonesArray::Class()) || ((elem->IsA() == TStreamerSTL::Class()) && !elem->
CannotSplit()))) {
#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,...)
Use this function in case an error occurred.
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'.
A helper class for managing IMT work during TTree:Fill operations.
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 StreamerInfo 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)
@ kBranchAny
Branch is an object*.
@ kBranchObject
Branch is a TObject*.
@ kDoNotProcess
Active bit for branches.
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)
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
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(const char *cs)
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.
@ kSplitCollectionOfPointers
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
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
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Short_t Min(Short_t a, Short_t b)
std::vector< TIDNode > TIDs