12 #ifndef ROOT_TBranchCacheInfo
13 #define ROOT_TBranchCacheInfo
35 class TBranchCacheInfo {
44 Int_t fBasketPedestal{-1};
48 void UpdatePedestal(Int_t basketNumber)
50 if (fBasketPedestal == -1) {
51 fBasketPedestal = basketNumber;
52 }
else if (basketNumber < fBasketPedestal) {
53 auto delta = fBasketPedestal - basketNumber;
54 fBasketPedestal = basketNumber;
55 fInfo <<= (delta * kSize);
60 Bool_t TestState(Int_t basketNumber, EStates what)
const
62 if (basketNumber < fBasketPedestal)
64 return fInfo.TestBitNumber(kSize * (basketNumber - fBasketPedestal) + what);
68 void SetState(Int_t basketNumber, EStates what)
70 if (fBasketPedestal <= basketNumber)
71 fInfo.SetBitNumber(kSize * (basketNumber - fBasketPedestal) + what,
true);
76 Bool_t HasBeenUsed(Int_t basketNumber)
const {
return TestState(basketNumber, kUsed); }
79 void SetUsed(Int_t basketNumber)
81 UpdatePedestal(basketNumber);
82 SetState(basketNumber, kUsed);
86 Bool_t IsInCache(Int_t basketNumber)
const {
return TestState(basketNumber, kLoaded); }
89 void SetIsInCache(Int_t basketNumber)
91 UpdatePedestal(basketNumber);
92 SetState(basketNumber, kLoaded);
98 void Veto(Int_t basketNumber)
100 UpdatePedestal(basketNumber);
101 SetState(basketNumber, kVetoed);
105 Bool_t IsVetoed(Int_t basketNumber)
const {
return TestState(basketNumber, kVetoed); }
109 Bool_t AllUsed()
const
111 auto len = fInfo.GetNbits() / kSize + 1;
112 for (UInt_t b = 0; b < len; ++b) {
113 if (fInfo[kSize * b + kLoaded] && !fInfo[kSize * b + kUsed]) {
122 void GetUnused(std::vector<Int_t> &unused)
125 auto len = fInfo.GetNbits() / kSize + 1;
126 for (UInt_t b = 0; b < len; ++b) {
127 if (fInfo[kSize * b + kLoaded] && !fInfo[kSize * b + kUsed]) {
128 unused.push_back(fBasketPedestal + b);
136 fBasketPedestal = -1;
137 fInfo.ResetAllBits();
141 void Print(
const char *owner, Long64_t *entries)
const
143 if (!owner || !entries)
145 auto len = fInfo.GetNbits() / kSize + 1;
146 if (fBasketPedestal >= 0)
147 for (UInt_t b = 0; b < len; ++b) {
148 Printf(
"Branch %s : basket %d loaded=%d used=%d start entry=%lld", owner, b + fBasketPedestal,
149 (
bool)fInfo[kSize * b + kLoaded], (
bool)fInfo[kSize * b + kUsed], entries[fBasketPedestal + b]);
157 #endif // ROOT_TBranchCacheInfo