56   void RemovePrefix(
TString& str, 
const char* prefix) {
 
   58      if (str.
Length() && prefix && strlen(prefix)) {
 
   59         if (!str.
Index(prefix)) {
 
   60            str.
Remove(0, strlen(prefix));
 
   85   for (
Int_t i = 0; i < nbranches; ++i) {
 
   88         case 31: br->
SetType(41); 
break;
 
  110               return CanSelfReference(inside);
 
  115         const static TClassRef stringClass(
"std::string");
 
  160, fReadActionSequence(0)
 
  161, fFillActionSequence(0)
 
  182, fCheckSum(sinfo->GetCheckSum())
 
  183, fClassVersion(sinfo->
GetClass()->GetClassVersion())
 
  198, fTargetClass(fClassName)
 
  205, fReadActionSequence(0)
 
  206, fFillActionSequence(0)
 
  215   Init(
tree, 0, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
 
  229, fCheckSum(sinfo->GetCheckSum())
 
  230, fClassVersion(sinfo->
GetClass()->GetClassVersion())
 
  245, fTargetClass( fClassName )
 
  252, fReadActionSequence(0)
 
  253, fFillActionSequence(0)
 
  260   Init(parent ? parent->
GetTree() : 0, parent, bname,sinfo,
id,pointer,basketsize,splitlevel,btype);
 
  279   if (
fTree == 0) 
return;
 
  371         if (hasCustomStreamer) {
 
  424      if (splitlevel > 0) {
 
  472            Unroll(
name, clOfElement, clOfElement, pointer, basketsize, splitlevel+splitSTLP, 0);
 
  473            if (strchr(bname, 
'.')) {
 
  506               char **ppointer = (
char**)(pointer);
 
  550            Unroll(
name, clOfClones, clOfClones, pointer, basketsize, splitlevel+splitSTLP, 31);
 
  557            TClass* contCl = elementClass;
 
  605               Unroll(
name, valueClass, valueClass, pointer, basketsize, splitlevel+splitSTLP, 41);
 
  618            TClass* clm = elementClass;
 
  619            Int_t err = 
Unroll(
name, clm, clm, pointer, basketsize, splitlevel+splitSTLP, 0);
 
  661, fClassName(
"TClonesArray")
 
  667, fTargetClass( fClassName )
 
  672, fReadActionSequence(0)
 
  673, fFillActionSequence(0)
 
  678   Init(
tree, 0, bname, clones, basketsize, splitlevel, compress);
 
  688, fClassName(
"TClonesArray")
 
  694, fTargetClass( fClassName )
 
  699, fReadActionSequence(0)
 
  700, fFillActionSequence(0)
 
  705   Init(parent ? parent->
GetTree() : 0, parent, bname, clones, basketsize, splitlevel, compress);
 
  752   if (basketsize < 100) basketsize = 100;
 
  772         Error(
"Init",
"Missing class object of the TClonesArray %s\n",clones->
GetName());
 
  784      std::string branchname = 
name.Data() + std::string(
"_");
 
  786      leaf->
SetName(branchname.c_str());
 
  788      Unroll(
name, clonesClass, clonesClass, 0, basketsize, splitlevel, 31);
 
  815, fClassName(cont->GetCollectionClass()->
GetName())
 
  820, fTargetClass( fClassName )
 
  823, fBranchClass(cont->GetCollectionClass())
 
  825, fReadActionSequence(0)
 
  826, fFillActionSequence(0)
 
  831   Init(
tree, 0, bname, cont, basketsize, splitlevel, compress);
 
  841, fClassName(cont->GetCollectionClass()->
GetName())
 
  846, fTargetClass( fClassName )
 
  849, fBranchClass(cont->GetCollectionClass())
 
  851, fReadActionSequence(0)
 
  852, fFillActionSequence(0)
 
  857   Init(parent ? parent->
GetTree() : 0, parent, bname, cont, basketsize, splitlevel, compress);
 
  911   if (basketsize < 100) {
 
  952      Unroll(
name, valueClass, valueClass, 0, basketsize, splitlevel, 41);
 
 1031   if (nbranches > 0) {
 
 1032      TList persistentBranches;
 
 1035      while((branch=(
TBranch*)iB())) {
 
 1036         if (branch->
IsFolder()) persistentBranches.
Add(branch);
 
 1062               mempos=strMember.
First(
'[');
 
 1066               if (!
m || 
m->IsPersistent()) persistentBranches.
Add(branch);
 
 1067            } 
else persistentBranches.
Add(branch);
 
 1091         pos = mothername.
First(
'[');
 
 1097            if (mothername(len-1) != 
'.') {
 
 1102               TString doublename = mothername;
 
 1104               Int_t isthere = (
name.Index(doublename) == 0);
 
 1106                  name.Prepend(doublename);
 
 1109                     doublename.
Append(mothername);
 
 1110                     isthere = (
name.Index(doublename) == 0);
 
 1113                        name.Prepend(mothername);
 
 1124                  name.Prepend(mothername);
 
 1146   for (
Int_t i = 0; i < nbranches; ++i) {
 
 1150      } 
else if (
fType == 4) {
 
 1153         Error(
"BuildTitle", 
"This cannot happen, fType of parent is not 3 or 4!");
 
 1157      const char* fin = strrchr(bre->
GetTitle(), 
'.');
 
 1190      if ((stype > 40) && (stype < 61)) {
 
 1232         Error(
"Fill", 
"attempt to fill branch %s while addresss is not set", 
GetName());
 
 1255            Error(
"Fill", 
"Failed filling branch:%s, nbytes=%d", 
GetName(), nwrite);
 
 1267            Error(
"Fill", 
"Failed filling branch:%s, nbytes=%d", 
GetName(), nwrite);
 
 1275      for (
Int_t i = 0; i < nbranches; ++i) {
 
 1278            nwrite = branch->
FillImpl(imtHelper);
 
 1280               Error(
"Fill", 
"Failed filling branch:%s.%s, nbytes=%d", 
GetName(), branch->
GetName(), nwrite);
 
 1293         printf(
"Fill: %lld, branch=%s, nbytes=%d\n", entry, 
GetName(), nbytes);
 
 1331   } 
else if (
fType == 31) {
 
 1352         Error(
"FillLeaves", 
"The branch counter address was zero!");
 
 1358         Error(
"FillLeaves", 
"Clonesa: %s, n=%d, sorry not supported yet", 
GetName(), 
n);
 
 1381            for (
Int_t ii = 0; ii < 
n; ++ii) {
 
 1382               b.WriteDouble32(&(xx[ii]),se);
 
 1391            for (
Int_t ii = 0; ii < 
n; ++ii) {
 
 1392               b.WriteFloat16(&(xx[ii]),se);
 
 1474      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1505      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1535      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1566      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1621      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1626   char **end = arr + 
n;
 
 1703      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1747      Error(
"FillLeaves", 
"Cannot get streamer info for branch '%s'", 
GetName());
 
 1762      std::size_t dim = 
name.find_first_of(
"[");
 
 1763      if (dim != std::string::npos) {
 
 1786      if (se && se->
IsBase()) {
 
 1794         std::string longnm_parent;
 
 1798         longnm_parent += 
name;  
 
 1804         for(
Int_t i = 0; i < nbranches; ++i) {
 
 1807            const char *brname = branch->
GetName();
 
 1808            UInt_t brlen = strlen(brname);
 
 1809            if (brname[brlen-1]==
']') {
 
 1810               const char *dim = strchr(brname,
'[');
 
 1812                  brlen = dim - brname;
 
 1815            if (namelen == brlen 
 
 1816                && strncmp(
name,brname,brlen) == 0) {
 
 1819            if (brlen == longnm.length()
 
 1820                && strncmp(longnm.c_str(),brname,brlen) == 0) {
 
 1824            if (brlen == longnm_parent.length()
 
 1825                && strncmp(longnm_parent.c_str(),brname,brlen) == 0) {
 
 1829            if (namelen>brlen && 
name[brlen]==
'.' && strncmp(
name,brname,brlen)==0) {
 
 1840      for(
Int_t i = 0; i < nbranches; ++i) {
 
 1846         if (si && br->
GetID() >= 0) {
 
 1848            if (se && se->
IsBase()) {
 
 1870      if (parent==
this || parent->
GetID()<0 ) 
return 0;
 
 1875      if (! se->
IsBase() ) 
return 0;
 
 1883      std::string longname( grand_parent->
GetName() );
 
 1889      if ( longname == leafname ) {
 
 1930      if (valueClass == subbe->fInfo->
GetClass()) { 
 
 1931         localInfo = subbe->fInfo;
 
 1966      if (targetValueClass && localInfo->
GetClass() != targetValueClass) {
 
 1977   for (
size_t i =0; i < ndata; ++i) {
 
 1992         ename = ename.
Remove(pos);
 
 2000         ids.back().fElement = nextel;
 
 2001         ids.back().fInfo = info;
 
 2007      if (!be && nextel->
IsBase()) {
 
 2012        if (subprefix.Length() && subprefix[subprefix.Length()-1] == 
'.')
 
 2013           subprefix.Remove(subprefix.Length()-1);
 
 2019           TClass *expectedClass = 
nullptr;
 
 2026              for (
Int_t bi = 0; bi < nbranches; ++bi) {
 
 2028                 if (subprefix != branch->
GetName())
 
 2042      if (elementClass && (!be || be->
GetType() == -2)) {
 
 2056            subprefix = ename + 
".";
 
 2058         auto nbranches = search->GetEntriesFast();
 
 2059         bool foundRelatedSplit = 
false;
 
 2060         for (
Int_t bi = 0; bi < nbranches; ++bi) {
 
 2063            if (!foundRelatedSplit)
 
 2064               foundRelatedSplit = matchSubPrefix;
 
 2075         if (!foundRelatedSplit) {
 
 2085         ids.emplace_back(nextinfo, offset + nextel->
GetOffset());
 
 2088            ids.back().fNestedIDs->fOwnOnfileObject = 
kTRUE;
 
 2090         ids.back().fNestedIDs->fOnfileObject = onfileObject;
 
 2091         GatherArtificialElements(branches, ids.back().fNestedIDs->fIDs, subprefix, nextinfo, offset + nextel->
GetOffset());
 
 2092         if (ids.back().fNestedIDs->fIDs.empty())
 
 2126      if ( !targetClass ) {
 
 2127         Error( 
"InitInfo", 
"The target class dictionary is not present!" );
 
 2145               target += 
"@@emulated";
 
 2154         if( targetClass != cl ) {
 
 2171         if( targetClass != cl )
 
 2211         Error(
"InitInfo",
"StreamerInfo is not compiled.");
 
 2251            Int_t firstindex = 0;
 
 2252            Int_t lastindex = nbranches - 1;
 
 2259                  if (!subbranch->
fInfo)
 
 2263                  for(
Int_t i = index - 1; i >= 0; --i) {
 
 2266                     if ( ! subbranch_name.
BeginsWith(thisprefix)) {
 
 2271                     if (!subbranch->
fInfo)
 
 2274                  for(
Int_t i = index; i < nbranches; ++i) {
 
 2277                     if ( ! subbranch_name.
BeginsWith(thisprefix)) {
 
 2289                  for(
Int_t i = 0; i < nbranches; ++i) {
 
 2292                     if ( ! subbranch_name.
BeginsWith(thisprefix)) {
 
 2299            for (
Int_t i = firstindex; i <= lastindex; ++i) {
 
 2302               if (
this != subbranch) {
 
 2304                  if (!subbranch->
fInfo)
 
 2307                  if (subbranch->
fInfo == info)
 
 2309                  else if (subbranch->
fInfo == 
nullptr && subbranch->
fBranchClass == currentClass) {
 
 2325                        Error(
"SetOnfileObject (lambda)", 
"2 distincts fOnfileObject are in the hierarchy of %s for type %s",
 
 2330                        seenExisting = 
kTRUE;
 
 2334                  lastbranch = subbranch;
 
 2339               if (lastbranch != 
this)
 
 2348            size_t pos = 
s.rfind(
'.');
 
 2349            if (pos != std::string::npos) {
 
 2350               s = 
s.substr(pos+1);
 
 2352            while ((pos = 
s.rfind(
'[')) != std::string::npos) {
 
 2353               s = 
s.substr(0, pos);
 
 2360               for (
size_t i = 0; i < ndata; ++i) {
 
 2392               for (
size_t i = 
fID+1+(
fNewIDs.size()); i < ndata; ++i) {
 
 2395                  std::string ename = nextel->
GetName();
 
 2396                  if (ename[0] == 
'*')
 
 2397                     ename = ename.substr(1);
 
 2399                  while ((pos = ename.rfind(
'[')) != std::string::npos) {
 
 2400                    ename = ename.substr(0, pos);
 
 2432                  fNewIDs.back().fElement = nextel;
 
 2439               for (
size_t i = 0; i < ndata; ++i) {
 
 2454               SetOnfileObject(
fInfo);
 
 2469               auto start = prefix.
Length();
 
 2470               if (prefix[start - 1] == 
'.')
 
 2473               auto cutoff = view.find_last_of(
'.');
 
 2474               if (cutoff != std::string::npos) {
 
 2475                  prefix.
Remove(cutoff + 1);
 
 2478            if (prefix[prefix.
Length()-1] != 
'.') {
 
 2491               SetOnfileObject(localInfo);
 
 2522      const char* className = 0;
 
 2567            Fatal(
"GetCollectionProxy",
 
 2568                  "Can not create a Collection Proxy of any kind for the class \"%s\" needed by the branch \"%s\" of the TTree \"%s\"!",
 
 2572                              "Fixing the collection proxy of the class \"%s\" \n" 
 2573                              "\tneeded by the branch \"%s\" of the TTree \"%s\" to be similar to \"%s\".",
 
 2579   } 
else if (
fType == 41) {
 
 2622         if (newInfo != brInfo) {
 
 2631         if (newType.
Length()==0) {
 
 2714            for (
Int_t i = 0; i < nbranches; ++i) {
 
 2739            char **end = arr + 
fNdata;
 
 2742         } 
else if (
fType == 4) {
 
 2781         Info(
"GetEntry", 
"%lld, branch=%s, nbytes=%d", entry, 
GetName(), nbytes);
 
 2799   if ((
type == -1) || (
fID == -1)) {
 
 2808         if (!expectedClass) {
 
 2818         Error(
"GetExpectedType", 
"Did not find the type for %s",
GetName());
 
 2831   if (!mother || mother==
this || mother->
GetType() == 3 || mother->
GetType() == 4) {
 
 2836   if (motherName.
Length() && (motherName[motherName.
Length()-1] == 
'.')) {
 
 2839   return motherName + 
"." + 
fName;
 
 2848      return "TBranchElement-folder";
 
 2850      return "TBranchElement-leaf";
 
 2911   const char *types[20] = {
 
 2934   return types[itype];
 
 2943template <
typename T>
 
 2994      } 
else if (
fType <= 2) {
 
 3019   } 
else if (
fType == 41) {
 
 3072      } 
else if (
fType == 4) {    
 
 3075      } 
else if (
fType == 31) {    
 
 3080      } 
else if (
fType == 41) {    
 
 3085      } 
else if (
fType <= 2) {     
 
 3100   } 
else if (
fType == 41) {
 
 3102   } 
else if (prID < 0) {
 
 3107      char **val = (
char**)(
object+
GetInfoImp()->TStreamerInfo::GetElementOffset(prID));
 
 3162         Warning(
"InitializeOffsets", 
"No branch class set for branch: %s", 
GetName());
 
 3179      Int_t localOffset = 0;
 
 3192            Warning(
"InitializeOffsets", 
"Streamer info for branch: %s has no elements array!", 
GetName());
 
 3199            Warning(
"InitializeOffsets", 
"Cannot get streamer element for branch: %s!", 
GetName());
 
 3220         Error(
"InitializeOffsets", 
"Could not find class for branch: %s", 
GetName());
 
 3234         stlParentName = br->
GetName();
 
 3243      for (
Int_t subBranchIdx = 0; subBranchIdx < nbranches; ++subBranchIdx) {
 
 3244         bool alternateElement = 
false;
 
 3248         if (subBranch == 0) {
 
 3262            Warning(
"InitializeOffsets", 
"No streamer info for branch: %s subbranch: %s", 
GetName(), subBranch->
GetName());
 
 3267            Warning(
"InitializeOffsets", 
"No elements array for branch: %s subbranch: %s", 
GetName(), subBranch->
GetName());
 
 3273         if (!subBranchElement) {
 
 3274            Warning(
"InitializeOffsets", 
"No streamer element for branch: %s subbranch: %s", 
GetName(), subBranch->
GetName());
 
 3288               typedef TStreamerInfoActions::ActionContainer_t::iterator iterator;
 
 3291                   iter != end; ++iter) {
 
 3296                     subBranchElement = 
e;
 
 3297                     alternateElement = 
true;
 
 3304         localOffset = subBranchElement->
GetOffset();
 
 3312                && CanSelfReference(subBranchElement->
GetClass()))
 
 3328            Warning(
"InitializeOffsets", 
"Branch '%s' has no mother!", 
GetName());
 
 3334         if (motherName.
Length() && strchr(motherName.
Data(), 
'.')) {
 
 3338         if (motherName.
Length() && (motherName[motherName.
Length()-1] == 
'.')) {
 
 3339            motherDotAtEnd = 
kTRUE;
 
 3343         if ((subBranch->
fType == 1) || (subBranchElement && subBranchElement->
IsBase())) {
 
 3351            isBaseSubBranch = 
kTRUE;
 
 3355         if ((subBranch->
fType == 31) || (subBranch->
fType == 41)) {
 
 3357            isContDataMember = 
kTRUE;
 
 3382         if (motherDotAtEnd) {
 
 3386            if (!stlParentNameUpdated && stlParentName.
Length()) {
 
 3388               stlParentNameUpdated = 
kTRUE;
 
 3390         } 
else if (motherDot) {
 
 3407                  if (!stlParentNameUpdated && stlParentName.
Length()) {
 
 3415                  if (!stlParentNameUpdated && stlParentName.
Length()) {
 
 3421         stlParentNameUpdated = 
kTRUE;
 
 3422         if (isBaseSubBranch) {
 
 3436               if (dataName[0] == 
'.') {
 
 3446         if (motherDotAtEnd) {
 
 3449         } 
else if (motherDot) {
 
 3499            RemovePrefix(dataName, parentName);
 
 3504            if (dataName[0] == 
'.') {
 
 3511            if (dataName[dataName.
Length()-1] == 
'.') {
 
 3553                        target += 
"@@emulated";
 
 3571                     Warning(
"InitializeOffsets", 
"subBranch: '%s' has no parent class, and cannot get class for clones class: '%s'!", subBranch->
GetName(), 
GetClonesName());
 
 3575                  Warning(
"InitializeOffsets", 
"subBranch: '%s' has no parent class!  Assuming parent class is: '%s'.", subBranch->
GetName(), pClass->
GetName());
 
 3579                  Warning(
"InitializeOffsets", 
"subBranch: '%s' has no parent class!  Assuming parent class is: '%s'.", subBranch->
GetName(), pClass ? pClass->
GetName() : 
"unknowned class");
 
 3584                  pClass = branchClass;
 
 3589            if (renamed && pClass) {
 
 3590               if (pClass == branchClass) {
 
 3605               if( !strncmp( stlParentName.
Data(), dataName.
Data(), stlParentName.
Length()-1 )
 
 3606                  && dataName[ stlParentName.
Length() ] == 
'.' )
 
 3614            if (alternateElement) {
 
 3617               if (dotpos != 
kNPOS) ++dotpos; 
else dotpos = 0;
 
 3639                     Error(
"InitializeOffsets",
 
 3640                           "Could not find the real data member '%s' when constructing the branch '%s' [Likely missing ShowMember].",
 
 3645                     Info(
"InitializeOffsets",
 
 3646                           "TTree created with an older schema, some data might not be copied in 'slow-cloning' mode; fast-cloning should have the correct result. '%s' is missing when constructing the branch '%s'. ",
 
 3650                     Fatal(
"InitializeOffsets",
 
 3651                           "Could not find the real data member '%s' when constructing the branch '%s' [Likely an internal error, please report to the developers].",
 
 3659            if (isBaseSubBranch) {
 
 3662               Warning(
"InitializeOffsets", 
"Could not find the data member name for branch '%s' with parent branch '%s', assuming offset is zero!", subBranch->
GetName(), 
GetName());
 
 3670         if (isContDataMember) {
 
 3684               if (isBaseSubBranch) {
 
 3691                  subBranch->
SetOffset(offset - localOffset);
 
 3701            } 
else if (isSplit) {
 
 3702               if (isBaseSubBranch) {
 
 3713               if (isBaseSubBranch) {
 
 3753   if (nbranches >= 1) {
 
 3757   return browsables && browsables->
GetSize();
 
 3772   if (basket && 
fTree) {
 
 3785         bufbegin = entryOffset[entry-
first];
 
 3788            bufnext = entryOffset[entry+1-
first];
 
 3792         if (bufnext == bufbegin) {
 
 3810   for(
auto &cursor : ids) {
 
 3811      auto id = cursor.fElemID;
 
 3817            Error(
"TBranchElement::Print", 
"Element for id #%d not found in StreamerInfo for %s",
 
 3821      } 
else if (cursor.fNestedIDs) {
 
 3822         Printf(
"      Within subobject of type %s offset = %d", cursor.fNestedIDs->fInfo->GetName(), cursor.fNestedIDs->fOffset);
 
 3823         PrintElements(cursor.fNestedIDs->fInfo, cursor.fNestedIDs->fIDs);
 
 3831   if (strncmp(option,
"debugAddress",strlen(
"debugAddress"))==0) {
 
 3832      if (strlen(option)==strlen(
"debugAddress")) {
 
 3833         Printf(
"%-24s %-16s %2s %4s %-16s %-16s %8s %8s %s %s\n",
 
 3834                "Branch Name", 
"Streamer Class", 
"ID", 
"Type", 
"Class", 
"Parent", 
"pOffset", 
"fOffset", 
"fObject", 
"fOnfileObject");
 
 3843      Printf(
"%-16s %2d %4d %-16s %-16s %8x %8x %p %p%s\n",
 
 3848      for (
Int_t i = 0; i < nbranches; ++i) {
 
 3850         subbranch->
Print(
"debugAddressSub");
 
 3854   if (strncmp(option,
"debugInfo",strlen(
"debugInfo"))==0)  {
 
 3866         Printf(
"   With elements:");
 
 3870         Printf(
"   with read actions:");
 
 3872         Printf(
"   with write actions:");
 
 3881         Printf(
"   with read actions:");
 
 3883         Printf(
"   with write actions:");
 
 3886      TString suboption = 
"debugInfoSub";
 
 3887      suboption += (option+strlen(
"debugInfo"));
 
 3888      for (
Int_t i = 0; i < nbranches; ++i) {
 
 3890         subbranch->
Print(suboption);
 
 3903         Printf(
"*............................................................................*");
 
 3908      for (
Int_t i=0;i<nbranches;i++) {
 
 3910         branch->
Print(option);
 
 3967      } 
else if (
fType <= 2) {
 
 3984   } 
else if (
fType == 3) {
 
 3986   } 
else if (
fType == 31) {
 
 3991   } 
else if (
fType == 41) {
 
 4008   Fatal(
"ReadLeaves",
"The ReadLeaves function has not been configured for %s",
GetName());
 
 4026            b.SetBufferOffset(
b.Length() - 
sizeof(
n));
 
 4028            Error(
"ReadLeaves", 
"Incorrect size read for the container in %s\nThe size read is %d when the maximum is %d\nThe size is reset to 0 for this entry (%lld)", 
GetName(), 
n[0], 
fMaximum, 
GetReadEntry());
 
 4040               for (
Int_t i=0; i<nbranches; i++) {
 
 4057      if (atype > 54) 
return;
 
 4066         if (!len_where) 
return;
 
 4071         for( k=0; k<
n; k++) {
 
 4072            char **where = &(((
char**)
fAddress)[k]);
 
 4076               case  1:  {length = ((
Char_t*)   len_where)[k]; 
break;}
 
 4077               case  2:  {length = ((
Short_t*)  len_where)[k]; 
break;}
 
 4078               case  3:  {length = ((
Int_t*)    len_where)[k]; 
break;}
 
 4079               case  4:  {length = ((
Long_t*)   len_where)[k]; 
break;}
 
 4081               case  6:  {length = ((
Int_t*)    len_where)[k]; 
break;}
 
 4083               case 11:  {length = ((
UChar_t*)  len_where)[k]; 
break;}
 
 4084               case 12:  {length = ((
UShort_t*) len_where)[k]; 
break;}
 
 4085               case 13:  {length = ((
UInt_t*)   len_where)[k]; 
break;}
 
 4086               case 14:  {length = ((
ULong_t*)  len_where)[k]; 
break;}
 
 4087               case 15:  {length = ((
UInt_t*)   len_where)[k]; 
break;}
 
 4088               case 16:  {length = ((
Long64_t*) len_where)[k]; 
break;}
 
 4089               case 17:  {length = ((
ULong64_t*)len_where)[k]; 
break;}
 
 4090               case 18:  {length = ((
Bool_t*)   len_where)[k]; 
break;}
 
 4094            if (length <= 0)  
continue;
 
 4095            if (isArray == 0) 
continue;
 
 4097               case  1:  {*where=
new char[
sizeof(
Char_t)*length]; 
b.ReadFastArray((
Char_t*) *where, length); 
break;}
 
 4098               case  2:  {*where=
new char[
sizeof(
Short_t)*length]; 
b.ReadFastArray((
Short_t*) *where, length); 
break;}
 
 4099               case  3:  {*where=
new char[
sizeof(
Int_t)*length]; 
b.ReadFastArray((
Int_t*)   *where, length); 
break;}
 
 4100               case  4:  {*where=
new char[
sizeof(
Long_t)*length]; 
b.ReadFastArray((
Long_t*)  *where, length); 
break;}
 
 4101               case  5:  {*where=
new char[
sizeof(
Float_t)*length]; 
b.ReadFastArray((
Float_t*) *where, length); 
break;}
 
 4102               case  6:  {*where=
new char[
sizeof(
Int_t)*length]; 
b.ReadFastArray((
Int_t*)   *where, length); 
break;}
 
 4103               case  8:  {*where=
new char[
sizeof(
Double_t)*length]; 
b.ReadFastArray((
Double_t*)*where, length); 
break;}
 
 4104               case 11:  {*where=
new char[
sizeof(
UChar_t)*length]; 
b.ReadFastArray((
UChar_t*) *where, length); 
break;}
 
 4105               case 12:  {*where=
new char[
sizeof(
UShort_t)*length]; 
b.ReadFastArray((
UShort_t*)*where, length); 
break;}
 
 4106               case 13:  {*where=
new char[
sizeof(
UInt_t)*length]; 
b.ReadFastArray((
UInt_t*)  *where, length); 
break;}
 
 4107               case 14:  {*where=
new char[
sizeof(
ULong_t)*length]; 
b.ReadFastArray((
ULong_t*) *where, length); 
break;}
 
 4108               case 15:  {*where=
new char[
sizeof(
UInt_t)*length]; 
b.ReadFastArray((
UInt_t*)  *where, length); 
break;}
 
 4109               case 16:  {*where=
new char[
sizeof(
Long64_t)*length]; 
b.ReadFastArray((
Long64_t*)  *where, length); 
break;}
 
 4110               case 17:  {*where=
new char[
sizeof(
ULong64_t)*length]; 
b.ReadFastArray((
ULong64_t*)*where, length); 
break;}
 
 4111               case 18:  {*where=
new char[
sizeof(
Bool_t)*length]; 
b.ReadFastArray((
Bool_t*) *where, length); 
break;}
 
 4141            for (
Int_t ii=0;ii<
n;ii++) {
 
 4142               b.ReadDouble32(&(xx[ii]),se);
 
 4150            for (
Int_t ii=0;ii<
n;ii++) {
 
 4151               b.ReadFloat16(&(xx[ii]),se);
 
 4157   } 
else if (
fType <= 2) {     
 
 4177            loc = counter.
Last(
']');
 
 4181            countname += counter;
 
 4187            Warning(
"ReadLeaves",
"Missing fBranchCount for %s.  Data will not be read correctly by the MakeClass mode.",
GetName());
 
 4213               for (
Int_t ii=0;ii<
n;ii++) {
 
 4214                  b.ReadDouble32(&(xx[ii]),se);
 
 4222               for (
Int_t ii=0;ii<
n;ii++) {
 
 4223                  b.ReadFloat16(&(xx[ii]),se);
 
 4275         b.SetBufferOffset(
b.Length()-
sizeof(
n));
 
 4277         Error(
"ReadLeaves", 
"Incorrect size read for the container in %s\n\tThe size read is %d while the maximum is %d\n\tThe size is reset to 0 for this entry (%lld)", 
GetName(), 
n, 
fMaximum, 
GetReadEntry());
 
 4311         for (
Int_t i = 0; i < nbranches; ++i) {
 
 4339      if( !
fNdata || *(
void**)proxy->
At( 0 ) != 0 )
 
 4344         void **el = (
void**)proxy->
At( i );
 
 4346         *el = elClass->
New();
 
 4350   proxy->
Commit(alternate);
 
 4376   if (info == 0) 
return;
 
 4408   if (info == 0) 
return;
 
 4439   if (info == 0) 
return;
 
 4470         b.SetBufferOffset(
b.Length()-
sizeof(
n));
 
 4472         Error(
"ReadLeaves", 
"Incorrect size read for the container in %s\n\tThe size read is %d while the maximum is %d\n\tThe size is reset to 0 for this entry (%lld)", 
GetName(), 
n, 
fMaximum, 
GetReadEntry());
 
 4511   if (info==0) 
return;
 
 4519   char **end = arr + 
fNdata;
 
 4658   Fatal(
"FillLeaves",
"The FillLeaves function has not been configured for %s",
GetName());
 
 4681      } 
else if (
fType == 4) {
 
 4686            Warning(
"ReleaseObject", 
"Cannot delete allocated STL container because I do not have a proxy!  branch: %s", 
GetName());
 
 4690            if (needDelete && 
fID >= 0) {
 
 4697               proxy->
Clear(
"force");
 
 4722                     proxy->
Clear(
"force");
 
 4726                  proxy->
Clear(
"force");
 
 4747   for (
Int_t i = 0; i < nbranches; ++i) {
 
 4749      branch->
Reset(option);
 
 4762   for (
Int_t i = 0; i < nbranches; ++i) {
 
 4784   for (
Int_t i = 0; i < nbranches; ++i)  {
 
 4810   for (
Int_t i = 0; i < nb; ++i)  {
 
 4836      for (
Int_t i = 0; i < nbranches; ++i) {
 
 4984   if (
Long_t(addr) == -1) {
 
 5078            if (clm == content) {
 
 5084            Warning(
"SetAddress", 
"The type of the %s was changed from TClonesArray to %s but we do not have a TVirtualCollectionProxy for that container type!", 
GetName(), newType->
GetName());
 
 5111   } 
else if (
fType == 4) {
 
 5123            for (
Int_t i = 0; i < nbranches; ++i) {
 
 5156               for (
Int_t i = 0; i < nbranches; ++i) {
 
 5184               Error(
"SetAddress",
"For %s, we can not convert %s into %s\n",
 
 5319            Error(
"SetAddress", 
"Embedded TClonesArray given a zero address for branch '%s'", 
GetName());
 
 5335               Error(
"SetAddress", 
"Embedded pointer to a TClonesArray given a zero address for branch '%s'", 
GetName());
 
 5339   } 
else if (
fType == 4) {
 
 5366                     Error(
"SetAddress", 
"Failed to allocate STL container for branch '%s'", 
GetName());
 
 5384                     Error(
"SetAddress", 
"Failed to allocate STL container for branch '%s'", 
GetName());
 
 5404            Error(
"SetAddress", 
"Embedded STL container given a zero address for branch '%s'", 
GetName());
 
 5417                  Error(
"SetAddress", 
"Failed to allocate STL container for branch '%s'", 
GetName());
 
 5426               Error(
"SetAddress", 
"Embedded pointer to an STL container given a zero address for branch '%s'", 
GetName());
 
 5430   } 
else if (
fType == 41) {
 
 5436   } 
else if (
fID < 0) {
 
 5456            Error(
"SetAddress", 
"I have no TClass for branch %s, so I cannot allocate an I/O buffer!", 
GetName());
 
 5483   for (
Int_t i = 0; i < nbranches; ++i) {
 
 5507   for (
Int_t i = 0; i < nbranches; ++i) {
 
 5523   if (leafOfCounter && leaf) {
 
 5526      if (!leafOfCounter) {
 
 5527         Warning(
"SetBranchCount", 
"Counter branch %s for branch %s has no leaves!", brOfCounter->
GetName(), 
GetName());
 
 5530         Warning(
"SetBranchCount", 
"Branch %s has no leaves!", 
GetName());
 
 5549   for (
Int_t i = 0; i < nbranches; ++i) {
 
 5624   if (actionSequence) 
delete actionSequence;
 
 5658   TClass *originalClass = 
nullptr;
 
 5677   } 
else if (
fType == 31) {
 
 5702   } 
else if (
fType == 4) {
 
 5704   } 
else if (
fType == 41) {
 
 5714   } 
else if (
fType == 3) {
 
 5716   } 
else if (
fType == 31) {
 
 5718   } 
else if (
fType < 0) {
 
 5720   } 
else if (
fType == 0 && 
fID == -1) {
 
 5723      if (hasCustomStreamer) {
 
 5731   } 
else if (
fType <= 2) {
 
 5758   TClass *originalClass = 
nullptr;
 
 5777   } 
else if (
fType == 31) {
 
 5802   } 
else if (
fType == 4) {
 
 5804   } 
else if (
fType == 41) {
 
 5816   } 
else if (
fType == 3) {
 
 5818   } 
else if (
fType == 31) {
 
 5820   } 
else if (
fType < 0) {
 
 5822   } 
else if (
fType <=2) {
 
 5844   if (
name == 0) 
return;
 
 5854      for (
Int_t i = 0; i < nbranches; ++i) {
 
 5951void TBranchElement::Streamer(
TBuffer& R__b)
 
 6016      else if (
fType == 4) {
 
 6047      const char* motherFileName = treeFileName;
 
 6048      if (mother && (mother != 
this)) {
 
 6074   char* dot = (
char*) strchr(
name, 
'.');
 
 6077   if (nch && (
name[nch-1] == 
'.')) {
 
 6096      char* pointer = (
char*) (objptr + element->
GetOffset());
 
 6233   for (
Int_t elemID = 0; elemID < ndata; ++elemID) {
 
 6255         if ((btype == 31) || (btype == 41)) {
 
 6267               unroll = 
Unroll(
name, clParent, clOfBase, ptr + offset, basketsize, splitlevel+splitSTLP, btype);
 
 6326               Int_t subSplitlevel = splitlevel-1;
 
 6327               if (btype == 31 || btype == 41 || elem->
CannotSplit()) {
 
 6342               Int_t unroll = 
Unroll(branchname, clParent, elemClass, ptr + offset, basketsize, splitlevel-1+splitSTLP, btype);
 
 6354                 splitSTLP && 
fType != 4 )
 
 6359                                                basketsize, splitlevel - 1+splitSTLP, sinfo, elemID );
 
 6367            Int_t subSplitlevel = splitlevel - 1;
 
 6368            if ((btype == 31) || (btype == 41) || elem->
CannotSplit()) {
 
 6372            TBranchElement* branch = 
new TBranchElement(
this, branchname, sinfo, elemID, ptr + offset, basketsize, subSplitlevel+splitSTLP, btype);
 
#define R__unlikely(expr)
unsigned long long ULong64_t
static void PrintElements(const TStreamerInfo *info, const TStreamerInfoActions::TIDs &ids)
Print branch parameters.
static void R__CleanName(std::string &name)
Remove trailing dimensions and make sure there is a trailing dot.
void Error(const char *location, const char *msgfmt,...)
R__EXTERN TVirtualMutex * gInterpreterMutex
R__EXTERN TVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
#define R__LOCKGUARD_IMT(mutex)
#define R__LOCKGUARD(mutex)
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
TIOFeatures provides the end-user with the ability to change the IO behavior of data written via a TT...
Manages buffers for branches of a Tree.
Int_t GetNevBufSize() const
A Branch for the case of an object.
void ReadLeavesClonesMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
Bool_t fInit
! Initialization flag for branch assignment
virtual void ResetAddress()
Set branch address to zero and free all allocated memory.
void SetActionSequence(TClass *originalClass, TStreamerInfo *localInfo, TStreamerInfoActions::TActionSequence::SequenceGetter_t create, TStreamerInfoActions::TActionSequence *&actionSequence)
Set the sequence of actions needed to read the data out of the buffer.
char * fObject
! Pointer to object at *fAddress
TStreamerInfo * fInfo
! Pointer to StreamerInfo
Int_t fSTLtype
! STL container type
void ReadLeavesCustomStreamer(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetParentClass(TClass *clparent)
TBranchElement * fBranchCount2
pointer to secondary branchcount branch
Int_t fNdata
! Number of data in this branch
const char * GetIconName() const
Return icon name depending on type of branch element.
void FillLeavesCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
TString fClassName
Class name of referenced object.
virtual void Print(Option_t *option="") const
Print TBranch parameters.
TStreamerInfoActions::TActionSequence * fFillActionSequence
! Set of actions to be executed to write the data to the basket.
Bool_t fInInitInfo
! True during the 2nd part of InitInfo (cut recursion).
TStreamerInfo * GetInfo() const
Get streamer info for the branch class.
void ReadLeavesCollection(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill the basket buffer.
virtual void SetType(Int_t btype)
void FillLeavesMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void SetBranchCount(TBranchElement *bre)
Set the branch counter for this branch.
virtual char * GetAddress() const
Get the branch address.
static void SwitchContainer(TObjArray *)
Modify the container type of the branches.
void SetReadActionSequence()
Set the sequence of actions needed to read the data out of the buffer.
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any.
virtual Int_t GetExpectedType(TClass *&clptr, EDataType &type)
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
TVirtualCollectionProxy * GetCollectionProxy()
Return the collection proxy describing the branch content, if any.
@ kOwnOnfileObj
We are the owner of fOnfileObject.
@ kAddressSet
The addressing set have been called for this branch.
@ kDecomposedObj
More explicit alias for kMakeClass.
@ kDeleteObject
We are the owner of fObject.
@ kCache
Need to pushd/pop fOnfileObject.
void SetupAddressesImpl()
If the branch address is not set, we set all addresses starting with the top level parent branch.
TClassRef fParentClass
! Reference to class definition in fParentName
void BuildTitle(const char *name)
Set branch and leaf name and title in the case of a container sub-branch.
virtual Int_t GetMaximum() const
Return maximum count value of the branchcount if any.
TString fParentName
Name of parent class.
void ReadLeavesCollectionSplitPtrMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
Double_t GetValue(Int_t i, Int_t len, Bool_t subarr=kFALSE) const
TClassRef fBranchClass
! Reference to class definition in fClassName
TStreamerInfoActions::TIDs fNewIDs
! Nested List of the serial number of all the StreamerInfo to be used.
Int_t GetStreamerType() const
TClass * GetCurrentClass()
Return a pointer to the current type of the data member corresponding to branch element.
UInt_t fCheckSum
CheckSum of class.
TStreamerInfoActions::TActionSequence * fReadActionSequence
! Set of actions to be executed to extract the data from the basket.
void FillLeavesClones(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
virtual void SetAddress(void *addobj)
Point this branch at an object.
virtual TLeaf * FindLeaf(const char *name)
Find the leaf corresponding to the name 'searchname'.
void ReadLeavesMemberBranchCount(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetReadLeavesPtr()
Set the ReadLeaves pointer to execute the expected operations.
Int_t Unroll(const char *name, TClass *cltop, TClass *cl, char *ptr, Int_t basketsize, Int_t splitlevel, Int_t btype)
Split class cl into sub-branches of this branch.
void FillLeavesMakeClass(TBuffer &b)
Write leaves into i/o buffers for this branch.
void FillLeavesCollectionSplitVectorPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void FillLeavesCollection(TBuffer &b)
Write leaves into i/o buffers for this branch.
Int_t fID
element serial number in fInfo
Bool_t IsMissingCollection() const
Detect a collection written using a zero pointer in old versions of root.
void FillLeavesMemberCounter(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void Browse(TBrowser *b)
Browse the branch content.
void SetAddressImpl(void *addr, Bool_t implied)
See TBranchElement::SetAddress.
void SetBranchCount2(TBranchElement *bre)
void FillLeavesCollectionSplitPtrMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of a BranchElement and return total number of bytes.
TStreamerInfo * GetInfoImp() const
Get streamer info for the branch class.
virtual void SetTargetClass(const char *name)
Set the name of the class of the in-memory object into which the data will loaded.
virtual void ResetDeleteObject()
Release ownership of any allocated objects.
virtual const char * GetParentName() const
void ValidateAddress() const
TVirtualArray * GetOnfileObject() const
TVirtualCollectionIterators * fWriteIterators
! holds the read (non-staging) iterators when the branch is of fType==4 and associative containers.
void PrintValue(Int_t i) const
Prints values of leaves.
TVirtualArray * fOnfileObject
! Place holder for the onfile representation of data members.
virtual const char * GetTypeName() const
Return type name of element in the branch.
void FillLeavesAssociativeCollectionMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
void Init(TTree *tree, TBranch *parent, const char *name, TStreamerInfo *sinfo, Int_t id, char *pointer, Int_t basketsize=32000, Int_t splitlevel=0, Int_t btype=0)
Init when the branch object is not a TClonesArray nor an STL container.
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
TClassRef fClonesClass
! Reference to class definition in fClonesName
virtual void * GetValuePointer() const
Returns pointer to first data element of this branch.
void ReadLeavesImpl(TBuffer &b)
Unconfiguration Read Leave function.
void SetupInfo()
Set the value of fInfo.
void FillLeavesImpl(TBuffer &b)
Unconfiguration Fill Leave function.
void FillLeavesClonesMember(TBuffer &b)
Write leaves into i/o buffers for this branch.
TClassRef fCurrentClass
! Reference to current (transient) class definition
char * GetObject() const
Return a pointer to our object.
TStreamerInfo * FindOnfileInfo(TClass *valueClass, const TObjArray &branches) const
void ReadLeavesClones(TBuffer &b)
Read leaves into i/o buffers for this branch.
Bool_t IsFolder() const
Return kTRUE if more than one leaf, kFALSE otherwise.
virtual TString GetFullName() const
Return the 'full' name of the branch.
Bool_t GetMakeClass() const
Return whether this branch is in a mode where the object are decomposed or not (Also known as MakeCla...
Int_t * fBranchOffset
! Sub-Branch offsets with respect to current transient class
virtual void ResetInitInfo(bool recurse)
Reset offset and StremerInfo information from this branch.
friend class TLeafElement
void ReadLeavesMakeClass(TBuffer &b)
Read leaves into i/o buffers for this branch.
TBranchElement()
Default and I/O constructor.
void FillLeavesCustomStreamer(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual const char * GetClonesName() const
virtual TClass * GetClass() const
Int_t fMaximum
Maximum entries for a TClonesArray or variable array.
T GetTypedValue(Int_t i, Int_t len, Bool_t subarr=kFALSE) const
void ReadLeavesMemberCounter(TBuffer &b)
Read leaves into i/o buffers for this branch.
Int_t fBranchID
! ID number assigned by a TRefTable.
TVirtualCollectionIterators * fIterators
! holds the iterators when the branch is of fType==4.
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
void ReleaseObject()
Delete any object we may have allocated on a previous call to SetAddress.
TClassRef fTargetClass
! Reference to the target in-memory class
void FillLeavesMemberBranchCount(TBuffer &b)
Write leaves into i/o buffers for this branch.
virtual void SetMissing()
Set offset of the object (to which the data member represented by this branch belongs) inside its con...
virtual Bool_t SetMakeClass(Bool_t decomposeObj=kTRUE)
Set the branch in a mode where the object are decomposed (Also known as MakeClass mode).
virtual void SetBasketSize(Int_t buffsize)
Reset the basket size for all sub-branches of this branch element.
TString fClonesName
Name of class in TClonesArray (if any)
TBranchElement * fBranchCount
pointer to primary branchcount branch
void ReadLeavesMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch after a Merge operation (drop data but keep customizations)
virtual ~TBranchElement()
Destructor.
Bool_t fInitOffsets
! Initialization flag to not endlessly recalculate offsets
Version_t fClassVersion
Version number of class.
TVirtualCollectionPtrIterators * fPtrIterators
! holds the iterators when the branch is of fType==4 and it is a split collection of pointers.
virtual void InitInfo()
Init the streamer info for the branch class, try to compensate for class code unload/reload and schem...
virtual void InitializeOffsets()
Initialize the base class subobjects offsets of our sub-branches and set fOffset if we are a containe...
virtual void SetupAddresses()
If the branch address is not set, we set all addresses starting with the top level parent branch.
TClass * GetParentClass()
Return a pointer to the parent class of the branch element.
TVirtualCollectionProxy * fCollProxy
! collection interface (if any)
void SetFillActionSequence()
Set the sequence of actions needed to write the data out from the buffer.
virtual void SetOffset(Int_t offset)
Set offset of the object (to which the data member represented by this branch belongs) inside its con...
virtual void Reset(Option_t *option="")
Reset a Branch.
Int_t fStreamerType
branch streamer type
void ReadLeavesCollectionSplitVectorPtrMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
void SetFillLeavesPtr()
Set the FillLeaves pointer to execute the expected operations.
void ReadLeavesCollectionMember(TBuffer &b)
Read leaves into i/o buffers for this branch.
A branch containing and managing a TRefTable for TRef autoloading.
virtual void SetRequestedEntry(Long64_t entry)
virtual Int_t SetParent(const TObject *obj, Int_t branchID)
Set the current parent branch.
A Branch handling STL collection of pointers (vectors, lists, queues, sets and multisets) while stori...
virtual void SetAddress(void *addr)
Set Address.
A TTree is a list of TBranches.
virtual void ResetAddress()
Reset the address of the branch.
virtual void SetAutoDelete(Bool_t autodel=kTRUE)
Set the automatic delete bit.
TString fFileName
Name of file where buffers are stored ("" if in same file as Tree header)
Int_t fEntryOffsetLen
Initial Length of fEntryOffset table in the basket buffers.
Int_t fMaxBaskets
Maximum number of Baskets so far.
FillLeaves_t fFillLeaves
! Pointer to the FillLeaves implementation to use.
void(TBranch::* ReadLeaves_t)(TBuffer &b)
TObjArray fLeaves
-> List of leaves of this branch
char * fAddress
! Address of 1st leaf (variable or object)
TObjArray * GetListOfBranches()
virtual TList * GetBrowsables()
Returns (and, if 0, creates) browsable objects for this branch See TVirtualBranchBrowsable::FillListO...
Int_t fOffset
Offset of this branch.
Long64_t * fBasketEntry
[fMaxBaskets] Table of first entry in each basket
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
const char * GetFileName() const
TIOFeatures GetIOFeatures() const
Returns the IO settings currently in use for this branch.
Long64_t fReadEntry
! Current entry number when reading
virtual void SetAddressImpl(void *addr, Bool_t)
TBranch * GetSubBranch(const TBranch *br) const
Find the parent branch of child.
ReadLeaves_t fReadLeaves
! Pointer to the ReadLeaves implementation to use.
void(TBranch::* FillLeaves_t)(TBuffer &b)
Bool_t IsFolder() const
Return kTRUE if more than one leaf or browsables, kFALSE otherwise.
Bool_t IsAutoDelete() const
Return kTRUE if an existing object in a TBranchObject must be deleted.
virtual TLeaf * FindLeaf(const char *name)
Find the leaf corresponding to the name 'searchname'.
Long64_t GetReadEntry() const
Long64_t GetEntries() const
Int_t fNleaves
! Number of leaves
Int_t fSplitLevel
Branch split level.
virtual void UpdateFile()
Refresh the value of fDirectory (i.e.
Int_t * fBasketBytes
[fMaxBaskets] Length of baskets on file
virtual void Print(Option_t *option="") const
Print TBranch parameters.
TObjArray fBranches
-> List of Branches of this branch
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch.
virtual TBranch * FindBranch(const char *name)
Find the immediate sub-branch with passed name.
TDirectory * fDirectory
! Pointer to directory where this branch buffers are stored
TObjArray fBaskets
-> List of baskets of this branch
void SetIOFeatures(TIOFeatures &features)
TBranch * fMother
! Pointer to top-level parent branch in the tree.
virtual Bool_t SetMakeClass(Bool_t decomposeObj=kTRUE)
Set the branch in a mode where the object are decomposed (Also known as MakeClass mode).
TBranch * fParent
! Pointer to parent branch.
virtual void SetBasketSize(Int_t buffsize)
Set the basket size The function makes sure that the basket size is greater than fEntryOffsetlen.
Int_t fWriteBasket
Last basket number written.
Long64_t * fBasketSeek
[fMaxBaskets] Addresses of baskets on file
TObjArray * GetListOfLeaves()
Int_t fReadBasket
! Current basket number when reading
Int_t fBasketSize
Initial Size of Basket Buffer.
virtual void Reset(Option_t *option="")
Reset a Branch.
Long64_t fEntryNumber
Current entry number (last one filled in this branch)
TBranch * GetMother() const
Get our top-level parent branch in the tree.
Int_t fCompress
Compression level and algorithm.
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill Basket buffer.
Long64_t fEntries
Number of entries.
TTree * fTree
! Pointer to Tree header
Using a TBrowser one can browse all ROOT objects.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual void PushDataCache(TVirtualArray *)
Push a new data cache area onto the list of area to be used for temporarily store 'missing' data memb...
virtual TVirtualArray * PopDataCache()
Pop and Return the 'current' data cache area from the list of area to be used for temporarily store '...
virtual void ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t force)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TClassRef is used to implement a permanent reference to a TClass object.
void SetName(const char *new_name)
TClass * GetClass() const
const char * GetClassName()
TClass instances represent classes, structs and namespaces in the ROOT type system.
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
TVirtualStreamerInfo * GetStreamerInfoAbstractEmulated(Int_t version=0) const
For the case where the requestor class is emulated and this class is abstract, returns a pointer to t...
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
TList * GetListOfRealData() const
Bool_t CanIgnoreTObjectStreamer()
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
const TObjArray * GetStreamerInfos() const
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method).
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=0) const
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
Bool_t IsVersioned() const
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
Version_t GetClassVersion() const
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
@ kHasCustomStreamerMember
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
An array of clone (identical) objects.
virtual void ExpandCreateFast(Int_t n)
Expand or shrink the array to n elements and create the clone objects by calling their default ctor.
TClass * GetClass() const
virtual const char * GetName() const
Return name of this collection.
void Browse(TBrowser *b)
Browse this collection (called by TBrowser).
virtual Int_t GetEntries() const
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
All ROOT classes may have RTTI (run time type identification) support added.
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
Basic data type descriptor (datatype information is obtained from CINT).
Describe directory structure in memory.
virtual Int_t WriteTObject(const TObject *obj, const char *name=nullptr, Option_t *="", Int_t=0)
See TDirectoryFile::WriteTObject for details.
virtual TFile * GetFile() const
virtual Bool_t IsWritable() const
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Int_t GetCompressionSettings() const
A TLeaf for the general case when using the branches created via a TStreamerInfo (i....
virtual void SetLeafCount(TLeaf *leaf)
Set the leaf count of this leaf.
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
virtual Int_t GetMaximum() const
virtual void SetAddress(void *add=0)
virtual void SetRange(Bool_t range=kTRUE)
virtual Int_t GetLenStatic() const
Return the fixed length of this leaf.
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Int_t IndexOf(const TObject *obj) const
Int_t GetEntriesFast() const
TObject ** GetObjectRef() const
Int_t GetEntries() const
Return the number of objects in array (i.e.
TObject * UncheckedAt(Int_t i) const
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
TObject * At(Int_t idx) const
Mother of all ROOT objects.
friend class TClonesArray
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
R__ALWAYS_INLINE Bool_t IsZombie() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
TRangeDynCast is an adaptater class that allows the typed iteration through a TCollection.
The TRealData class manages the effective list of all data members for a given class.
Long_t GetThisOffset() const
const char * GetCountName() const
virtual const char * GetFullName() const
Return element name including dimensions, if any Note that this function stores the name into a stati...
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
TClass * GetNewClass() const
virtual Bool_t IsTransient() const
Return kTRUE if the element represent an entity that is not written to the disk (transient members,...
virtual Bool_t IsaPointer() const
const char * GetTypeName() const
virtual Bool_t CannotSplit() const
Returns true if the element cannot be split, false otherwise.
TClass * GetClass() const
const char * GetTypeNameBasic() const
Return type name of this element in case the type name is not a standard basic type,...
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual void ls(Option_t *option="") const
Print the content of the element.
static SequencePtr WriteMemberWiseActionsViaProxyGetter(TStreamerInfo *, TVirtualCollectionProxy *collectionProxy, TClass *)
void Print(Option_t *="") const
This method must be overridden when a class wants to print itself.
static SequencePtr WriteMemberWiseActionsGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
static SequencePtr ConversionReadMemberWiseActionsViaProxyGetter(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *originalClass)
static SequencePtr WriteMemberWiseActionsCollectionCreator(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *)
static SequencePtr ReadMemberWiseActionsCollectionCreator(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *)
static SequencePtr ReadMemberWiseActionsGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
SequencePtr(*)(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *originalClass) SequenceGetter_t
static SequencePtr WriteMemberWiseActionsCollectionGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
ActionContainer_t fActions
TActionSequence * CreateSubSequence(const std::vector< Int_t > &element_ids, size_t offset)
static SequencePtr ReadMemberWiseActionsCollectionGetter(TStreamerInfo *info, TVirtualCollectionProxy *, TClass *)
void AddToOffset(Int_t delta)
static SequencePtr ReadMemberWiseActionsViaProxyGetter(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *)
Base class of the Configurations.
TVirtualStreamerInfo * fInfo
TStreamerInfo form which the action is derived.
UInt_t fElemId
Identifier of the TStreamerElement.
Describe Streamer information for one class version.
TObjArray * GetElements() const
TStreamerElement * GetStreamerElement(const char *datamember, Int_t &offset) const
Return the StreamerElement of "datamember" inside our class or any of its base classes.
T GetTypedValue(char *pointer, Int_t i, Int_t j, Int_t len) const
Return value of element i in object at pointer.
Int_t GetNelement() const
void PrintValue(const char *name, char *pointer, Int_t i, Int_t len, Int_t lenmax=1000) const
print value of element i in object at pointer The function may be called in two ways: -method1 len < ...
T GetTypedValueSTLP(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
Return value of element i in object number j in a TClonesArray and eventually element k in a sub-arra...
TClass * GetClass() const
void ls(Option_t *option="") const
List the TStreamerElement list and also the precomputed tables if option contains the string "incOrig...
T GetTypedValueSTL(TVirtualCollectionProxy *cont, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
Return value of element i in object number j in a TClonesArray and eventually element k in a sub-arra...
TStreamerElement * GetElement(Int_t id) const
T GetTypedValueClones(TClonesArray *clones, Int_t i, Int_t j, Int_t k, Int_t eoffset) const
void PrintValueSTL(const char *name, TVirtualCollectionProxy *cont, Int_t i, Int_t eoffset, Int_t lenmax=1000) const
Print value of element i in a TClonesArray.
Int_t GetClassVersion() const
UInt_t GetCheckSum() const
void PrintValueClones(const char *name, TClonesArray *clones, Int_t i, Int_t eoffset, Int_t lenmax=1000) const
Print value of element i in a TClonesArray.
const char * GetCountName() const
static const Ssiz_t kNPOS
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
Ssiz_t Last(char c) const
Find last occurrence of a character c.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
A TTree represents a columnar dataset.
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
Int_t GetDefaultEntryOffsetLen() const
virtual TObjArray * GetListOfLeaves()
TDirectory * GetDirectory() const
virtual TBranchRef * GetBranchRef() const
@ kSplitCollectionOfPointers
virtual Long64_t GetReadEntry() const
Long64_t GetDebugMin() const
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
TStreamerInfo * BuildStreamerInfo(TClass *cl, void *pointer=0, Bool_t canOptimize=kTRUE)
Build StreamerInfo for class cl.
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
char * GetObjectAt(UInt_t ind) const
void SetSize(UInt_t size)
Small helper class to generically acquire and release iterators.
void CreateIterators(void *collection, TVirtualCollectionProxy *proxy)
virtual Int_t GetProperties() const
virtual void Destructor(void *p, Bool_t dtorOnly=kFALSE) const
virtual EDataType GetType() const =0
virtual void Clear(const char *opt="")=0
virtual void * New() const
virtual TClass * GetValueClass() const =0
virtual void Commit(void *)=0
virtual void * At(UInt_t idx)=0
virtual Int_t GetCollectionType() const =0
virtual UInt_t Size() const =0
virtual TVirtualCollectionProxy * Generate() const =0
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
virtual Bool_t HasPointers() const =0
virtual TClass * GetCollectionClass() const
void CreateIterators(void *collection, TVirtualCollectionProxy *proxy)
Abstract Interface class describing Streamer information for one class.
Bool_t IsCompiled() const
virtual TStreamerElement * GetElement(Int_t id) const =0
virtual TObjArray * GetElements() const =0
virtual TClass * GetClass() const =0
basic_string_view< char > string_view
std::string GetName(const std::string &scope_name)
static constexpr double s
Short_t Min(Short_t a, Short_t b)
std::vector< TIDNode > TIDs