56 void RemovePrefix(
TString& str,
const char* prefix) {
58 if (str.
Length() && prefix && strlen(prefix)) {
59 if (!str.
Index(prefix)) {
60 str.
Remove(0, strlen(prefix));
85 for (
Int_t i = 0; i < nbranches; ++i) {
88 case 31: br->
SetType(41);
break;
110 return CanSelfReference(inside);
115 const static TClassRef stringClass(
"std::string");
159 , fReadActionSequence(0)
160 , fFillActionSequence(0)
209 Init(tree, 0, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
251 Init(parent ? parent->
GetTree() : 0, parent, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
270 if (
fTree == 0)
return;
362 if (hasCustomStreamer) {
415 if (splitlevel > 0) {
435 if (!strcmp(name, clOfElement->
GetName())) {
462 Unroll(name, clOfElement, clOfElement, pointer, basketsize, splitlevel+splitSTLP, 0);
463 if (strchr(bname,
'.')) {
496 char **ppointer = (
char**)(pointer);
537 Unroll(name, clOfClones, clOfClones, pointer, basketsize, splitlevel+splitSTLP, 31);
589 Unroll(name, valueClass, valueClass, pointer, basketsize, splitlevel+splitSTLP, 41);
603 Int_t err =
Unroll(name, clm, clm, pointer, basketsize, splitlevel+splitSTLP, 0);
659 Init(tree, 0, bname, clones, basketsize, splitlevel, compress);
683 Init(parent ? parent->
GetTree() : 0, parent, bname, clones, basketsize, splitlevel, compress);
726 if (basketsize < 100) basketsize = 100;
746 Error(
"Init",
"Missing class object of the TClonesArray %s\n",clones->
GetName());
758 std::string branchname = name + std::string(
"_");
760 leaf->
SetName(branchname.c_str());
762 Unroll(name, clonesClass, clonesClass, 0, basketsize, splitlevel, 31);
802 Init(tree, 0, bname, cont, basketsize, splitlevel, compress);
825 Init(parent ? parent->
GetTree() : 0, parent, bname, cont, basketsize, splitlevel, compress);
837 if (name[name.
Length()-1]==
'.') {
879 if (basketsize < 100) {
920 Unroll(name, valueClass, valueClass, 0, basketsize, splitlevel, 41);
1000 TList persistentBranches;
1003 while((branch=(
TBranch*)iB())) {
1004 if (branch->
IsFolder()) persistentBranches.
Add(branch);
1030 mempos=strMember.
First(
'[');
1035 }
else persistentBranches.
Add(branch);
1038 persistentBranches.
Browse(b);
1059 pos = mothername.
First(
'[');
1065 if (mothername(len-1) !=
'.') {
1070 TString doublename = mothername;
1072 Int_t isthere = (name.
Index(doublename) == 0);
1077 doublename.
Append(mothername);
1078 isthere = (name.
Index(doublename) == 0);
1114 for (
Int_t i = 0; i < nbranches; ++i) {
1118 }
else if (
fType == 4) {
1121 Error(
"BuildTitle",
"This cannot happen, fType of parent is not 3 or 4!");
1125 const char* fin = strrchr(bre->
GetTitle(),
'.');
1158 if ((stype > 40) && (stype < 61)) {
1200 Error(
"Fill",
"attempt to fill branch %s while addresss is not set",
GetName());
1223 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1235 Error(
"Fill",
"Failed filling branch:%s, nbytes=%d",
GetName(), nwrite);
1243 for (
Int_t i = 0; i < nbranches; ++i) {
1246 nwrite = branch->
Fill();
1248 Error(
"Fill",
"Failed filling branch:%s.%s, nbytes=%d",
GetName(), branch->
GetName(), nwrite);
1261 printf(
"Fill: %lld, branch=%s, nbytes=%d\n", entry,
GetName(), nbytes);
1299 }
else if (
fType == 31) {
1320 Error(
"FillLeaves",
"The branch counter address was zero!");
1326 Error(
"FillLeaves",
"Clonesa: %s, n=%d, sorry not supported yet",
GetName(), n);
1349 for (
Int_t ii = 0; ii <
n; ++ii) {
1359 for (
Int_t ii = 0; ii <
n; ++ii) {
1442 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1473 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1503 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1534 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1589 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1594 char **end = arr +
n;
1671 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1715 Error(
"FillLeaves",
"Cannot get streamer info for branch '%s'",
GetName());
1729 if (name[name.length()-1]==
']') {
1730 std::size_t dim = name.find_first_of(
"[");
1731 if (dim != std::string::npos) {
1735 if (name[name.size()-1] !=
'.') {
1754 if (se && se->
IsBase()) {
1756 UInt_t len = strlen(name);
1762 std::string longnm_parent;
1766 longnm_parent +=
name;
1768 UInt_t namelen = strlen(name);
1772 for(
Int_t i = 0; i < nbranches; ++i) {
1775 const char *brname = branch->
GetName();
1776 UInt_t brlen = strlen(brname);
1777 if (brname[brlen-1]==
']') {
1778 const char *dim = strchr(brname,
'[');
1780 brlen = dim - brname;
1783 if (namelen == brlen
1784 && strncmp(name,brname,brlen) == 0) {
1787 if (brlen == longnm.length()
1788 && strncmp(longnm.c_str(),brname,brlen) == 0) {
1792 if (brlen == longnm_parent.length()
1793 && strncmp(longnm_parent.c_str(),brname,brlen) == 0) {
1797 if (namelen>brlen && name[brlen]==
'.' && strncmp(name,brname,brlen)==0) {
1808 for(
Int_t i = 0; i < nbranches; ++i) {
1814 if (si && br->
GetID() >= 0) {
1816 if (se && se->
IsBase()) {
1838 if (parent==
this || parent->
GetID()<0 )
return 0;
1843 if (! se->
IsBase() )
return 0;
1851 std::string longname( grand_parent->
GetName() );
1857 if ( longname == leafname ) {
1909 if ( !targetClass ) {
1910 Error(
"InitInfo",
"The target class dictionary is not present!" );
1928 target +=
"@@emulated";
1937 if( targetClass != cl ) {
1954 if( targetClass != cl )
1984 Error(
"InitInfo",
"StreamerInfo is not compiled.");
1995 size_t pos = s.rfind(
'.');
1996 if (pos != std::string::npos) {
1997 s = s.substr(pos+1);
1999 while ((pos = s.rfind(
'[')) != std::string::npos) {
2000 s = s.substr(0, pos);
2007 for (
size_t i = 0; i <
ndata; ++i) {
2059 for (
size_t i = 0; i <
ndata; ++i) {
2086 for (
Int_t i = 0; i < nbranches; ++i) {
2090 lastbranch = subbranch;
2122 const char* className = 0;
2159 Fatal(
"GetCollectionProxy",
2160 "Can not create a Collection Proxy of any kind for the class \"%s\" needed by the branch \"%s\" of the TTree \"%s\"!",
2164 "Fixing the collection proxy of the class \"%s\" \n" 2165 "\tneeded by the branch \"%s\" of the TTree \"%s\" to be similar to \"%s\".",
2171 }
else if (
fType == 41) {
2214 if (newInfo != brInfo) {
2223 if (newType.
Length()==0) {
2306 for (
Int_t i = 0; i < nbranches; ++i) {
2334 Info(
"GetEntry",
"%lld, branch=%s, nbytes=%d", entry,
GetName(), nbytes);
2352 if ((type == -1) || (
fID == -1)) {
2361 if (!expectedClass) {
2371 Error(
"GetExpectedType",
"Did not find the type for %s",
GetName());
2384 return "TBranchElement-folder";
2386 return "TBranchElement-leaf";
2447 const char *types[20] = {
2470 return types[itype];
2479 template <
typename T>
2499 }
else if (fOnfileObject) {
2530 }
else if (
fType <= 2) {
2555 }
else if (
fType == 41) {
2591 }
else if (fOnfileObject) {
2608 }
else if (
fType == 4) {
2611 }
else if (
fType == 31) {
2616 }
else if (
fType == 41) {
2621 }
else if (
fType <= 2) {
2636 }
else if (
fType == 41) {
2638 }
else if (prID < 0) {
2643 char **val = (
char**)(
object+
GetInfoImp()->TStreamerInfo::GetElementOffset(prID));
2686 Warning(
"InitializeOffsets",
"No branch class set for branch: %s",
GetName());
2703 Int_t localOffset = 0;
2716 Warning(
"InitializeOffsets",
"Streamer info for branch: %s has no elements array!",
GetName());
2723 Warning(
"InitializeOffsets",
"Cannot get streamer element for branch: %s!",
GetName());
2744 Error(
"InitializeOffsets",
"Could not find class for branch: %s",
GetName());
2758 stlParentName = br->
GetName();
2767 for (
Int_t subBranchIdx = 0; subBranchIdx < nbranches; ++subBranchIdx) {
2768 bool alternateElement =
false;
2772 if (subBranch == 0) {
2786 Warning(
"InitializeOffsets",
"No streamer info for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
2791 Warning(
"InitializeOffsets",
"No elements array for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
2797 if (!subBranchElement) {
2798 Warning(
"InitializeOffsets",
"No streamer element for branch: %s subbranch: %s",
GetName(), subBranch->
GetName());
2812 typedef TStreamerInfoActions::ActionContainer_t::iterator iterator;
2815 iter != end; ++iter) {
2820 subBranchElement =
e;
2821 alternateElement =
true;
2828 localOffset = subBranchElement->
GetOffset();
2837 && CanSelfReference(subBranchElement->
GetClass()))
2853 Warning(
"InitializeOffsets",
"Branch '%s' has no mother!",
GetName());
2859 if (motherName.Length() && strchr(motherName.Data(),
'.')) {
2863 if (motherName.Length() && (motherName[motherName.Length()-1] ==
'.')) {
2864 motherDotAtEnd =
kTRUE;
2868 if ((subBranch->
fType == 1) || (subBranchElement && subBranchElement->
IsBase())) {
2876 isBaseSubBranch =
kTRUE;
2880 if ((subBranch->
fType == 31) || (subBranch->
fType == 41)) {
2882 isContDataMember =
kTRUE;
2907 if (motherDotAtEnd) {
2909 dataName.
Remove(0, motherName.Length());
2911 if (!stlParentNameUpdated && stlParentName.
Length()) {
2912 stlParentName.
Remove(0, motherName.Length());
2913 stlParentNameUpdated =
kTRUE;
2915 }
else if (motherDot) {
2929 if (dataName.Length() == motherName.Length()) {
2930 dataName.Remove(0, motherName.Length());
2932 if (!stlParentNameUpdated && stlParentName.
Length()) {
2933 stlParentName.
Remove(0, motherName.Length());
2938 if (dataName.Length() > motherName.Length()) {
2939 dataName.
Remove(0, motherName.Length() + 1);
2940 if (!stlParentNameUpdated && stlParentName.
Length()) {
2941 stlParentName.
Remove(0, motherName.Length());
2946 stlParentNameUpdated =
kTRUE;
2947 if (isBaseSubBranch) {
2951 if (
pattern.Length() <= dataName.Length()) {
2952 if (!strcmp(dataName.Data() + (dataName.Length() -
pattern.Length()),
pattern.Data())) {
2956 dataName.Remove(dataName.Length() -
pattern.Length());
2960 if (dataName.Length()) {
2961 if (dataName[0] ==
'.') {
2962 dataName.Remove(0, 1);
2971 if (motherDotAtEnd) {
2973 parentName.
Remove(0, motherName.Length());
2974 }
else if (motherDot) {
2988 if (parentName.
Length() == motherName.Length()) {
2989 parentName.
Remove(0, motherName.Length());
2993 if (parentName.
Length() > motherName.Length()) {
2994 parentName.
Remove(0, motherName.Length() + 1);
3024 RemovePrefix(dataName, parentName);
3028 if (dataName.Length()) {
3029 if (dataName[0] ==
'.') {
3030 dataName.Remove(0, 1);
3035 if (dataName.Length()) {
3036 if (dataName[dataName.Length()-1] ==
'.') {
3037 dataName.Remove(dataName.Length() - 1, 1);
3053 if (dataName.Length()) {
3078 target +=
"@@emulated";
3096 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class, and cannot get class for clones class: '%s'!", subBranch->
GetName(),
GetClonesName());
3100 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass->
GetName());
3104 Warning(
"InitializeOffsets",
"subBranch: '%s' has no parent class! Assuming parent class is: '%s'.", subBranch->
GetName(), pClass ? pClass->
GetName() :
"unknowned class");
3109 pClass = branchClass;
3114 if (renamed && pClass) {
3115 if (pClass == branchClass) {
3127 if( dynamic_cast<TBranchSTL*>(
fParent) && stlParentName.
Length() )
3129 if( !strncmp( stlParentName.
Data(), dataName.Data(), stlParentName.
Length()-1 )
3130 && dataName[ stlParentName.
Length() ] ==
'.' )
3131 dataName.Remove( 0, stlParentName.
Length()+1 );
3138 if (alternateElement) {
3139 Ssiz_t dotpos = dataName.Last(
'.');
3140 Ssiz_t endpos = dataName.Length();
3141 if (dotpos !=
kNPOS) ++dotpos;
else dotpos = 0;
3142 dataName.Replace(dotpos,endpos-dotpos,subBranchElement->
GetFullName());
3163 Error(
"InitializeOffsets",
3164 "Could not find the real data member '%s' when constructing the branch '%s' [Likely missing ShowMember].",
3169 Info(
"InitializeOffsets",
3170 "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'. ",
3174 Fatal(
"InitializeOffsets",
3175 "Could not find the real data member '%s' when constructing the branch '%s' [Likely an internal error, please report to the developers].",
3183 if (isBaseSubBranch) {
3186 Warning(
"InitializeOffsets",
"Could not find the data member name for branch '%s' with parent branch '%s', assuming offset is zero!", subBranch->
GetName(),
GetName());
3194 if (isContDataMember) {
3208 if (isBaseSubBranch) {
3215 subBranch->
SetOffset(offset - localOffset);
3225 }
else if (isSplit) {
3226 if (isBaseSubBranch) {
3237 if (isBaseSubBranch) {
3268 if (nbranches >= 1) {
3272 return browsables && browsables->
GetSize();
3287 if (basket &&
fTree) {
3300 bufbegin = entryOffset[entry-first];
3303 bufnext = entryOffset[entry+1-first];
3307 if (bufnext == bufbegin) {
3326 if (strncmp(option,
"debugAddress",strlen(
"debugAddress"))==0) {
3327 if (strlen(option)==strlen(
"debugAddress")) {
3328 Printf(
"%-24s %-16s %2s %4s %-16s %-16s %8s %8s %s\n",
3329 "Branch Name",
"Streamer Class",
"ID",
"Type",
"Class",
"Parent",
"pOffset",
"fOffset",
"fObject");
3338 Printf(
"%-16s %2d %4d %-16s %-16s %8x %8x %s\n",
3343 for (
Int_t i = 0; i < nbranches; ++i) {
3345 subbranch->
Print(
"debugAddressSub");
3349 if (strncmp(option,
"debugInfo",strlen(
"debugInfo"))==0) {
3356 Printf(
" with read actions:");
3358 Printf(
" with write actions:");
3361 TString suboption =
"debugInfoSub";
3362 suboption += (option+strlen(
"debugInfo"));
3363 for (
Int_t i = 0; i < nbranches; ++i) {
3365 subbranch->
Print(suboption);
3378 Printf(
"*............................................................................*");
3383 for (
Int_t i=0;i<nbranches;i++) {
3385 branch->
Print(option);
3405 }
else if (fOnfileObject) {
3442 }
else if (
fType <= 2) {
3459 }
else if (
fType == 3) {
3461 }
else if (
fType == 31) {
3466 }
else if (
fType == 41) {
3483 Fatal(
"ReadLeaves",
"The ReadLeaves function has not been configured for %s",
GetName());
3498 if ((n[0] < 0) || (n[0] >
fMaximum)) {
3503 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());
3515 for (
Int_t i=0; i<nbranches; i++) {
3532 if (atype > 54)
return;
3541 if (!len_where)
return;
3546 for( k=0; k<
n; k++) {
3547 char **where = &(((
char**)
fAddress)[k]);
3551 case 1: {length = ((
Char_t*) len_where)[k];
break;}
3552 case 2: {length = ((
Short_t*) len_where)[k];
break;}
3553 case 3: {length = ((
Int_t*) len_where)[k];
break;}
3554 case 4: {length = ((
Long_t*) len_where)[k];
break;}
3556 case 6: {length = ((
Int_t*) len_where)[k];
break;}
3558 case 11: {length = ((
UChar_t*) len_where)[k];
break;}
3559 case 12: {length = ((
UShort_t*) len_where)[k];
break;}
3560 case 13: {length = ((
UInt_t*) len_where)[k];
break;}
3561 case 14: {length = ((
ULong_t*) len_where)[k];
break;}
3562 case 15: {length = ((
UInt_t*) len_where)[k];
break;}
3563 case 16: {length = ((
Long64_t*) len_where)[k];
break;}
3564 case 17: {length = ((
ULong64_t*)len_where)[k];
break;}
3565 case 18: {length = ((
Bool_t*) len_where)[k];
break;}
3569 if (length <= 0)
continue;
3570 if (isArray == 0)
continue;
3616 for (
Int_t ii=0;ii<
n;ii++) {
3625 for (
Int_t ii=0;ii<
n;ii++) {
3632 }
else if (
fType <= 2) {
3652 loc = counter.
Last(
']');
3656 countname += counter;
3662 Warning(
"ReadLeaves",
"Missing fBranchCount for %s. Data will not be read correctly by the MakeClass mode.",
GetName());
3688 for (
Int_t ii=0;ii<
n;ii++) {
3697 for (
Int_t ii=0;ii<
n;ii++) {
3752 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());
3758 R__PushCache onfileObject(((
TBufferFile&)b),fOnfileObject,n);
3786 for (
Int_t i = 0; i < nbranches; ++i) {
3814 if( !
fNdata || *(
void**)proxy->
At( 0 ) != 0 )
3819 void **el = (
void**)proxy->
At( i );
3821 *el = elClass->
New();
3825 proxy->
Commit(alternate);
3851 if (info == 0)
return;
3892 if (info == 0)
return;
3923 if (info == 0)
return;
3956 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());
3995 if (info==0)
return;
4003 char **end = arr +
fNdata;
4025 R__PushCache onfileObject(((
TBufferFile&)b),fOnfileObject,1);
4077 R__PushCache onfileObject(((
TBufferFile&)b),fOnfileObject,1);
4112 R__PushCache onfileObject(((
TBufferFile&)b),fOnfileObject,1);
4133 R__PushCache onfileObject(((
TBufferFile&)b),fOnfileObject,1);
4142 Fatal(
"FillLeaves",
"The FillLeaves function has not been configured for %s",
GetName());
4165 }
else if (
fType == 4) {
4170 Warning(
"ReleaseObject",
"Cannot delete allocated STL container because I do not have a proxy! branch: %s",
GetName());
4174 if (needDelete &&
fID >= 0) {
4181 proxy->
Clear(
"force");
4206 proxy->
Clear(
"force");
4210 proxy->
Clear(
"force");
4231 for (
Int_t i = 0; i < nbranches; ++i) {
4233 branch->
Reset(option);
4246 for (
Int_t i = 0; i < nbranches; ++i) {
4268 for (
Int_t i = 0; i < nbranches; ++i) {
4294 for (
Int_t i = 0; i < nb; ++i) {
4433 if (
Long_t(addr) == -1) {
4525 if (clm == content) {
4531 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());
4557 }
else if (
fType == 4) {
4569 for (
Int_t i = 0; i < nbranches; ++i) {
4602 for (
Int_t i = 0; i < nbranches; ++i) {
4630 Error(
"SetAddress",
"For %s, we can not convert %s into %s\n",
4763 Error(
"SetAddress",
"Embedded TClonesArray given a zero address for branch '%s'",
GetName());
4779 Error(
"SetAddress",
"Embedded pointer to a TClonesArray given a zero address for branch '%s'",
GetName());
4783 }
else if (
fType == 4) {
4810 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
4827 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
4846 Error(
"SetAddress",
"Embedded STL container given a zero address for branch '%s'",
GetName());
4859 Error(
"SetAddress",
"Failed to allocate STL container for branch '%s'",
GetName());
4867 Error(
"SetAddress",
"Embedded pointer to an STL container given a zero address for branch '%s'",
GetName());
4871 }
else if (
fType == 41) {
4877 }
else if (
fID < 0) {
4897 Error(
"SetAddress",
"I have no TClass for branch %s, so I cannot allocate an I/O buffer!",
GetName());
4924 for (
Int_t i = 0; i < nbranches; ++i) {
4947 for (
Int_t i = 0; i < nbranches; ++i) {
4963 if (leafOfCounter && leaf) {
4966 if (!leafOfCounter) {
4967 Warning(
"SetBranchCount",
"Counter branch %s for branch %s has no leaves!", brOfCounter->
GetName(),
GetName());
4970 Warning(
"SetBranchCount",
"Branch %s has no leaves!",
GetName());
4989 for (
Int_t i = 0; i < nbranches; ++i) {
5057 original =
transient;
5060 }
else if (
fType == 31) {
5082 }
else if (
fType == 4) {
5084 }
else if (
fType == 41) {
5094 }
else if (
fType == 3) {
5096 }
else if (
fType == 31) {
5098 }
else if (
fType < 0) {
5100 }
else if (
fType == 0 &&
fID == -1) {
5103 if (hasCustomStreamer) {
5111 }
else if (
fType <= 2) {
5155 original =
transient;
5158 }
else if (
fType == 31) {
5181 }
else if (
fType == 4) {
5183 }
else if (
fType == 41) {
5195 }
else if (
fType == 3) {
5197 }
else if (
fType == 31) {
5199 }
else if (
fType < 0) {
5201 }
else if (
fType <=2) {
5223 if (name == 0)
return;
5239 for (
Int_t i = 0; i < nbranches; ++i) {
5330 void TBranchElement::Streamer(
TBuffer& R__b)
5394 else if (
fType == 4) {
5425 const char* motherFileName = treeFileName;
5426 if (mother && (mother !=
this)) {
5504 for (
Int_t elemID = 0; elemID <
ndata; ++elemID) {
5526 if ((btype == 31) || (btype == 41)) {
5538 unroll =
Unroll(name, clParent, clOfBase, ptr + offset, basketsize, splitlevel+splitSTLP, btype);
5597 Int_t subSplitlevel = splitlevel-1;
5598 if (btype == 31 || btype == 41 || elem->
CannotSplit()) {
5613 Int_t unroll =
Unroll(branchname, clParent, elemClass, ptr + offset, basketsize, splitlevel-1+splitSTLP, btype);
5625 splitSTLP &&
fType != 4 )
5630 basketsize, splitlevel - 1+splitSTLP, sinfo, elemID );
5638 Int_t subSplitlevel = splitlevel - 1;
5639 if ((btype == 31) || (btype == 41) || elem->
CannotSplit()) {
5643 TBranchElement* branch =
new TBranchElement(
this, branchname, sinfo, elemID, ptr + offset, basketsize, subSplitlevel+splitSTLP, btype);
Describe Streamer information for one class version.
TClassRef fTargetClass
! Reference to the target in-memory class
Long64_t GetReadEntry() const
virtual Int_t GetEntries() const
virtual const char * GetTitle() const
Returns title of object.
void SetBufferOffset(Int_t offset=0)
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
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.
Ssiz_t Last(char c) const
Find last occurrence of a character c.
void FillLeavesAssociativeCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void WriteFloat16(Float_t *f, TStreamerElement *ele=0)=0
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=0, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
virtual void Print(Option_t *option="") const
Print branch parameters.
TBranchElement * fBranchCount2
pointer to secondary branchcount branch
TVirtualCollectionProxy * GetCollectionProxy()
Return the collection proxy describing the branch content, if any.
virtual Int_t GetProperties() const
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
Int_t GetNelement() const
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
Int_t * GetEntryOffset() const
virtual void * GetValuePointer() const
Returns pointer to first data element of this branch.
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
T GetTypedValue(Int_t i, Int_t len, Bool_t subarr=kFALSE) const
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
TVirtualStreamerInfo * fInfo
TStreamerInfo form which the action is derived.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket...
virtual void SetAddress(void *add)
Set address of this branch.
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.
virtual TLeaf * FindLeaf(const char *name)
Find the leaf corresponding to the name 'searchname'.
ActionContainer_t fActions
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 fOffset
Offset of this branch.
virtual TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Int_t version)=0
virtual Int_t GetExpectedType(TClass *&clptr, EDataType &type)
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
const char * GetTypeName() const
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
virtual const char * GetName() const
Return name of this collection.
This namespace contains pre-defined functions to be used in conjuction with TExecutor::Map and TExecu...
Int_t ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *object)
Read one collection of objects from the buffer using the StreamerInfoLoopAction.
Option_t * GetDrawOption() const
Get option used by the graphics system to draw this object.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
void CreateIterators(void *collection, TVirtualCollectionProxy *proxy)
Long64_t fEntries
Number of entries.
virtual void InitInfo()
Init the streamer info for the branch class, try to compensate for class code unload/reload and schem...
virtual TStreamerInfoActions::TActionSequence * GetConversionReadMemberWiseActions(TClass *oldClass, Int_t version)=0
virtual Bool_t CannotSplit() const
Returns true if the element cannot be split, false otherwise.
virtual Long64_t GetReadEntry() const
All ROOT classes may have RTTI (run time type identification) support added.
R__EXTERN TVirtualMutex * gInterpreterMutex
Double_t GetValue(Int_t i, Int_t len, Bool_t subarr=kFALSE) const
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...
char * GetObject() const
Return a pointer to our object.
TString & ReplaceAll(const TString &s1, const TString &s2)
TString fParentName
Name of parent class.
virtual void WriteDouble32(Double_t *d, TStreamerElement *ele=0)=0
ReadLeaves_t fReadLeaves
! Pointer to the ReadLeaves implementation to use.
virtual void SetLeafCount(TLeaf *leaf)
Set the leaf count of this leaf.
virtual void Reset(Option_t *option="")
Reset a Branch.
virtual void SetName(const char *name)
Set the name of the TNamed.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
virtual void Commit(void *)=0
virtual TLeaf * FindLeaf(const char *name)
Find the leaf corresponding to the name 'searchname'.
virtual void Print(Option_t *option="") const
Print TBranch parameters.
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
virtual EDataType GetType() const =0
Buffer base class used for serializing objects.
void FillLeavesCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void SetName(const char *new_name)
Bool_t IsPersistent() const
const Int_t kBranchObject
TClass * GetNewClass() const
void FillLeavesCustomStreamer(TBuffer &b)
Write leaves into i/o buffers for this branch.
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
virtual Int_t WriteTObject(const TObject *obj, const char *name=0, Option_t *="", Int_t=0)
See TDirectoryFile::WriteTObject for details.
UInt_t fElemId
Identifier of the TStreamerElement.
TObjArray fBaskets
-> List of baskets of this branch
Bool_t IsMissingCollection() const
Detect a collection written using a zero pointer in old versions of root.
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method). ...
virtual void SetAddress(void *addobj)
Point this branch at an object.
static void R__CleanName(std::string &name)
Remove trailing dimensions and make sure there is a trailing dot.
Short_t Min(Short_t a, Short_t b)
virtual void SetTargetClass(const char *name)
Set the name of the class of the in-memory object into which the data will loaded.
Long64_t GetDebugMin() const
const char * GetClassName()
virtual void Clear(const char *opt="")=0
R__EXTERN TVirtualMutex * gROOTMutex
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force)=0
void SetReadActionSequence()
Set the sequence of actions needed to read the data out of the buffer.
Int_t fNleaves
! Number of leaves
void ReadLeavesCollectionSplitVectorPtrMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
TObjArray fLeaves
-> List of leaves of this branch
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
void MapObject(const TObject *obj, UInt_t offset=1)
Add object to the fMap container.
Int_t GetEntriesFast() const
void PrintValue(Int_t i) const
Prints values of leaves.
TString & Prepend(const char *cs)
Long64_t * fBasketSeek
[fMaxBaskets] Addresses of baskets on file
UInt_t fCheckSum
CheckSum of class.
void FillLeavesCollectionSplitVectorPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void SetupAddressesImpl()
If the branch address is not set, we set all addresses starting with the top level parent branch...
TStreamerInfoActions::TActionSequence * fFillActionSequence
! Set of actions to be executed to write the data to the basket.
void CreateIterators(void *collection, TVirtualCollectionProxy *proxy)
Bool_t fInit
! Initialization flag for branch assignment
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
static TActionSequence * CreateReadMemberWiseActions(TVirtualStreamerInfo *info, TVirtualCollectionProxy &proxy)
Create the bundle of the actions necessary for the streaming memberwise of the content described by '...
virtual TClass * GetCollectionClass() const
virtual TObjArray * GetElements() const =0
void ReadLeavesClones(TBuffer &b)
Read leaves into i/o buffers for this branch.
Int_t * fBasketBytes
[fMaxBaskets] Length of baskets on file
virtual TList * GetBrowsables()
Returns (and, if 0, creates) browsable objects for this branch See TVirtualBranchBrowsable::FillListO...
TActionSequence * CreateSubSequence(const std::vector< Int_t > &element_ids, size_t offset)
Long64_t fEntryNumber
Current entry number (last one filled in this branch)
void ReadLeavesCustomStreamer(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual const char * GetClonesName() const
TList * GetListOfRealData() const
void FillLeavesCollection(TBuffer &b)
Write leaves into i/o buffers for this branch.
const char * Data() const
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
void ReadLeavesMemberBranchCount(TBuffer &b)
Read leaves into i/o buffers for this branch.
Int_t fWriteBasket
Last basket number written.
Int_t fNdata
! Number of data in this branch
friend class TClonesArray
TVirtualArray * fOnfileObject
! Place holder for the onfile representation of data members.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
virtual Bool_t HasPointers() const =0
void SetFillActionSequence()
Set the sequence of actions needed to write the data out from the buffer.
TStreamerInfoActions::TActionSequence * fReadActionSequence
! Set of actions to be executed to extract the data from the basket.
virtual void SetAddress(void *addr)
We are the top level branch.
TStreamerInfo * GetInfo() const
Get streamer info for the branch class.
Int_t fMaximum
Maximum entries for a TClonesArray or variable array.
const char * GetCountName() const
Bool_t IsCompiled() const
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
void ReadLeavesCollectionSplitPtrMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
void BuildTitle(const char *name)
Set branch and leaf name and title in the case of a container sub-branch.
virtual void ResetDeleteObject()
Release ownership of any allocated objects.
virtual TVirtualCollectionProxy * Generate() const =0
void FillLeavesClones(TBuffer &b)
Write leaves into i/o buffers for this branch.
void FillLeavesClonesMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void SetBasketSize(Int_t buffsize)
Reset the basket size for all sub-branches of this branch element.
void ReadLeavesMemberCounter(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual Bool_t IsaPointer() const
const Int_t kDoNotProcess
virtual const char * GetParentName() const
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...
TString & Append(const char *cs)
Int_t * fBranchOffset
! Sub-Branch offsets with respect to current transient class
TVirtualCollectionProxy * fCollProxy
! collection interface (if any)
The addressing set have been called for this branch.
Long64_t GetEntries() const
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 Browse(TBrowser *b)
Browse the branch content.
Version_t fClassVersion
Version number of class.
TObjArray * GetListOfBranches()
TClass * GetClass() const
Int_t fMaxBaskets
Maximum number of Baskets so far.
void FillLeavesMemberCounter(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
void FillLeavesMemberBranchCount(TBuffer &b)
Write leaves into i/o buffers for this branch.
TString fClassName
Class name of referenced object.
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of a BranchElement and return total number of bytes.
We are the owner of fOnfileObject.
virtual void SetAddress(void *add=0)
A branch containing and managing a TRefTable for TRef autoloading.
void SetFillLeavesPtr()
Set the FillLeaves pointer to execute the expected operations.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch after a Merge operation (drop data but keep customizations)
Int_t GetClassVersion() const
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
ROOT::ESTLType UnderlyingIsSTLCont(std::string_view type)
Return the type of STL collection, if any, that is the underlying type of the given type...
Int_t fSplitLevel
Branch split level.
TString fClonesName
Name of class in TClonesArray (if any)
virtual void ResetAddress()
Set branch address to zero and free all allocated memory.
void ReadLeavesClonesMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch.
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
Bool_t GetMakeClass() const
Return whether this branch is in a mode where the object are decomposed or not (Also known as MakeCla...
virtual TFile * GetFile() const
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE) 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 < ...
virtual Int_t GetMaximum() const
virtual Int_t Fill()
Loop on all leaves of this branch to fill Basket buffer.
TObject * UncheckedAt(Int_t i) const
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
void FillLeavesMakeClass(TBuffer &b)
Write leaves into i/o buffers for this branch.
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
Int_t ApplySequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection)
Read one collection of objects from the buffer using the StreamerInfoLoopAction.
Using a TBrowser one can browse all ROOT objects.
void(TBranch::* ReadLeaves_t)(TBuffer &b)
Int_t fID
element serial number in fInfo
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
void SetParentClass(TClass *clparent)
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
virtual void ls(Option_t *option="") const
Print the content of the element.
virtual Int_t Fill()
Loop on all leaves of this branch to fill the basket buffer.
Int_t IndexOf(const TObject *obj) const
Small helper class to generically acquire and release iterators.
Int_t fBasketSize
Initial Size of Basket Buffer.
TObjArray * GetElements() const
void ReadLeavesCollection(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual void SetupAddresses()
If the branch address is not set, we set all addresses starting with the top level parent branch...
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
virtual void SetType(Int_t btype)
virtual Int_t ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *object)=0
Basic data type descriptor (datatype information is obtained from CINT).
const char * GetTypeNameBasic() const
Return type name of this element in case the type name is not a standard basic type, return the basic type name known to CINT.
TClassRef fParentClass
! Reference to class definition in fParentName
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...
TDirectory * GetDirectory() const
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
Bool_t IsFolder() const
Return kTRUE if more than one leaf, kFALSE otherwise.
static TActionSequence * CreateWriteMemberWiseActions(TVirtualStreamerInfo *info, TVirtualCollectionProxy &proxy)
Create the bundle of the actions necessary for the streaming memberwise of the content described by '...
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
TBranch * GetMother() const
Get our top-level parent branch in the tree.
UInt_t GetCheckSum() const
TBranchElement * fBranchCount
pointer to primary branchcount branch
Int_t fStreamerType
branch streamer type
TClass * GetParentClass()
Return a pointer to the parent class of the branch element.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
FillLeaves_t fFillLeaves
! Pointer to the FillLeaves implementation to use.
Bool_t TestBit(UInt_t f) const
void SetReadLeavesPtr()
Set the ReadLeaves pointer to execute the expected operations.
virtual TStreamerInfoActions::TActionSequence * GetWriteMemberWiseActions()=0
TClass * GetCurrentClass()
Return a pointer to the current type of the data member corresponding to branch element.
void ReadLeavesImpl(TBuffer &b)
Unconfiguration Read Leave function.
Manages buffers for branches of a Tree.
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 TBranchRef * GetBranchRef() const
TClassRef fCurrentClass
! Reference to current (transient) class definition
virtual void * New() const
The TRealData class manages the effective list of all data members for a given class.
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
Bool_t CanIgnoreTObjectStreamer()
virtual const char * GetName() const
Returns name of object.
TSubString Strip(EStripType s=kTrailing, char c= ' ') const
Return a substring of self stripped at beginning and/or end.
The ROOT global object gROOT contains a list of all defined classes.
TClassRef fBranchClass
! Reference to class definition in fClassName
void Print(Option_t *="") const
This method must be overridden when a class wants to print itself.
TBranch * GetSubBranch(const TBranch *br) const
Find the parent branch of child.
Version_t GetClassVersion() const
TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Bool_t forCollection)
We are the owner of fObject.
virtual void ReadFastArray(Bool_t *b, Int_t n)=0
virtual Int_t GetMaximum() const
Return maximum count value of the branchcount if any.
void ValidateAddress() const
virtual void WriteFastArray(const Bool_t *b, Int_t n)=0
virtual TClass * GetClass() const
A TLeaf for the general case when using the branches created via a TStreamerInfo (i.e.
TStreamerInfo * GetInfoImp() const
Get streamer info for the branch class.
A Branch for the case of an object.
Int_t GetCompressionSettings() const
virtual void SetRequestedEntry(Long64_t entry)
virtual void SetBasketSize(Int_t buffsize)
Set the basket size The function makes sure that the basket size is greater than fEntryOffsetlen.
virtual void ReadFloat16(Float_t *f, TStreamerElement *ele=0)=0
TString & Remove(Ssiz_t pos)
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
void SetBranchCount(TBranchElement *bre)
Set the branch counter for this branch.
virtual Int_t ApplySequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection)=0
Int_t fSTLtype
! STL container type
const char * GetCountName() const
virtual void MapObject(const TObject *obj, UInt_t offset=1)=0
virtual Int_t GetSize() const
virtual const char * GetTypeName() const
Return type name of element in the branch.
TStreamerElement * GetStreamerElement(const char *datamember, Int_t &offset) const
Return the StreamerElement of "datamember" inside our class or any of its base classes.
virtual TVirtualArray * PopDataCache()
Pop and Return the 'current' data cache area from the list of area to be used for temporarily store '...
T GetTypedValueClones(TClonesArray *clones, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
Int_t fReadBasket
! Current basket number when reading
const char * GetIconName() const
Return icon name depending on type of branch element.
virtual void ResetAddress()
Reset the address of the branch.
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual TClass * GetValueClass() const =0
void FillLeavesMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
TClass * GetClass() const
Describe directory structure in memory.
unsigned long long ULong64_t
void SetBranchCount2(TBranchElement *bre)
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
Bool_t IsAutoDelete() const
Return kTRUE if an existing object in a TBranchObject must be deleted.
Int_t fBranchID
! ID number assigned by a TRefTable.
std::vector< Int_t > fIDs
! List of the serial number of all the StreamerInfo to be used.
TBranchElement()
Default and I/O constructor.
virtual void * At(UInt_t idx)=0
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
virtual Int_t SetParent(const TObject *obj, Int_t branchID)
Set the current parent branch.
#define R__LOCKGUARD(mutex)
TTree * fTree
! Pointer to Tree header
void Browse(TBrowser *b)
Browse this collection (called by TBrowser).
TObjArray * GetListOfLeaves()
Int_t GetEntries() const
Return the number of objects in array (i.e.
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any. ...
virtual void PushDataCache(TVirtualArray *)
Push a new data cache area onto the list of area to be used for temporarily store 'missing' data memb...
TDirectory * fDirectory
! Pointer to directory where this branch buffers are stored
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.
const char * GetFileName() const
TClassRef fClonesClass
! Reference to class definition in fClonesName
virtual void SetOffset(Int_t offset)
Set offset of the object (to which the data member represented by this branch belongs) inside its con...
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
void ReadLeavesMakeClass(TBuffer &b)
Read leaves into i/o buffers for this branch.
TClass * GetClass() const
Mother of all ROOT objects.
virtual void ReadDouble32(Double_t *d, TStreamerElement *ele=0)=0
A Branch handling STL collection of pointers (vectors, lists, queues, sets and multisets) while stori...
TClass * GetClass() const
Bool_t fInitOffsets
! Initialization flag to not endlessly recalculate offsets
TClassRef is used to implement a permanent reference to a TClass object.
An array of clone (identical) objects.
Long64_t * fBasketEntry
[fMaxBaskets] Table of first entry in each basket
virtual ~TBranchElement()
Destructor.
static void SwitchContainer(TObjArray *)
Modify the container type of the branches.
void FillLeavesCollectionSplitPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void ExpandCreateFast(Int_t n)
Expand or shrink the array to n elements and create the clone objects by calling their default ctor...
virtual char * GetAddress() const
Get the branch address.
virtual void Add(TObject *obj)
virtual TClass * GetClass() const =0
#define R__unlikely(expr)
char * GetObjectAt(UInt_t ind) const
virtual Int_t GetCollectionType() const =0
virtual Int_t GetLenStatic() const
virtual void Reset(Option_t *option="")
Reset a Branch.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void FillLeavesImpl(TBuffer &b)
Unconfiguration Fill Leave function.
virtual Bool_t IsWritable() const
TVirtualCollectionIterators * fWriteIterators
! holds the read (non-staging) iterators when the branch is of fType==4 and associative containers...
Int_t GetNevBufSize() const
void(TBranch::* FillLeaves_t)(TBuffer &b)
Long64_t fReadEntry
! Current entry number when reading
TVirtualCollectionIterators * fIterators
! holds the iterators when the branch is of fType==4.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
TBranch * fMother
! Pointer to top-level parent branch in the tree.
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
TStreamerElement * GetElement(Int_t id) const
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
const TObjArray * GetStreamerInfos() const
void SetSize(UInt_t size)
char * fObject
! Pointer to object at *fAddress
A TTree object has a header with a name and a title.
Int_t fEntryOffsetLen
Initial Length of fEntryOffset table in the basket buffers.
TObject ** GetObjectRef() const
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
Int_t GetMakeClass() const
Bool_t IsFolder() const
Return kTRUE if more than one leaf or browsables, kFALSE otherwise.
#define R__LOCKGUARD_IMT2(mutex)
TObjArray fBranches
-> List of Branches of this branch
TObject * At(Int_t idx) const
virtual const char * GetFullName() const
Return element name including dimensions, if any Note that this function stores the name into a stati...
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=0) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
A TTree is a list of TBranches.
Abstract Interface class describing Streamer information for one class.
Int_t fCompress
Compression level and algorithm.
Long_t GetThisOffset() const
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
TString fFileName
Name of file where buffers are stored ("" if in same file as Tree header)
Base class of the Configurations.
More explicit alias for kMakeClass.
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.
virtual TStreamerElement * GetElement(Int_t id) const =0
TBranch * fParent
! Pointer to parent branch.
TVirtualCollectionPtrIterators * fPtrIterators
! holds the iterators when the branch is of fType==4 and it is a split collection of pointers...
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
TStreamerInfo * fInfo
! Pointer to StreamerInfo
void ReadLeavesMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
Int_t GetStreamerType() const
Int_t GetDefaultEntryOffsetLen() const
Ssiz_t First(char c) const
Find first occurrence of a character c.
virtual void InitializeOffsets()
Initialize the base class subobjects offsets of our sub-branches and set fOffset if we are a containe...
TStreamerInfoActions::TActionSequence * GetWriteMemberWiseActions(Bool_t forCollection)
if(line.BeginsWith("/*"))
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...
virtual UInt_t Size() const =0
virtual TObjArray * GetListOfLeaves()
void ReadLeavesCollectionMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
Need to pushd/pop fOnfileObject.
void ReleaseObject()
Delete any object we may have allocated on a previous call to SetAddress.
void AddToOffset(Int_t delta)
virtual void SetAutoDelete(Bool_t autodel=kTRUE)
Set the automatic delete bit.
char * fAddress
! Address of 1st leaf (variable or object)
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.