#ifndef ROOT_TTreeCache
#define ROOT_TTreeCache
#ifndef ROOT_TFileCacheRead
#include "TFileCacheRead.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
class TTree;
class TBranch;
class TTreeCache : public TFileCacheRead {
protected:
Long64_t fEntryMin;
Long64_t fEntryMax;
Long64_t fEntryCurrent;
Long64_t fEntryNext;
Int_t fNbranches;
Int_t fNReadOk;
Int_t fNReadMiss;
Int_t fNReadPref;
TObjArray *fBranches;
TList *fBrNames;
TTree *fOwner;
TTree *fTree;
Bool_t fIsLearning;
Bool_t fIsManual;
Bool_t fFirstBuffer;
Bool_t fOneTime;
Bool_t fReverseRead;
Int_t fFillTimes;
Bool_t fFirstTime;
Long64_t fFirstEntry;
Bool_t fReadDirectionSet;
static Int_t fgLearnEntries;
private:
TTreeCache(const TTreeCache &);
TTreeCache& operator=(const TTreeCache &);
public:
TTreeCache();
TTreeCache(TTree *tree, Int_t buffersize=0);
virtual ~TTreeCache();
virtual void AddBranch(TBranch *b, Bool_t subbranches = kFALSE);
virtual void AddBranch(const char *branch, Bool_t subbranches = kFALSE);
virtual void DropBranch(TBranch *b, Bool_t subbranches = kFALSE);
virtual void DropBranch(const char *branch, Bool_t subbranches = kFALSE);
const TObjArray *GetCachedBranches() const { return fBranches; }
Double_t GetEfficiency() const;
Double_t GetEfficiencyRel() const;
static Int_t GetLearnEntries();
virtual Bool_t FillBuffer();
TTree *GetOwner() const;
TTree *GetTree() const;
virtual Bool_t IsLearning() const {return fIsLearning;}
virtual void Print(Option_t *option="") const;
virtual Int_t ReadBuffer(char *buf, Long64_t pos, Int_t len);
virtual Int_t ReadBufferNormal(char *buf, Long64_t pos, Int_t len);
virtual Int_t ReadBufferPrefetch(char *buf, Long64_t pos, Int_t len);
virtual void ResetCache();
virtual void SetEntryRange(Long64_t emin, Long64_t emax);
static void SetLearnEntries(Int_t n = 10);
void StartLearningPhase();
virtual void StopLearningPhase();
virtual void UpdateBranches(TTree *tree, Bool_t owner = kFALSE);
ClassDef(TTreeCache,2)
};
#endif