47 namespace Experimental {
49 class TBulkBranchRead;
53 class TBranchIMTHelper;
57 const Int_t kDoNotProcess = BIT(10);
58 const Int_t kIsClone = BIT(11);
59 const Int_t kBranchObject = BIT(12);
60 const Int_t kBranchAny = BIT(17);
61 const Int_t kMapObject = kBranchObject | kBranchAny;
64 namespace Experimental {
69 class TBulkBranchRead {
71 friend class ::TBranch;
74 Int_t GetBulkEntries(Long64_t evt, TBuffer &user_buf);
75 Int_t GetEntriesSerialized(Long64_t evt, TBuffer &user_buf);
76 Int_t GetEntriesSerialized(Long64_t evt, TBuffer &user_buf, TBuffer *count_buf);
77 Bool_t SupportsBulkRead()
const;
80 TBulkBranchRead(TBranch &parent)
90 class TBranch :
public TNamed ,
public TAttFill {
91 using TIOFeatures = ROOT::TIOFeatures;
94 friend class TTreeCache;
95 friend class TTreeCloner;
97 friend class ROOT::Experimental::Internal::TBulkBranchRead;
101 kDoNotProcess = ::kDoNotProcess,
102 kIsClone = ::kIsClone,
103 kBranchObject = ::kBranchObject,
104 kBranchAny = ::kBranchAny,
106 kAutoDelete = BIT(15),
108 kDoNotUseBufferMap = BIT(22)
111 using BulkObj = ROOT::Experimental::Internal::TBulkBranchRead;
112 static Int_t fgCount;
115 Int_t fEntryOffsetLen;
117 Long64_t fEntryNumber;
118 TBasket *fExtraBasket;
119 TIOFeatures fIOFeatures;
127 Long64_t fFirstBasketEntry;
128 Long64_t fNextBasketEntry;
129 TBasket *fCurrentBasket;
131 Long64_t fFirstEntry;
138 Long64_t *fBasketEntry;
139 Long64_t *fBasketSeek;
144 TDirectory *fDirectory;
146 TBuffer *fEntryBuffer;
147 TBuffer *fTransientBuffer;
153 using CacheInfo_t = ROOT::Internal::TBranchCacheInfo;
154 CacheInfo_t fCacheInfo;
156 typedef void (TBranch::*ReadLeaves_t)(TBuffer &b);
157 ReadLeaves_t fReadLeaves;
158 typedef void (TBranch::*FillLeaves_t)(TBuffer &b);
159 FillLeaves_t fFillLeaves;
160 void ReadLeavesImpl(TBuffer &b);
161 void ReadLeaves0Impl(TBuffer &b);
162 void ReadLeaves1Impl(TBuffer &b);
163 void ReadLeaves2Impl(TBuffer &b);
164 void FillLeavesImpl(TBuffer &b);
166 void SetSkipZip(Bool_t skip = kTRUE) { fSkipZip = skip; }
167 void Init(
const char *name,
const char *leaflist, Int_t compress);
169 TBasket *GetFreshBasket(TBuffer *user_buffer);
170 TBasket *GetFreshCluster();
171 Int_t WriteBasket(TBasket* basket, Int_t where) {
return WriteBasketImpl(basket, where,
nullptr); }
173 TString GetRealFileName()
const;
176 Int_t GetBasketAndFirst(TBasket*& basket, Long64_t& first, TBuffer* user_buffer);
177 TBasket *GetBasketImpl(Int_t basket, TBuffer* user_buffer);
178 Int_t GetBulkEntries(Long64_t, TBuffer&);
179 Int_t GetEntriesSerialized(Long64_t N, TBuffer& user_buf) {
return GetEntriesSerialized(N, user_buf,
nullptr);}
180 Int_t GetEntriesSerialized(Long64_t, TBuffer&, TBuffer*);
181 Int_t FillEntryBuffer(TBasket* basket,TBuffer* buf, Int_t& lnew);
182 Int_t WriteBasketImpl(TBasket* basket, Int_t where, ROOT::Internal::TBranchIMTHelper *);
183 TBranch(
const TBranch&) =
delete;
184 TBranch& operator=(
const TBranch&) =
delete;
188 TBranch(TTree *tree,
const char *name,
void *address,
const char *leaflist, Int_t basketsize=32000, Int_t compress = ROOT::RCompressionSetting::EAlgorithm::kInherit);
189 TBranch(TBranch *parent,
const char *name,
void *address,
const char *leaflist, Int_t basketsize=32000, Int_t compress = ROOT::RCompressionSetting::EAlgorithm::kInherit);
192 virtual void AddBasket(TBasket &b, Bool_t ondisk, Long64_t startEntry);
193 virtual void AddLastBasket(Long64_t startEntry);
195 virtual void Browse(TBrowser *b);
196 virtual void DeleteBaskets(Option_t* option=
"");
197 virtual void DropBaskets(Option_t *option =
"");
198 void ExpandBasketArrays();
199 Int_t Fill() {
return FillImpl(
nullptr); }
200 virtual Int_t FillImpl(ROOT::Internal::TBranchIMTHelper *);
201 virtual TBranch *FindBranch(
const char *name);
202 virtual TLeaf *FindLeaf(
const char *name);
203 Int_t FlushBaskets();
204 Int_t FlushOneBasket(UInt_t which);
206 virtual char *GetAddress()
const {
return fAddress;}
207 TBasket *GetBasket(Int_t basket) {
return GetBasketImpl(basket,
nullptr);}
208 Int_t *GetBasketBytes()
const {
return fBasketBytes;}
209 Long64_t *GetBasketEntry()
const {
return fBasketEntry;}
210 virtual Long64_t GetBasketSeek(Int_t basket)
const;
211 virtual Int_t GetBasketSize()
const {
return fBasketSize;}
212 ROOT::Experimental::Internal::TBulkBranchRead &GetBulkRead() {
return fBulk; }
213 virtual TList *GetBrowsables();
214 virtual const char* GetClassName()
const;
215 Int_t GetCompressionAlgorithm()
const;
216 Int_t GetCompressionLevel()
const;
217 Int_t GetCompressionSettings()
const;
218 TDirectory *GetDirectory()
const {
return fDirectory;}
219 virtual Int_t GetEntry(Long64_t entry=0, Int_t getall = 0);
220 virtual Int_t GetEntryExport(Long64_t entry, Int_t getall, TClonesArray *list, Int_t n);
221 Int_t GetEntryOffsetLen()
const {
return fEntryOffsetLen; }
222 Int_t GetEvent(Long64_t entry=0) {
return GetEntry(entry);}
223 const char *GetIconName()
const;
224 virtual Int_t GetExpectedType(TClass *&clptr,EDataType &type);
225 virtual TLeaf *GetLeaf(
const char *name)
const;
226 virtual TFile *GetFile(Int_t mode=0);
227 const char *GetFileName()
const {
return fFileName.Data();}
228 Int_t GetOffset()
const {
return fOffset;}
229 Int_t GetReadBasket()
const {
return fReadBasket;}
230 Long64_t GetReadEntry()
const {
return fReadEntry;}
231 Int_t GetWriteBasket()
const {
return fWriteBasket;}
232 Long64_t GetTotalSize(Option_t *option=
"")
const;
233 Long64_t GetTotBytes(Option_t *option=
"")
const;
234 Long64_t GetZipBytes(Option_t *option=
"")
const;
235 Long64_t GetEntryNumber()
const {
return fEntryNumber;}
236 Long64_t GetFirstEntry()
const {
return fFirstEntry; }
237 TIOFeatures GetIOFeatures()
const;
238 TObjArray *GetListOfBaskets() {
return &fBaskets;}
239 TObjArray *GetListOfBranches() {
return &fBranches;}
240 TObjArray *GetListOfLeaves() {
return &fLeaves;}
241 Int_t GetMaxBaskets()
const {
return fMaxBaskets;}
242 Int_t GetNleaves()
const {
return fNleaves;}
243 Int_t GetSplitLevel()
const {
return fSplitLevel;}
244 Long64_t GetEntries()
const {
return fEntries;}
245 TTree *GetTree()
const {
return fTree;}
246 virtual Int_t GetRow(Int_t row);
247 virtual Bool_t GetMakeClass()
const;
248 TBranch *GetMother()
const;
249 TBranch *GetSubBranch(
const TBranch *br)
const;
250 TBuffer *GetTransientBuffer(Int_t size);
251 Bool_t IsAutoDelete()
const;
252 Bool_t IsFolder()
const;
253 virtual void KeepCircular(Long64_t maxEntries);
254 virtual Int_t LoadBaskets();
255 virtual void Print(Option_t *option=
"")
const;
256 void PrintCacheInfo()
const;
257 virtual void ReadBasket(TBuffer &b);
258 virtual void Refresh(TBranch *b);
259 virtual void Reset(Option_t *option=
"");
260 virtual void ResetAfterMerge(TFileMergeInfo *);
261 virtual void ResetAddress();
262 virtual void ResetReadEntry() {fReadEntry = -1;}
263 virtual void SetAddress(
void *add);
264 virtual void SetObject(
void *objadd);
265 virtual void SetAutoDelete(Bool_t autodel=kTRUE);
266 virtual void SetBasketSize(Int_t buffsize);
267 virtual void SetBufferAddress(TBuffer *entryBuffer);
268 void SetCompressionAlgorithm(Int_t algorithm = ROOT::RCompressionSetting::EAlgorithm::kUseGlobal);
269 void SetCompressionLevel(Int_t level = ROOT::RCompressionSetting::ELevel::kUseMin);
270 void SetCompressionSettings(Int_t settings = ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault);
271 virtual void SetEntries(Long64_t entries);
272 virtual void SetEntryOffsetLen(Int_t len, Bool_t updateSubBranches = kFALSE);
273 virtual void SetFirstEntry( Long64_t entry );
274 virtual void SetFile(TFile *file=0);
275 virtual void SetFile(
const char *filename);
276 void SetIOFeatures(TIOFeatures &features) {fIOFeatures = features;}
277 virtual Bool_t SetMakeClass(Bool_t decomposeObj = kTRUE);
278 virtual void SetOffset(Int_t offset=0) {fOffset=offset;}
279 virtual void SetStatus(Bool_t status=1);
280 virtual void SetTree(TTree *tree) { fTree = tree;}
281 virtual void SetupAddresses();
282 Bool_t SupportsBulkRead()
const;
283 virtual void UpdateAddress() {;}
284 virtual void UpdateFile();
286 static void ResetCount();
288 ClassDef(TBranch, 13);
292 inline Int_t TBranch::GetCompressionAlgorithm()
const
294 return (fCompress < 0) ? -1 : fCompress / 100;
298 inline Int_t TBranch::GetCompressionLevel()
const
300 return (fCompress < 0) ? -1 : fCompress % 100;
304 inline Int_t TBranch::GetCompressionSettings()
const
306 return (fCompress < 0) ? -1 : fCompress;
310 namespace Experimental {
313 inline Int_t TBulkBranchRead::GetBulkEntries(Long64_t evt, TBuffer& user_buf) {
return fParent.GetBulkEntries(evt, user_buf); }
314 inline Int_t TBulkBranchRead::GetEntriesSerialized(Long64_t evt, TBuffer& user_buf) {
return fParent.GetEntriesSerialized(evt, user_buf); }
315 inline Int_t TBulkBranchRead::GetEntriesSerialized(Long64_t evt, TBuffer& user_buf, TBuffer* count_buf) {
return fParent.GetEntriesSerialized(evt, user_buf, count_buf); }
316 inline Bool_t TBulkBranchRead::SupportsBulkRead()
const {
return fParent.SupportsBulkRead(); }