92, fEntryOffsetLen(1000)
 
   95, fExtraBasket(nullptr)
 
  103, fFirstBasketEntry(-1)
 
  104, fNextBasketEntry(-1)
 
  112, fBaskets(fMaxBaskets)
 
  127, fReadLeaves(&
TBranch::ReadLeavesImpl)
 
  128, fFillLeaves(&
TBranch::FillLeavesImpl)
 
  203, fBasketSize((basketsize < 100) ? 100 : basketsize)
 
  207, fExtraBasket(nullptr)
 
  208, fIOFeatures(
tree ? 
tree->GetIOFeatures().GetFeatures() : 0)
 
  216, fFirstBasketEntry(-1)
 
  217, fNextBasketEntry(-1)
 
  225, fBaskets(fMaxBaskets)
 
  232, fAddress((char *)address)
 
  233, fDirectory(fTree->GetDirectory())
 
  240, fReadLeaves(&
TBranch::ReadLeavesImpl)
 
  241, fFillLeaves(&
TBranch::FillLeavesImpl)
 
  257, fBasketSize((basketsize < 100) ? 100 : basketsize)
 
  261, fExtraBasket(nullptr)
 
  262, fIOFeatures(parent->fIOFeatures)
 
  270, fFirstBasketEntry(-1)
 
  271, fNextBasketEntry(-1)
 
  279, fBaskets(fMaxBaskets)
 
  283, fTree(parent ? parent->GetTree() : 0)
 
  284, fMother(parent ? parent->GetMother() : 0)
 
  286, fAddress((char *)address)
 
  287, fDirectory(fTree ? fTree->GetDirectory() : 0)
 
  294, fReadLeaves(&
TBranch::ReadLeavesImpl)
 
  295, fFillLeaves(&
TBranch::FillLeavesImpl)
 
  326   char* nameBegin = 
const_cast<char*
>(leaflist);
 
  328   auto len = strlen(leaflist);
 
  330   char* leafname = 
new char[len + 1];
 
  331   char* leaftype = 
new char[320];
 
  333   strlcpy(leaftype, 
"F",320);
 
  334   char* pos = 
const_cast<char*
>(leaflist);
 
  335   const char* leaflistEnd = leaflist + len;
 
  336   for (; pos <= leaflistEnd; ++pos) {
 
  338      if ((*pos == 
':') || (*pos == 0)) {
 
  340         Int_t lenName = pos - nameBegin;
 
  343            strncpy(leafname, nameBegin, lenName);
 
  344            leafname[lenName] = 0;
 
  345            ctype = strstr(leafname, 
"/");
 
  348               strlcpy(leaftype, ctype + 1,320);
 
  351         if (lenName == 0 || ctype == leafname) {
 
  352            Warning(
"TBranch",
"No name was given to the leaf number '%d' in the leaflist of the branch '%s'.",
fNleaves,
name);
 
  356         if (leaftype[1] == 
'[' && !strchr(leaftype, 
',')) {
 
  357            Warning(
"TBranch", 
"Array size for branch '%s' must be specified after leaf name, not after the type name!", 
name);
 
  359          } 
else if (leaftype[1] && !strchr(leaftype, 
',')) {
 
  360            Warning(
"TBranch", 
"Extra characters after type tag '%s' for branch '%s'; must be one character.", leaftype, 
name);
 
  363         if (*leaftype == 
'C') {
 
  364            leaf = 
new TLeafC(
this, leafname, leaftype);
 
  365         } 
else if (*leaftype == 
'O') {
 
  366            leaf = 
new TLeafO(
this, leafname, leaftype);
 
  367         } 
else if (*leaftype == 
'B') {
 
  368            leaf = 
new TLeafB(
this, leafname, leaftype);
 
  369         } 
else if (*leaftype == 
'b') {
 
  370            leaf = 
new TLeafB(
this, leafname, leaftype);
 
  372         } 
else if (*leaftype == 
'S') {
 
  373            leaf = 
new TLeafS(
this, leafname, leaftype);
 
  374         } 
else if (*leaftype == 
's') {
 
  375            leaf = 
new TLeafS(
this, leafname, leaftype);
 
  377         } 
else if (*leaftype == 
'I') {
 
  378            leaf = 
new TLeafI(
this, leafname, leaftype);
 
  379         } 
else if (*leaftype == 
'i') {
 
  380            leaf = 
new TLeafI(
this, leafname, leaftype);
 
  382         } 
else if (*leaftype == 
'F') {
 
  383            leaf = 
new TLeafF(
this, leafname, leaftype);
 
  384         } 
else if (*leaftype == 
'f') {
 
  385            leaf = 
new TLeafF16(
this, leafname, leaftype);
 
  386         } 
else if (*leaftype == 
'L') {
 
  387            leaf = 
new TLeafL(
this, leafname, leaftype);
 
  388         } 
else if (*leaftype == 
'l') {
 
  389            leaf = 
new TLeafL(
this, leafname, leaftype);
 
  391         } 
else if (*leaftype == 
'D') {
 
  392            leaf = 
new TLeafD(
this, leafname, leaftype);
 
  393         } 
else if (*leaftype == 
'd') {
 
  394            leaf = 
new TLeafD32(
this, leafname, leaftype);
 
  395         } 
else if (*leaftype == 
'G') {
 
  396            leaf = 
new TLeafG(
this, leafname, leaftype);
 
  397         } 
else if (*leaftype == 
'g') {
 
  398            leaf = 
new TLeafG(
this, leafname, leaftype);
 
  402            Error(
"TLeaf", 
"Illegal data type for %s/%s", 
name, leaflist);
 
  411            auto msg = 
"Illegal leaf: %s/%s. If this is a variable size C array it's possible that the branch holding the size is not available.";
 
  478      if (lst && lst->
GetLast()!=-1) {
 
  560         Warning(
"AddBasket",
"The assumption that out-of-order basket only comes from disk based ntuple is false.");
 
  571               Error(
"AddBasket",
"An out-of-order basket matches the entry number of an existing basket.");
 
  589      Fatal(
"AddBasket", 
"Dropping non-empty 'write' basket in %s %s",
 
  628      Fatal(
"AddBasket",
"The last basket must have the highest entry number (%s/%lld/%d).",
GetName(),startEntry,
fWriteBasket);
 
  685   auto endCluster = cluster.GetNextEntry();
 
  742      for (
Int_t j = 0; j < nb; j++) {
 
  760   if (options && options[0]) {
 
  771      for (
Int_t i=0;i<nbaskets;i++) {
 
  773         if (!basket) 
continue;
 
  793         for (
Int_t j = 0; j < nb; j++) {
 
  795            if (!branch) 
continue;
 
  865      if (!basket) 
return 0;
 
  899      nbytes = lnew - lold;
 
  905      nsize = nevbuf * 
sizeof(
Int_t);
 
  926      if (nout < 0) 
Error(
"TBranch::Fill", 
"Failed to write out basket.\n");
 
  927      return (nout >= 0) ? nbytes : -1;
 
  938   Int_t objectStart = 0;
 
  983         char* s = 
new char[maxsize];
 
  986         while (strlen(s) == (maxsize - 1)) {
 
  991            s = 
new char[maxsize];
 
 1006   if (startpos > 
UInt_t(objectStart)) {
 
 1026      nbytes = lnew - lold;
 
 1041   if (longnm[longnm.length()-1]==
']') {
 
 1042      std::size_t dim = longnm.find_first_of(
"[");
 
 1043      if (dim != std::string::npos) {
 
 1047   if (longnm[longnm.length()-1] != 
'.') {
 
 1055   for(
Int_t i = 0; i < nbranches; ++i) {
 
 1058      const char *brname = branch->
fName.
Data();
 
 1060      if (brname[brlen-1]==
']') {
 
 1061         const char *dim = strchr(brname,
'[');
 
 1063            brlen = dim - brname;
 
 1066      if (namelen == brlen 
 
 1067          && strncmp(
name,brname,brlen) == 0) {
 
 1070      if (brlen == (
size_t)longnm.length()
 
 1071          && strncmp(longnm.c_str(),brname,brlen) == 0) {
 
 1091   while ((leaf = (
TLeaf*) next())) {
 
 1094      if (dim >= 0) leafname.
Remove(dim);
 
 1096      if (leafname == searchname) 
return leaf;
 
 1100      dim = leaftitle.
First(
'[');
 
 1101      if (dim >= 0) leaftitle.
Remove(dim);
 
 1103      if (leaftitle == searchname) 
return leaf;
 
 1108         dim = longname.
First(
'[');
 
 1109         if (dim>=0) longname.
Remove(dim);
 
 1110         if (longname == searchname) 
return leaf;
 
 1113         longname.
Form(
"%s.%s",branch->
GetName(),searchname);
 
 1114         if (longname==leafname) 
return leaf;
 
 1117         dim = longtitle.
First(
'[');
 
 1118         if (dim>=0) longtitle.
Remove(dim);
 
 1119         if (longtitle == searchname) 
return leaf;
 
 1126         if (strstr(searchname, 
".") && !strcmp(searchname, branch->
GetName())) 
return leaf;
 
 1147   for(
Int_t i=0; i != maxbasket; ++i) {
 
 1158   for (
Int_t i = 0; i < len; ++i) {
 
 1232   static std::atomic<Int_t> nerrors(0);
 
 1235   if (basketnumber <0 || basketnumber > 
fWriteBasket) 
return 0;
 
 1237   if (basket) 
return basket;
 
 1271      if (nerrors > 10) 
return 0;
 
 1272      if (nerrors == 10) {
 
 1273         printf(
" file probably overwritten: stopping reporting error messages\n");
 
 1275            printf(
"===>File is more than 2 Gigabytes\n");
 
 1279            printf(
"===>Your file is may be bigger than the maximum file size allowed on your system\n");
 
 1280            printf(
"    Check your AFS maximum file size limit for example\n");
 
 1284      Error(
"GetBasket",
"File: %s at byte:%lld, branch:%s, entry:%lld, badread=%d, nerrors=%d, basketnumber=%d",
file->GetName(),basket->
GetSeekKey(),
GetName(),
fReadEntry,badread,nerrors.load(),basketnumber);
 
 1293      perfStats->
SetUsed(
this, basketnumber);
 
 1304   if (basketnumber <0 || basketnumber > 
fWriteBasket) 
return 0;
 
 1335      return "TBranchElement-folder";
 
 1337      return "TBranchElement-leaf";
 
 1371      if ((entry < 
first) || (entry > last)) {
 
 1375            Error(
"GetBasketAndFirst", 
"In the branch %s, no basket contains the entry %lld\n", 
GetName(), entry);
 
 1399            clusterIterator.
Next();
 
 1485      Error(
"GetBulkEntries", 
"Failed to get a new buffer.\n");
 
 1490      Error(
"GetBulkEntries", 
"Basket has displacement.\n");
 
 1494   if (&user_buf != buf) {
 
 1519      Error(
"GetBulkEntries", 
"Leaf failed to read.\n");
 
 1525      R__ASSERT(
fExtraBasket == 
nullptr && 
"fExtraBasket should have been set to nullptr by GetFreshBasket");
 
 1541      Error(
"GetEntriesSerialized", 
"Encountered a branch with destructive deserialization; failing.");
 
 1556       Error(
"GetEntriesSerialized", 
"Failed to read from full cluster; first entry is %lld; requested entry is %lld.\n", 
first, entry);
 
 1565      Error(
"GetEntriesSerialized", 
"Failed to get a new buffer.\n");
 
 1570      Error(
"GetEntriesSerialized", 
"Basket has displacement.\n");
 
 1574   if (&user_buf != buf) {
 
 1607            Error(
"GetEntriesSerialized", 
"Failed to read count leaf.\n");
 
 1613         Int_t entry_count_serialized;
 
 1614         char *tmp_ptr = 
reinterpret_cast<char*
>(&entry_count_serialized);
 
 1617         for (
int idx=0; idx<
N; idx++) {
 
 1618             *count_buf << entry_count_serialized;
 
 1625      R__ASSERT(
fExtraBasket == 
nullptr && 
"fExtraBasket should have been set to nullptr by GetFreshBasket");
 
 1663   if (
R__unlikely(result < 0)) { 
return result + 1; }
 
 1671      if (!
file) 
return -1;
 
 1687      bufbegin = entryOffset[entry-
first];
 
 1700   return buf->
Length() - bufbegin;
 
 1723   if ((entry < 
first) || (entry > last)) {
 
 1727         Error(
"In the branch %s, no basket contains the entry %d\n", 
GetName(), entry);
 
 1758      bufbegin = entryOffset[entry-
first];
 
 1770   nbytes = buf->
Length() - bufbegin;
 
 1786      expectedType = (
EDataType) 
gROOT->GetType(
l->GetTypeName())->GetType();
 
 1789      Error(
"GetExpectedType", 
"Did not find any leaves in %s",
GetName());
 
 1824   if (!
file) 
return 0;
 
 1825   if (
file->IsZombie()) {
delete file; 
return 0;}
 
 1848      if (
GetTree()->MemoryFull(0)) {
 
 1870#ifdef R__TRACK_BASKET_ALLOC_TIME 
 1871               fTree->AddAllocationTime(basket->GetResetAllocationTime());
 
 1903   auto CreateOrReuseBasket = [
this, user_buffer]() -> 
TBasket* {
 
 1921      return CreateOrReuseBasket();
 
 1928         return CreateOrReuseBasket();
 
 1937   while (
fBasketEntry[basketToUnload] != entryToUnload) {
 
 1939      if (basketToUnload < 0) {
 
 1940         return CreateOrReuseBasket();
 
 1951      basket = CreateOrReuseBasket();
 
 1980   if (!mother || mother==
this) {
 
 1984   if (motherName.
Length() && (motherName[motherName.
Length()-1] == 
'.')) {
 
 1987   return motherName + 
"." + 
fName;
 
 2024         bFileName = arc.
GetUrl();
 
 2087   for (
Int_t i = 0; i < 
n; ++i) {
 
 2105   if (
this == child) {
 
 2115   for (
Int_t i = 0; i < len; ++i) {
 
 2120      if (branch == child) {
 
 2147   const_cast<TBranch *
>(
this)->TBranch::Streamer(
b);
 
 2151   return totbytes + 
b.Length();
 
 2161   if (!option) 
return totbytes;
 
 2162   if (option[0] != 
'*') 
return totbytes;
 
 2165   for (
Int_t i = 0; i < len; ++i) {
 
 2167      if (branch) totbytes += branch->
GetTotBytes(option);
 
 2179   if (!option) 
return zipbytes;
 
 2180   if (option[0] != 
'*') 
return zipbytes;
 
 2183   for (
Int_t i = 0; i < len; ++i) {
 
 2185      if (branch) zipbytes += branch->
GetZipBytes(option);
 
 2215   return browsables && browsables->
GetSize();
 
 2230   for (
Int_t i = 0; i < nb; ++i)  {
 
 2249   Int_t nimported = 0;
 
 2252   if (!
file) 
return 0;
 
 2254   for (
Int_t i=0;i<nbaskets;i++) {
 
 2256      if (basket) 
continue;
 
 2263         Error(
"Loadbaskets",
"Error while reading basket buffer %d of branch %s",i,
GetName());
 
 2281   const int kLINEND = 77;
 
 2285   if ( titleContent == 
GetName() ) {
 
 2286      titleContent.
Clear();
 
 2290      if (titleContent.
Length()>=2 && titleContent[titleContent.
Length()-2]==
'/' && isalpha(titleContent[titleContent.
Length()-1])) {
 
 2294         if (titleContent.
Length()) {
 
 2304   aLength += (aLength / 54 + 1) * 80 + 100;
 
 2305   if (aLength < 200) aLength = 200;
 
 2306   char *bline = 
new char[aLength];
 
 2312   if (strlen(bline) > 
UInt_t(kLINEND)) {
 
 2313      char *tmp = 
new char[strlen(bline)+1];
 
 2314      if (titleLength) strlcpy(tmp, titleContent.
Data(),strlen(bline)+1);
 
 2316      int pos = strlen (bline);
 
 2319      while (beg < titleLength) {
 
 2320         for (end=beg+1; end < titleLength-1; end ++)
 
 2321            if (tmp[end] == 
':')  
break;
 
 2322         if (npos + end-beg+1 >= 78) {
 
 2323            while (npos < kLINEND) {
 
 2324               bline[pos ++] = 
' ';
 
 2327            bline[pos ++] = 
'*';
 
 2328            bline[pos ++] = 
'\n';
 
 2329            bline[pos ++] = 
'*';
 
 2331            for (; npos < 12; npos ++)
 
 2332               bline[pos ++] = 
' ';
 
 2335         for (
int n = beg; 
n <= end; 
n ++)
 
 2336            bline[pos+
n-beg] = tmp[
n];
 
 2341      while (npos < kLINEND) {
 
 2342         bline[pos ++] = 
' ';
 
 2345      bline[pos ++] = 
'*';
 
 2358               Printf(
"*Entries :%9lld : Total  Size=%11lld bytes  All baskets in memory   *",
fEntries,totBytes);
 
 2360               Printf(
"*Entries :%9lld : Total  Size=%11lld bytes  One basket in memory    *",
fEntries,totBytes);
 
 2366   if (strncmp(option,
"basketsInfo",strlen(
"basketsInfo"))==0) {
 
 2368      for (
Int_t i=0;i<nbaskets;i++) {
 
 2369         Printf(
"*Basket #%4d  entry=%6lld  pos=%6lld  size=%5d",
 
 2374   Printf(
"*............................................................................*");
 
 2475   Int_t nbaskets = 
b->fBaskets.GetSize();
 
 2602   for (
Int_t i = 0; i < nbranches; ++i)  {
 
 2688      Error(
"TBranch::SetAddress",
"Filling from a TBuffer can only be done with a not split object branch.  Request ignored.");
 
 2712   for (
Int_t i=0;i<nb;i++) {
 
 2723   if (level < 0) level = 0;
 
 2724   if (level > 99) level = 99;
 
 2734   for (
Int_t i=0;i<nb;i++) {
 
 2748   for (
Int_t i=0;i<nb;i++) {
 
 2764   if (updateExisting) {
 
 2767      while ( ( 
b = (
TBranch*)next() ) ) {
 
 2815   while ((basket = (
TBasket*)nextb())) {
 
 2822   while ((branch = (
TBranch*)next())) {
 
 2854   while ((branch = (
TBranch*)next())) {
 
 2879   Warning(
"SetObject",
"is not supported in TBranch objects");
 
 2896   if (
b.IsReading()) {
 
 2910         b.ReadClassBuffer(TBranch::Class(), 
this, 
v, R__s, R__c);
 
 2922         for (
Int_t i=0;i<nbranches;i++) {
 
 2946         if (IsA() == TBranch::Class()) {
 
 2963         TNamed::Streamer(
b);
 
 2964         if (
v > 7) TAttFill::Streamer(
b);
 
 2994         b.CheckByteCount(R__s, R__c, TBranch::IsA());
 
 3021         b.CheckByteCount(R__s, R__c, TBranch::IsA());
 
 3022         if (IsA() == TBranch::Class()) {
 
 3037      TNamed::Streamer(
b);
 
 3094      b.CheckByteCount(R__s, R__c, TBranch::IsA());
 
 3096      if (IsA() == TBranch::Class()) {
 
 3114      for (
Int_t i = 0; i < lastBasket; ++i) {
 
 3125      b.WriteClassBuffer(TBranch::Class(), 
this);
 
 3127      for (
Int_t i = 0; i < lastBasket; ++i) {
 
 3128         if (stash[i]) 
fBaskets[i] = stash[i];
 
 3154   auto doUpdates = [=]() {
 
 3157         Error(
"WriteBasketImpl", 
"basket's WriteBuffer failed.");
 
 3166         reusebasket = basket;
 
 3173#ifdef R__TRACK_BASKET_ALLOC_TIME 
 3174         fTree->AddAllocationTime(reusebasket->GetResetAllocationTime());
 
 3207      imtHelper->
Run(doUpdates);
 
 3251      while ((basket = (
TBasket*)nextb())) {
 
 3259   while ((branch = (
TBranch*)next())) {
 
void tobuf(char *&buf, Bool_t x)
 
#define R__unlikely(expr)
 
const UInt_t kNewClassTag
 
const UInt_t kByteCountMask
 
R__EXTERN TVirtualMutex * gROOTMutex
 
void Printf(const char *fmt,...)
 
R__EXTERN TSystem * gSystem
 
#define R__LOCKGUARD_IMT(mutex)
 
#define R__LOCKGUARD(mutex)
 
void SetUsed(Int_t basketNumber)
Mark if the basket has been marked as 'used'.
 
void Print(const char *owner, Long64_t *entries) const
Print the info we have for the baskets.
 
A helper class for managing IMT work during TTree:Fill operations.
 
void Run(const FN &lambda)
 
TIOFeatures provides the end-user with the ability to change the IO behavior of data written via a TT...
 
Fill Area Attributes class.
 
Manages buffers for branches of a Tree.
 
void AdoptBuffer(TBuffer *user_buffer)
Adopt a buffer from an external entity.
 
Int_t GetNevBufSize() const
 
Int_t * GetDisplacement() const
 
void DisownBuffer()
Disown all references to the internal buffer - some other object likely now owns it.
 
void SetBranch(TBranch *branch)
 
Int_t ReadBasketBuffers(Long64_t pos, Int_t len, TFile *file)
Read basket buffers in memory and cleanup.
 
virtual Int_t DropBuffers()
Drop buffers of this basket if it is not the current basket.
 
virtual void PrepareBasket(Long64_t)
 
virtual void MoveEntries(Int_t dentries)
Remove the first dentries of this basket, moving entries at dentries to the start of the buffer.
 
void SetNevBufSize(Int_t n)
 
Int_t GetBufferSize() const
 
virtual void AdjustSize(Int_t newsize)
Increase the size of the current fBuffer up to newsize.
 
virtual void SetReadMode()
Set read mode of basket.
 
virtual void SetWriteMode()
Set write mode of basket.
 
Bool_t GetResetAllocationCount() const
 
Int_t ReadBasketBytes(Long64_t pos, TFile *file)
Read basket buffers in memory and cleanup.
 
virtual void ReadResetBuffer(Int_t basketnumber)
Reset the read basket TBuffer memory allocation if needed.
 
virtual Int_t WriteBuffer()
Write buffer of this basket on the current file.
 
void Update(Int_t newlast)
 
virtual void WriteReset()
Reset the write basket to the starting state.
 
A TTree is a list of TBranches.
 
virtual TLeaf * GetLeaf(const char *name) const
Return pointer to the 1st Leaf named name in thisBranch.
 
virtual void SetupAddresses()
If the branch address is not set, we set all addresses starting with the top level parent branch.
 
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)
 
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any.
 
const char * GetIconName() const
Return icon name depending on type of branch.
 
TBasket * GetFreshBasket(Int_t basketnumber, TBuffer *user_buffer)
Return a fresh basket by either reusing an existing basket that needs to be drop (according to TTree:...
 
TBasket * GetBasketImpl(Int_t basket, TBuffer *user_buffer)
Return pointer to basket basketnumber in this Branch.
 
Int_t fEntryOffsetLen
Initial Length of fEntryOffset table in the basket buffers.
 
virtual void DeleteBaskets(Option_t *option="")
Loop on all branch baskets.
 
virtual Long64_t GetBasketSeek(Int_t basket) const
Return address of basket in the file.
 
TBranch()
Default constructor. Used for I/O by default.
 
void SetCompressionSettings(Int_t settings=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault)
Set compression settings.
 
Int_t BackFill()
Loop on all leaves of this branch to back fill Basket buffer.
 
Int_t fMaxBaskets
Maximum number of Baskets so far.
 
Long64_t fTotBytes
Total number of bytes in all leaves before compression.
 
TBuffer * fTransientBuffer
! Pointer to the current transient buffer.
 
virtual void ReadBasket(TBuffer &b)
Loop on all leaves of this branch to read Basket buffer.
 
FillLeaves_t fFillLeaves
! Pointer to the FillLeaves implementation to use.
 
virtual TString GetFullName() const
Return the 'full' name of the branch.
 
@ kDoNotUseBufferMap
If set, at least one of the entry in the branch will use the buffer's map of classname and objects.
 
@ kIsClone
To indicate a TBranchClones.
 
@ kDoNotProcess
Active bit for branches.
 
TObjArray fLeaves
-> List of leaves of this branch
 
Int_t GetBasketAndFirst(TBasket *&basket, Long64_t &first, TBuffer *user_buffer)
A helper function to locate the correct basket - and its first entry.
 
char * fAddress
! Address of 1st leaf (variable or object)
 
virtual void DropBaskets(Option_t *option="")
Loop on all branch baskets.
 
TObjArray * GetListOfBranches()
 
virtual TList * GetBrowsables()
Returns (and, if 0, creates) browsable objects for this branch See TVirtualBranchBrowsable::FillListO...
 
TList * fBrowsables
! List of TVirtualBranchBrowsables used for Browse()
 
void ReadLeavesImpl(TBuffer &b)
Loop on all leaves of this branch to read Basket buffer.
 
Int_t fOffset
Offset of this branch.
 
Long64_t * fBasketEntry
[fMaxBaskets] Table of first entry in each basket
 
Int_t GetEntriesSerialized(Long64_t N, TBuffer &user_buf)
 
virtual void SetEntryOffsetLen(Int_t len, Bool_t updateSubBranches=kFALSE)
Update the default value for the branch's fEntryOffsetLen if and only if it was already non zero (and...
 
void ExpandBasketArrays()
Increase BasketEntry buffer of a minimum of 10 locations and a maximum of 50 per cent of current size...
 
void Init(const char *name, const char *leaflist, Int_t compress)
 
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
 
TIOFeatures GetIOFeatures() const
Returns the IO settings currently in use for this branch.
 
void FillLeavesImpl(TBuffer &b)
Loop on all leaves of this branch to fill Basket buffer.
 
Long64_t fReadEntry
! Current entry number when reading
 
virtual void AddBasket(TBasket &b, Bool_t ondisk, Long64_t startEntry)
Add the basket to this branch.
 
static void ResetCount()
Static function resetting fgCount.
 
TBranch * GetSubBranch(const TBranch *br) const
Find the parent branch of child.
 
ReadLeaves_t fReadLeaves
! Pointer to the ReadLeaves implementation to use.
 
virtual void SetObject(void *objadd)
Set object this branch is pointing to.
 
Int_t FlushBaskets()
Flush to disk all the baskets of this branch and any of subbranches.
 
void ReadLeaves2Impl(TBuffer &b)
Read two leaves without the overhead of a loop.
 
virtual void SetAddress(void *add)
Set address of this branch.
 
static Int_t fgCount
! branch counter
 
virtual void AddLastBasket(Long64_t startEntry)
Add the start entry of the write basket (not yet created)
 
TBasket * GetBasket(Int_t basket)
 
Int_t fNBaskets
! Number of baskets in memory
 
void ReadLeaves1Impl(TBuffer &b)
Read one leaf without the overhead of a loop.
 
Int_t GetBulkEntries(Long64_t, TBuffer &)
Read as many events as possible into the given buffer, using zero-copy mechanisms.
 
Bool_t IsFolder() const
Return kTRUE if more than one leaf or browsables, kFALSE otherwise.
 
virtual Int_t GetEntryExport(Long64_t entry, Int_t getall, TClonesArray *list, Int_t n)
Read all leaves of an entry and export buffers to real objects in a TClonesArray list.
 
Long64_t fZipBytes
Total number of bytes in all leaves after compression.
 
TIOFeatures fIOFeatures
IO features for newly-created baskets.
 
void SetCompressionAlgorithm(Int_t algorithm=ROOT::RCompressionSetting::EAlgorithm::kUseGlobal)
Set compression algorithm.
 
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'.
 
CacheInfo_t fCacheInfo
! Hold info about which basket are in the cache and if they have been retrieved from the cache.
 
TObjArray * GetListOfBaskets()
 
virtual void SetBufferAddress(TBuffer *entryBuffer)
Set address of this branch directly from a TBuffer to avoid streaming.
 
Long64_t GetEntries() const
 
Int_t fNleaves
! Number of leaves
 
Int_t fSplitLevel
Branch split level.
 
Int_t WriteBasketImpl(TBasket *basket, Int_t where, ROOT::Internal::TBranchIMTHelper *)
Write the current basket to disk and return the number of bytes written to the file.
 
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.
 
Long64_t fNextBasketEntry
! Next entry that will requires us to go to the next basket
 
virtual ~TBranch()
Destructor.
 
Int_t FillEntryBuffer(TBasket *basket, TBuffer *buf, Int_t &lnew)
Copy the data from fEntryBuffer into the current basket.
 
virtual TFile * GetFile(Int_t mode=0)
Return pointer to the file where branch buffers reside, returns 0 in case branch buffers reside in th...
 
virtual void Browse(TBrowser *b)
Browser interface.
 
TObjArray fBranches
-> List of Branches of this branch
 
virtual void KeepCircular(Long64_t maxEntries)
keep a maximum of fMaxEntries in memory
 
virtual void ResetAfterMerge(TFileMergeInfo *)
Reset a Branch.
 
void ReadLeaves0Impl(TBuffer &b)
Read zero leaves without the overhead of a loop.
 
virtual Bool_t GetMakeClass() const
Return whether this branch is in a mode where the object are decomposed or not (Also known as MakeCla...
 
TString GetRealFileName() const
Get real file name.
 
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
 
void PrintCacheInfo() const
Print the information we have about which basket is currently cached and whether they have been 'used...
 
TObjArray fBaskets
-> List of baskets of this branch
 
virtual Int_t LoadBaskets()
Baskets associated to this branch are forced to be in memory.
 
Bool_t fSkipZip
! After being read, the buffer will not be unzipped.
 
TBranch * fMother
! Pointer to top-level parent branch in the tree.
 
Long64_t GetTotBytes(Option_t *option="") const
Return total number of bytes in the branch (excluding current buffer) if option ="*" includes all sub...
 
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 SetFile(TFile *file=0)
Set file where this branch writes/reads its buffers.
 
TBranch * fParent
! Pointer to parent branch.
 
Int_t WriteBasket(TBasket *basket, Int_t where)
 
Int_t FlushOneBasket(UInt_t which)
If we have a write basket in memory and it contains some entries and has not yet been written to disk...
 
virtual Int_t GetExpectedType(TClass *&clptr, EDataType &type)
Fill expectedClass and expectedType with information on the data type of the object/values contained ...
 
virtual void SetFirstEntry(Long64_t entry)
set the first entry number (case of TBranchSTL)
 
Long64_t GetTotalSize(Option_t *option="") const
Return total number of bytes in the branch (including current buffer)
 
Long64_t GetZipBytes(Option_t *option="") const
Return total number of zip bytes in the branch if option ="*" includes all sub-branches of this branc...
 
virtual void SetBasketSize(Int_t buffsize)
Set the basket size The function makes sure that the basket size is greater than fEntryOffsetlen.
 
virtual void Refresh(TBranch *b)
Refresh this branch using new information in b This function is called by TTree::Refresh.
 
Int_t fWriteBasket
Last basket number written.
 
Long64_t * fBasketSeek
[fMaxBaskets] Addresses of baskets on file
 
virtual void SetStatus(Bool_t status=1)
Set branch status to Process or DoNotProcess.
 
TObjArray * GetListOfLeaves()
 
virtual void SetEntries(Long64_t entries)
Set the number of entries in this branch.
 
Int_t fReadBasket
! Current basket number when reading
 
Long64_t fFirstEntry
Number of the first entry in this branch.
 
TBasket * fExtraBasket
! Allocated basket not currently holding any data.
 
virtual Int_t GetRow(Int_t row)
Return all elements of one row unpacked in internal array fValues [Actually just returns 1 (?...
 
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.
 
TBuffer * GetTransientBuffer(Int_t size)
Returns the transient buffer currently used by this TBranch for reading/writing baskets.
 
virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *)
Loop on all leaves of this branch to fill Basket buffer.
 
TBuffer * fEntryBuffer
! Buffer used to directly pass the content without streaming
 
TBasket * fCurrentBasket
! Pointer to the current basket.
 
Long64_t fFirstBasketEntry
! First entry in the current basket.
 
void SetCompressionLevel(Int_t level=ROOT::RCompressionSetting::ELevel::kUseMin)
Set compression level.
 
Long64_t fEntries
Number of entries.
 
TBasket * GetFreshCluster(TBuffer *user_buffer)
Drops the cluster two behind the current cluster and returns a fresh basket by either reusing or crea...
 
Bool_t SupportsBulkRead() const
Returns true if this branch supports bulk IO, false otherwise.
 
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.
 
void SetWriteMode()
Set buffer in write mode.
 
char * GetCurrent() const
 
void Expand(Int_t newsize, Bool_t copy=kTRUE)
Expand (or shrink) the I/O buffer to newsize bytes.
 
virtual Int_t GetBufferDisplacement() const =0
 
void AutoExpand(Int_t size_needed)
Automatically calculate a new size and expand the buffer to fit at least size_needed.
 
void SetBuffer(void *buf, UInt_t bufsiz=0, Bool_t adopt=kTRUE, ReAllocCharFun_t reallocfunc=0)
Sets a new buffer in an existing TBuffer object.
 
virtual void ResetMap()=0
 
void SetBufferOffset(Int_t offset=0)
 
virtual Int_t GetMapCount() const =0
 
void SetReadMode()
Set buffer in read mode.
 
virtual void WriteBuf(const void *buf, Int_t max)=0
 
virtual void SetBufferDisplacement()=0
 
virtual char * ReadString(char *s, Int_t max)=0
 
TClass instances represent classes, structs and namespaces in the ROOT type system.
 
An array of clone (identical) objects.
 
void Browse(TBrowser *b)
Browse this collection (called by TBrowser).
 
virtual void RemoveAll(TCollection *col)
Remove all objects in collection col from this collection.
 
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
 
Small helper to keep current directory context.
 
Describe directory structure in memory.
 
virtual TFile * GetFile() const
 
virtual Bool_t IsWritable() const
 
A cache when reading files over the network.
 
virtual void SetSkipZip(Bool_t=kTRUE)
 
virtual Bool_t IsLearning() const
 
virtual Int_t LearnBranch(TBranch *, Bool_t=kFALSE)
 
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
 
Int_t GetCompressionSettings() const
 
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
 
virtual Long64_t GetSeekKey() const
 
virtual void SetParent(const TObject *parent)
Set parent in key buffer.
 
TBuffer * GetBufferRef() const
 
A TLeaf for an 8 bit Integer data type.
 
A TLeaf for a variable length string.
 
A TLeaf for a 24 bit truncated floating point data type.
 
A TLeaf for a 64 bit floating point data type.
 
A TLeaf for a 24 bit truncated floating point data type.
 
A TLeaf for a 32 bit floating point data type.
 
A TLeaf for a 64 bit Integer data type.
 
A TLeaf for an Integer data type.
 
A TLeaf for a 64 bit Integer data type.
 
A TLeaf for a bool data type.
 
A TLeaf for a 16 bit Integer data type.
 
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
 
virtual Int_t GetLenType() const
 
virtual const char * GetTypeName() const
 
virtual Int_t GetLen() const
Return the number of effective elements of this leaf, for the current entry.
 
virtual TLeaf * GetLeafCount() const
If this leaf stores a variable-sized array or a multi-dimensional array whose last dimension has vari...
 
virtual DeserializeType GetDeserializeType() const
 
virtual void ReadBasketExport(TBuffer &, TClonesArray *, Int_t)
 
virtual void SetAddress(void *add=0)
 
virtual Int_t GetNdata() const
 
virtual void FillBasket(TBuffer &b)
Pack leaf elements in Basket output buffer.
 
TBranch * GetBranch() const
 
virtual void SetOffset(Int_t offset=0)
 
virtual bool ReadBasketFast(TBuffer &, Long64_t)
 
virtual void SetBranch(TBranch *branch)
 
virtual void SetUnsigned()
 
virtual Int_t GetOffset() const
 
virtual void ReadBasket(TBuffer &)
 
The TNamed class is the base class for all named ROOT classes.
 
virtual const char * GetTitle() const
Returns title of object.
 
virtual const char * GetName() const
Returns name of object.
 
Int_t GetEntriesFast() const
 
virtual void Expand(Int_t newSize)
Expand or shrink the array to newSize elements.
 
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
 
Int_t GetEntries() const
Return the number of objects in array (i.e.
 
TObject * UncheckedAt(Int_t i) const
 
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
 
void SetLast(Int_t last)
Set index of last object in array, effectively truncating the array.
 
Int_t GetLast() const
Return index of last object in array.
 
virtual TObject * Remove(TObject *obj)
Remove object from array.
 
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
 
virtual TObject * RemoveAt(Int_t idx)
Remove object at index idx.
 
TObject * At(Int_t idx) const
 
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
 
virtual const char * ClassName() const
Returns name of class to which the object belongs.
 
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.
 
static void * ReAlloc(void *vp, size_t size)
Reallocate (i.e.
 
static Int_t * ReAllocInt(Int_t *vp, size_t size, size_t oldsize)
Reallocate (i.e.
 
void ToLower()
Change string to lower-case.
 
void Clear()
Clear string without changing its capacity.
 
Ssiz_t First(char c) const
Find first occurrence of a character c.
 
const char * Data() const
 
TString & Prepend(const char *cs)
 
TString & Remove(Ssiz_t pos)
 
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
 
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
 
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
 
virtual TString GetDirName(const char *pathname)
Return the directory name in pathname.
 
Helper class to iterate over cluster of baskets.
 
Long64_t Previous()
Move on to the previous cluster and return the starting entry of this previous cluster.
 
Long64_t Next()
Move on to the next cluster and return the starting entry of this next cluster.
 
A TTree represents a columnar dataset.
 
virtual TVirtualPerfStats * GetPerfStats() const
 
virtual TClusterIterator GetClusterIterator(Long64_t firstentry)
Return an iterator over the cluster of baskets starting at firstentry.
 
void AddAllocationCount(UInt_t count)
 
virtual TObjArray * GetListOfLeaves()
 
TFile * GetCurrentFile() const
Return pointer to the current file.
 
virtual void IncrementTotalBuffers(Int_t nbytes)
 
TDirectory * GetDirectory() const
 
TTreeCache * GetReadCache(TFile *file) const
Find and return the TTreeCache registered with the file and which may contain branches for us.
 
virtual TObjArray * GetListOfBranches()
 
virtual void AddZipBytes(Int_t zip)
 
virtual TBasket * CreateBasket(TBranch *)
Create a basket for this tree and given branch.
 
@ kOnlyFlushAtCluster
If set, the branch's buffers will grow until an event cluster boundary is hit, guaranteeing a basket ...
 
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
 
virtual Bool_t GetClusterPrefetch() const
 
virtual void AddTotBytes(Int_t tot)
 
virtual Long64_t GetAutoFlush() const
 
virtual Long64_t GetMaxVirtualSize() const
 
This class represents a WWW compatible URL.
 
const char * GetAnchor() const
 
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL.
 
void SetAnchor(const char *anchor)
 
static Int_t FillListOfBrowsables(TList &list, const TBranch *branch, const TVirtualBranchBrowsable *parent=nullptr)
Askes all registered generators to fill their browsables into the list.
 
virtual void SetUsed(TBranch *b, size_t basketNumber)=0
 
Short_t Max(Short_t a, Short_t b)
 
Long64_t BinarySearch(Long64_t n, const T *array, T value)
 
@ kUndefined
Undefined compression algorithm (must be kept the last of the list in case a new algorithm is added).
 
@ kUseMin
Compression level reserved when we are not sure what to use (1 is for the fastest compression)