49 class TLeaf :
public TNamed {
53 virtual Int_t GetOffsetHeaderSize()
const {
return 0;}
57 using Counts_t = std::vector<Int_t>;
58 struct LeafCountValues {
60 Long64_t fStartEntry{-1};
71 LeafCountValues *fLeafCountValues;
74 TLeaf& operator=(
const TLeaf&);
76 template <
typename T>
struct GetValueHelper {
77 static T Exec(
const TLeaf *leaf, Int_t i = 0) {
return leaf->GetValue(i); }
80 Int_t *GenerateOffsetArrayBase(Int_t base, Int_t events)
const;
87 kIndirectAddress = BIT(11),
91 enum class DeserializeType {
99 TLeaf(TBranch *parent,
const char *name,
const char *type);
102 virtual void Browse(TBrowser *b);
103 virtual Bool_t CanGenerateOffsetArray() {
return fLeafCount;}
104 virtual void Export(TClonesArray *, Int_t) {}
105 virtual void FillBasket(TBuffer &b);
106 virtual Int_t *GenerateOffsetArray(Int_t base, Int_t events) {
return GenerateOffsetArrayBase(base, events); }
107 TBranch *GetBranch()
const {
return fBranch; }
108 virtual DeserializeType GetDeserializeType()
const {
return DeserializeType::kDestructive; }
111 virtual TLeaf *GetLeafCount()
const {
return fLeafCount; }
112 virtual TLeaf *GetLeafCounter(Int_t &countval)
const;
114 virtual const Counts_t *GetLeafCountValues(Long64_t start, Long64_t len);
116 virtual Int_t GetLen()
const;
122 virtual Int_t GetLenStatic()
const {
return fLen; }
123 virtual Int_t GetLenType()
const {
return fLenType; }
124 virtual Int_t GetMaximum()
const {
return 0; }
125 virtual Int_t GetMinimum()
const {
return 0; }
126 virtual Int_t GetNdata()
const {
return fNdata; }
127 virtual Int_t GetOffset()
const {
return fOffset; }
128 virtual void *GetValuePointer()
const {
return 0; }
129 virtual const char *GetTypeName()
const {
return ""; }
131 virtual Double_t GetValue(Int_t i = 0)
const;
132 virtual Long64_t GetValueLong64(Int_t i = 0)
const {
return GetValue(i); }
133 virtual LongDouble_t GetValueLongDouble(Int_t i = 0)
const {
return GetValue(i); }
134 template <
typename T> T GetTypedValue(Int_t i = 0)
const {
return GetValueHelper<T>::Exec(
this, i); }
136 virtual Bool_t IncludeRange(TLeaf *) {
return kFALSE; }
137 virtual void Import(TClonesArray *, Int_t) {}
138 virtual Bool_t IsOnTerminalBranch()
const {
return kTRUE; }
139 virtual Bool_t IsRange()
const {
return fIsRange; }
140 virtual Bool_t IsUnsigned()
const {
return fIsUnsigned; }
141 virtual void PrintValue(Int_t i = 0)
const;
142 virtual void ReadBasket(TBuffer &) {}
143 virtual void ReadBasketExport(TBuffer &, TClonesArray *, Int_t) {}
144 virtual bool ReadBasketFast(TBuffer&, Long64_t) {
return false; }
145 virtual bool ReadBasketSerialized(TBuffer&, Long64_t) {
return false; }
146 virtual void ReadValue(std::istream & , Char_t =
' ') {
147 Error(
"ReadValue",
"Not implemented!");
149 Int_t ResetAddress(
void *add, Bool_t destructor = kFALSE);
150 virtual void SetAddress(
void *add = 0);
151 virtual void SetBranch(TBranch *branch) { fBranch = branch; }
152 virtual void SetLeafCount(TLeaf *leaf);
153 virtual void SetLen(Int_t len = 1) { fLen = len; }
154 virtual void SetOffset(Int_t offset = 0) { fOffset = offset; }
155 virtual void SetRange(Bool_t range = kTRUE) { fIsRange = range; }
156 virtual void SetUnsigned() { fIsUnsigned = kTRUE; }
162 template <>
struct TLeaf::GetValueHelper<Long64_t> {
163 static Long64_t Exec(
const TLeaf *leaf, Int_t i = 0) {
return leaf->GetValueLong64(i); }
165 template <>
struct TLeaf::GetValueHelper<ULong64_t> {
166 static ULong64_t Exec(
const TLeaf *leaf, Int_t i = 0) {
return (ULong64_t)leaf->GetValueLong64(i); }
168 template <>
struct TLeaf::GetValueHelper<LongDouble_t> {
169 static LongDouble_t Exec(
const TLeaf *leaf, Int_t i = 0) {
return leaf->GetValueLongDouble(i); }
173 inline Double_t TLeaf::GetValue(Int_t )
const {
return 0.0; }
174 inline void TLeaf::PrintValue(Int_t )
const {}
175 inline void TLeaf::SetAddress(
void* ) {}