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");
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) {
426 if (splitlevel > 0) {
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;
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()) {
1882 if (parent==
this || parent->
GetID()<0 )
return 0;
1887 if (! se->
IsBase() )
return 0;
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);
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)) {
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) {
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",
"Branch '%s': missing dictionary for target class '%s'!",
2167 if( targetClass != cl ) {
2184 if( targetClass != cl )
2224 Error(
"InitInfo",
"StreamerInfo is not compiled.");
2264 Int_t firstindex = 0;
2265 Int_t lastindex = nbranches - 1;
2272 if (!subbranch->
fInfo)
2279 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2284 if (!subbranch->
fInfo)
2290 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2302 for(
Int_t i = 0; i < nbranches; ++i) {
2305 if ( ! subbranch_name.
BeginsWith(thisprefix)) {
2312 for (
Int_t i = firstindex; i <= lastindex; ++i) {
2315 if (
this != subbranch) {
2317 if (!subbranch->
fInfo)
2320 if (subbranch->
fInfo == info)
2322 else if (subbranch->
fInfo ==
nullptr && subbranch->
fBranchClass == currentClass) {
2338 Error(
"SetOnfileObject (lambda)",
"2 distincts fOnfileObject are in the hierarchy of %s for type %s",
2343 seenExisting =
kTRUE;
2347 lastbranch = subbranch;
2352 if (lastbranch !=
this)
2361 size_t pos = s.rfind(
'.');
2362 if (pos != std::string::npos) {
2363 s = s.substr(pos+1);
2365 while ((pos = s.rfind(
'[')) != std::string::npos) {
2366 s = s.substr(0, pos);
2373 for (
size_t i = 0; i < ndata; ++i) {
2405 for (
size_t i =
fID+1+(
fNewIDs.size()); i < ndata; ++i) {
2408 std::string ename = nextel->
GetName();
2409 if (ename[0] ==
'*')
2410 ename = ename.substr(1);
2412 while ((pos = ename.rfind(
'[')) != std::string::npos) {
2413 ename = ename.substr(0, pos);
2445 fNewIDs.back().fElement = nextel;
2452 for (
size_t i = 0; i < ndata; ++i) {
2467 SetOnfileObject(
fInfo);
2482 auto start = prefix.
Length();
2483 if (prefix[start - 1] ==
'.')
2485 std::string_view view(prefix.
Data(), start);
2486 auto cutoff = view.find_last_of(
'.');
2487 if (cutoff != std::string::npos) {
2488 prefix.
Remove(cutoff + 1);
2491 if (prefix[prefix.
Length()-1] !=
'.') {
2504 SetOnfileObject(localInfo);
2535 const char* className = 0;
2580 Fatal(
"GetCollectionProxy",
2581 "Can not create a Collection Proxy of any kind for the class \"%s\" needed by the branch \"%s\" of the TTree \"%s\"!",
2585 "Fixing the collection proxy of the class \"%s\" \n"
2586 "\tneeded by the branch \"%s\" of the TTree \"%s\" to be similar to \"%s\".",
2592 }
else if (
fType == 41) {
2635 if (newInfo != brInfo) {
2644 if (newType.
Length()==0) {
2727 for (
Int_t i = 0; i < nbranches; ++i) {
2752 char **end = arr +
fNdata;
2755 }
else if (
fType == 4) {
2794 Info(
"GetEntry",
"%lld, branch=%s, nbytes=%d", entry,
GetName(), nbytes);
2812 if ((
type == -1) || (
fID == -1)) {
2821 if (!expectedClass) {
2831 Error(
"GetExpectedType",
"Did not find the type for %s",
GetName());
2844 if (!mother || mother==
this || mother->
GetType() == 3 || mother->
GetType() == 4) {
2858 return "TBranchElement-folder";
2860 return "TBranchElement-leaf";
2921 const char *types[20] = {
2944 return types[itype];
2953template <
typename T>
3004 }
else if (
fType <= 2) {
3029 }
else if (
fType == 41) {
3082 }
else if (
fType == 4) {
3085 }
else if (
fType == 31) {
3090 }
else if (
fType == 41) {
3095 }
else if (
fType <= 2) {
3110 }
else if (
fType == 41) {
3112 }
else if (prID < 0) {
3117 char **val = (
char**)(
object+
GetInfoImp()->TStreamerInfo::GetElementOffset(prID));
3172 Warning(
"InitializeOffsets",
"No branch class set for branch: %s",
GetName());
3189 Int_t localOffset = 0;
3202 Warning(
"InitializeOffsets",
"Streamer info for branch: %s has no elements array!",
GetName());
3209 Warning(
"InitializeOffsets",
"Cannot get streamer element for branch: %s!",
GetName());
3230 Error(
"InitializeOffsets",
"Could not find class for branch: %s",
GetName());
3244 stlParentName = br->
GetName();
3253 for (
Int_t subBranchIdx = 0; subBranchIdx < nbranches; ++subBranchIdx) {
3254 bool alternateElement =
false;
3258 if (subBranch == 0) {
3272 Warning(
"InitializeOffsets",
"No streamer info for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3277 Warning(
"InitializeOffsets",
"No elements array for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3283 if (!subBranchElement) {
3284 Warning(
"InitializeOffsets",
"No streamer element for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
3298 typedef TStreamerInfoActions::ActionContainer_t::iterator iterator;
3301 iter != end; ++iter) {
3306 subBranchElement =
e;
3307 alternateElement =
true;
3314 localOffset = subBranchElement->
GetOffset();
3322 && CanSelfReference(subBranchElement->
GetClass()))
3338 Warning(
"InitializeOffsets",
"Branch '%s' has no mother!",
GetName());
3344 if (motherName.
Length() && strchr(motherName.
Data(),
'.')) {
3348 if (motherName.
Length() && (motherName[motherName.
Length()-1] ==
'.')) {
3349 motherDotAtEnd =
kTRUE;
3353 if ((subBranch->
fType == 1) || (subBranchElement && subBranchElement->
IsBase())) {
3361 isBaseSubBranch =
kTRUE;
3365 if ((subBranch->
fType == 31) || (subBranch->
fType == 41)) {
3367 isContDataMember =
kTRUE;
3392 if (motherDotAtEnd) {
3396 if (!stlParentNameUpdated && stlParentName.
Length()) {
3398 stlParentNameUpdated =
kTRUE;
3400 }
else if (motherDot) {
3417 if (!stlParentNameUpdated && stlParentName.
Length()) {
3425 if (!stlParentNameUpdated && stlParentName.
Length()) {
3431 stlParentNameUpdated =
kTRUE;
3432 if (isBaseSubBranch) {
3446 if (dataName[0] ==
'.') {
3456 if (motherDotAtEnd) {
3459 }
else if (motherDot) {
3509 RemovePrefix(dataName, parentName);
3514 if (dataName[0] ==
'.') {
3521 if (dataName[dataName.
Length()-1] ==
'.') {
3581 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class, and cannot get class for clones class: '%s'!", subBranch->
GetName(),
GetClonesName());
3585 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass->
GetName());
3589 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass ? pClass->
GetName() :
"unknown class");
3594 pClass = branchClass;
3599 if (renamed && pClass) {
3600 if (pClass == branchClass) {
3615 if( !strncmp( stlParentName.
Data(), dataName.
Data(), stlParentName.
Length()-1 )
3616 && dataName[ stlParentName.
Length() ] ==
'.' )
3624 if (alternateElement) {
3627 if (dotpos !=
kNPOS) ++dotpos;
else dotpos = 0;
3649 Error(
"InitializeOffsets",
3650 "Could not find the real data member '%s' when constructing the branch '%s' [Likely missing ShowMember].",
3655 Info(
"InitializeOffsets",
3656 "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'. ",
3660 Fatal(
"InitializeOffsets",
3661 "Could not find the real data member '%s' when constructing the branch '%s' [Likely an internal error, please report to the developers].",
3669 if (isBaseSubBranch) {
3672 Warning(
"InitializeOffsets",
"Could not find the data member name for branch '%s' with parent branch '%s', assuming offset is zero!", subBranch->
GetName(),
GetName());
3680 if (isContDataMember) {
3694 if (isBaseSubBranch) {
3711 }
else if (isSplit) {
3712 if (isBaseSubBranch) {
3723 if (isBaseSubBranch) {
3763 if (nbranches >= 1) {
3767 return browsables && browsables->
GetSize();
3782 if (basket &&
fTree) {
3795 bufbegin = entryOffset[entry-
first];
3798 bufnext = entryOffset[entry+1-
first];
3802 if (bufnext == bufbegin) {
3820 for(
auto &
cursor : ids) {
3821 auto id =
cursor.fElemID;
3827 Error(
"TBranchElement::Print",
"Element for id #%d not found in StreamerInfo for %s",
3831 }
else if (
cursor.fNestedIDs) {
3832 Printf(
" Within subobject of type %s offset = %d",
cursor.fNestedIDs->fInfo->GetName(),
cursor.fNestedIDs->fOffset);
3841 if (strncmp(
option,
"debugAddress",strlen(
"debugAddress"))==0) {
3842 if (strlen(
option)==strlen(
"debugAddress")) {
3843 Printf(
"%-24s %-16s %2s %4s %-16s %-16s %8s %8s %s %s\n",
3844 "Branch Name",
"Streamer Class",
"ID",
"Type",
"Class",
"Parent",
"pOffset",
"fOffset",
"fObject",
"fOnfileObject");
3853 Printf(
"%-16s %2d %4d %-16s %-16s %8x %8x %p %p%s\n",
3858 for (
Int_t i = 0; i < nbranches; ++i) {
3860 subbranch->
Print(
"debugAddressSub");
3864 if (strncmp(
option,
"debugInfo",strlen(
"debugInfo"))==0) {
3876 Printf(
" With elements:");
3880 Printf(
" with read actions:");
3882 Printf(
" with write actions:");
3891 Printf(
" with read actions:");
3893 Printf(
" with write actions:");
3896 TString suboption =
"debugInfoSub";
3897 suboption += (
option+strlen(
"debugInfo"));
3898 for (
Int_t i = 0; i < nbranches; ++i) {
3900 subbranch->
Print(suboption);
3913 Printf(
"*............................................................................*");
3918 for (
Int_t i=0;i<nbranches;i++) {
3977 }
else if (
fType <= 2) {
3994 }
else if (
fType == 3) {
3996 }
else if (
fType == 31) {
4001 }
else if (
fType == 41) {
4018 Fatal(
"ReadLeaves",
"The ReadLeaves function has not been configured for %s",
GetName());
4036 b.SetBufferOffset(
b.Length() -
sizeof(
n));
4038 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());
4050 for (
Int_t i=0; i<nbranches; i++) {
4067 if (atype > 54)
return;
4076 if (!len_where)
return;
4081 for( k=0; k<
n; k++) {
4082 char **where = &(((
char**)
fAddress)[k]);
4088 case 3: {
length = ((
Int_t*) len_where)[k];
break;}
4091 case 6: {
length = ((
Int_t*) len_where)[k];
break;}
4104 if (
length <= 0)
continue;
4105 if (isArray == 0)
continue;
4151 for (
Int_t ii=0;ii<
n;ii++) {
4152 b.ReadDouble32(&(xx[ii]),se);
4160 for (
Int_t ii=0;ii<
n;ii++) {
4161 b.ReadFloat16(&(xx[ii]),se);
4167 }
else if (
fType <= 2) {
4187 loc = counter.
Last(
']');
4191 countname += counter;
4197 Warning(
"ReadLeaves",
"Missing fBranchCount for %s. Data will not be read correctly by the MakeClass mode.",
GetName());
4223 for (
Int_t ii=0;ii<
n;ii++) {
4224 b.ReadDouble32(&(xx[ii]),se);
4232 for (
Int_t ii=0;ii<
n;ii++) {
4233 b.ReadFloat16(&(xx[ii]),se);
4285 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4287 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());
4321 for (
Int_t i = 0; i < nbranches; ++i) {
4349 if( !
fNdata || *(
void**)proxy->
At( 0 ) != 0 )
4354 void **el = (
void**)proxy->
At( i );
4356 *el = elClass->
New();
4360 proxy->
Commit(alternate);
4386 if (info == 0)
return;
4418 if (info == 0)
return;
4449 if (info == 0)
return;
4480 b.SetBufferOffset(
b.Length()-
sizeof(
n));
4482 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());
4521 if (info==0)
return;
4529 char **end = arr +
fNdata;
4668 Fatal(
"FillLeaves",
"The FillLeaves function has not been configured for %s",
GetName());
4691 }
else if (
fType == 4) {
4696 Warning(
"ReleaseObject",
"Cannot delete allocated STL container because I do not have a proxy! branch: %s",
GetName());
4700 if (needDelete &&
fID >= 0) {
4707 proxy->
Clear(
"force");
4732 proxy->
Clear(
"force");
4736 proxy->
Clear(
"force");
4757 for (
Int_t i = 0; i < nbranches; ++i) {
4772 for (
Int_t i = 0; i < nbranches; ++i) {
4794 for (
Int_t i = 0; i < nbranches; ++i) {
4820 for (
Int_t i = 0; i < nb; ++i) {
4846 for (
Int_t i = 0; i < nbranches; ++i) {
5088 if (clm == content) {
5094 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());
5121 }
else if (
fType == 4) {
5133 for (
Int_t i = 0; i < nbranches; ++i) {
5166 for (
Int_t i = 0; i < nbranches; ++i) {
5194 Error(
"SetAddress",
"For %s, we can not convert %s into %s\n",
5329 Error(
"SetAddress",
"Embedded TClonesArray given a zero address for branch '%s'",
GetName());
5345 Error(
"SetAddress",
"Embedded pointer to a TClonesArray given a zero address for branch '%s'",
GetName());
5349 }
else if (
fType == 4) {
5369 "Branch %s is a split STL container (fStreamerType is: %d), the address can not be set directly.",
5378 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5396 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5416 Error(
"SetAddress",
"Embedded STL container given a zero address for branch '%s'",
GetName());
5422 "Branch %s is a split STL container (fStreamerType is: %d), the address can not be set directly.",
5431 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
5440 Error(
"SetAddress",
"Embedded pointer to an STL container given a zero address for branch '%s'",
GetName());
5444 }
else if (
fType == 41) {
5450 }
else if (
fID < 0) {
5470 Error(
"SetAddress",
"I have no TClass for branch %s, so I cannot allocate an I/O buffer!",
GetName());
5497 for (
Int_t i = 0; i < nbranches; ++i) {
5522 for (
Int_t i = 0; i < nbranches; ++i) {
5538 if (leafOfCounter && leaf) {
5541 if (!leafOfCounter) {
5542 Warning(
"SetBranchCount",
"Counter branch %s for branch %s has no leaves!", brOfCounter->
GetName(),
GetName());
5545 Warning(
"SetBranchCount",
"Branch %s has no leaves!",
GetName());
5564 for (
Int_t i = 0; i < nbranches; ++i) {
5639 if (actionSequence)
delete actionSequence;
5673 TClass *originalClass =
nullptr;
5692 }
else if (
fType == 31) {
5717 }
else if (
fType == 4) {
5719 }
else if (
fType == 41) {
5729 }
else if (
fType == 3) {
5731 }
else if (
fType == 31) {
5733 }
else if (
fType < 0) {
5735 }
else if (
fType == 0 &&
fID == -1) {
5738 if (hasCustomStreamer) {
5746 }
else if (
fType <= 2) {
5773 TClass *originalClass =
nullptr;
5792 }
else if (
fType == 31) {
5817 }
else if (
fType == 4) {
5819 }
else if (
fType == 41) {
5831 }
else if (
fType == 3) {
5833 }
else if (
fType == 31) {
5835 }
else if (
fType < 0) {
5837 }
else if (
fType <=2) {
5859 if (
name == 0)
return;
5869 for (
Int_t i = 0; i < nbranches; ++i) {
6031 else if (
fType == 4) {
6062 const char* motherFileName = treeFileName;
6063 if (mother && (mother !=
this)) {
6089 char* dot = (
char*) strchr(
name,
'.');
6092 if (nch && (
name[nch-1] ==
'.')) {
6111 char* pointer = (
char*) (objptr + element->
GetOffset());
6239 const auto namelen = strlen(
name);
6240 Bool_t dotlast = (namelen && (
name[namelen-1] ==
'.'));
6251 for (
Int_t elemID = 0; elemID < ndata; ++elemID) {
6273 if ((btype == 31) || (btype == 41)) {
6285 unroll =
Unroll(
name, clParent, clOfBase, ptr +
offset, basketsize, splitlevel+splitSTLP, btype);
6344 Int_t subSplitlevel = splitlevel-1;
6345 if (btype == 31 || btype == 41 || elem->
CannotSplit()) {
6360 Int_t unroll =
Unroll(branchname, clParent, elemClass, ptr +
offset, basketsize, splitlevel-1+splitSTLP, btype);
6372 splitSTLP &&
fType != 4 )
6377 basketsize, splitlevel - 1+splitSTLP, sinfo, elemID );
6385 Int_t subSplitlevel = splitlevel - 1;
6386 if ((btype == 31) || (btype == 41) || elem->
CannotSplit()) {
#define R__unlikely(expr)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
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.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t cursor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
R__EXTERN TVirtualMutex * gInterpreterMutex
R__EXTERN TVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
#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
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 Reset(Option_t *option="") override
Reset a Branch.
void SetParentClass(TClass *clparent)
TBranchElement * fBranchCount2
pointer to secondary branchcount branch
Int_t fNdata
! Number of data in this branch
void SetOffset(Int_t offset) override
Set offset of the object (to which the data member represented by this branch belongs) inside its con...
void FillLeavesCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
TString fClassName
Class name of referenced object.
Bool_t SetMakeClass(Bool_t decomposeObj=kTRUE) override
Set the branch in a mode where the object are decomposed (Also known as MakeClass mode).
TStreamerInfoActions::TActionSequence * fFillActionSequence
! Set of actions to be executed to write the data to the basket.
void Print(Option_t *option="") const override
Print TBranch parameters.
Bool_t fInInitInfo
! True during the 2nd part of InitInfo (cut recursion).
void SetAddressImpl(void *addr, Bool_t implied) override
See TBranchElement::SetAddress.
const char * GetClassName() const override
Return the name of the user class whose content is stored in this branch, if any.
TStreamerInfo * GetInfo() const
Get streamer info for the branch class.
void ReadLeavesCollection(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetupAddresses() override
If the branch address is not set, we set all addresses starting with the top level parent branch.
void ResetAddress() override
Set branch address to zero and free all allocated memory.
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.
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.
Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *) override
Loop on all leaves of this branch to fill the basket buffer.
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.
Int_t GetEntry(Long64_t entry=0, Int_t getall=0) override
Read all branches of a BranchElement and return total number of bytes.
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.
void ResetAfterMerge(TFileMergeInfo *) override
Reset a Branch after a Merge operation (drop data but keep customizations)
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.
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
char * GetAddress() const override
Get the branch address.
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.
void SetBranchCount2(TBranchElement *bre)
void FillLeavesCollectionSplitPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void SetAddress(void *addobj) override
Point this branch at an object.
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.
void SetBasketSize(Int_t buffsize) override
Reset the basket size for all sub-branches of this branch element.
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.
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.
void UpdateFile() override
Refresh the value of fDirectory (i.e.
TStreamerInfo * FindOnfileInfo(TClass *valueClass, const TObjArray &branches) const
void ReadLeavesClones(TBuffer &b)
Read leaves into i/o buffers for this branch.
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
TString GetFullName() const override
Return the 'full' name of the branch.
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.
TLeaf * FindLeaf(const char *name) override
Find the leaf corresponding to the name 'searchname'.
TVirtualCollectionIterators * fIterators
! holds the iterators when the branch is of fType==4.
void ReleaseObject()
Delete any object we may have allocated on a previous call to SetAddress.
TClassRef fTargetClass
! Reference to the target in-memory class
Bool_t IsFolder() const override
Return kTRUE if more than one leaf, kFALSE otherwise.
void Browse(TBrowser *b) override
Browse the branch content.
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...
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 ~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.
TBranch * FindBranch(const char *name) override
Find the immediate sub-branch with passed name.
void Streamer(TBuffer &) override
Stream an object of class TBranchElement.
virtual void InitInfo()
Init the streamer info for the branch class, try to compensate for class code unload/reload and schem...
Bool_t GetMakeClass() const override
Return whether this branch is in a mode where the object are decomposed or not (Also known as MakeCla...
virtual void InitializeOffsets()
Initialize the base class subobjects offsets of our sub-branches and set fOffset if we are a containe...
const char * GetIconName() const override
Return icon name depending on type of branch element.
TClass * GetParentClass()
Return a pointer to the parent class of the branch element.
Int_t GetExpectedType(TClass *&clptr, EDataType &type) override
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
TVirtualCollectionProxy * fCollProxy
! collection interface (if any)
void SetFillActionSequence()
Set the sequence of actions needed to write the data out from the buffer.
void SetObject(void *objadd) override
Set object this branch is pointing to.
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...
void SetAddress(void *addr) override
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.
virtual TString GetFullName() const
Return the 'full' name of the branch.
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.
TClass * IsA() const override
Long64_t fReadEntry
! Current entry number when reading
void Print(Option_t *option="") const override
Print TBranch parameters.
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 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
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.
Bool_t IsFolder() const override
Return kTRUE if more than one leaf or browsables, kFALSE otherwise.
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=nullptr)=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.
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
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 &)
Replaces the collection proxy for this class.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
void BuildRealData(void *pointer=nullptr, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
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,...
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
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
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
const char * GetName() const override
Return name of this collection.
virtual Int_t GetEntries() const
void Browse(TBrowser *b) override
Browse this collection (called by TBrowser).
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)
Write an object with proper type checking.
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....
void SetLeafCount(TLeaf *leaf) override
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 SetRange(Bool_t range=kTRUE)
virtual void SetAddress(void *add=nullptr)
virtual Int_t GetLenStatic() const
Return the fixed length of this leaf.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void Add(TObject *obj) override
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual void SetName(const char *name)
Set the name of the TNamed.
Int_t GetEntriesFast() const
Int_t IndexOf(const TObject *obj) const override
TObject ** GetObjectRef() const
Int_t GetEntries() const override
Return the number of objects in array (i.e.
TObject * At(Int_t idx) const override
TObject * UncheckedAt(Int_t i) const
Bool_t IsEmpty() const override
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
void Add(TObject *obj) override
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 TClass * IsA() const
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
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
void ls(Option_t *option="") const override
Print the content of the element.
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
TClass * IsA() const override
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.
static SequencePtr WriteMemberWiseActionsViaProxyGetter(TStreamerInfo *, TVirtualCollectionProxy *collectionProxy, TClass *)
static SequencePtr WriteMemberWiseActionsGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
static SequencePtr ConversionReadMemberWiseActionsViaProxyGetter(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *originalClass)
void Print(Option_t *="") const override
This method must be overridden when a class wants to print itself.
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.
Describes a persistent version of a class.
Int_t GetClassVersion() const override
TStreamerElement * GetElement(Int_t id) const override
T GetTypedValue(char *pointer, Int_t i, Int_t j, Int_t len) const
Return value of element i in object at pointer.
void ls(Option_t *option="") const override
List the TStreamerElement list and also the precomputed tables if option contains the string "incOrig...
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...
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...
TClass * GetClass() const override
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.
TObjArray * GetElements() const override
TStreamerElement * GetStreamerElement(const char *datamember, Int_t &offset) const override
Return the StreamerElement of "datamember" inside our class or any of its base classes.
UInt_t GetCheckSum() const override
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 constexpr 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.
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()
void Draw(Option_t *opt) override
Default Draw method for all objects.
TDirectory * GetDirectory() const
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=nullptr, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
virtual TBranchRef * GetBranchRef() const
@ kSplitCollectionOfPointers
virtual Long64_t GetReadEntry() const
Long64_t GetDebugMin() const
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
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
std::vector< TIDNode > TIDs