12 #ifndef ROOT_TLeafElement
13 #define ROOT_TLeafElement
32 class TLeafElement :
public TLeaf {
38 mutable std::atomic<DeserializeType> fDeserializeTypeCache{ DeserializeType::kInvalid };
39 mutable std::atomic<EDataType> fDataTypeCache{EDataType::kOther_t};
42 virtual Int_t GetOffsetHeaderSize()
const {
return 1;}
46 TLeafElement(TBranch *parent,
const char *name, Int_t
id, Int_t type);
47 virtual ~TLeafElement();
49 virtual Bool_t CanGenerateOffsetArray() {
return fLeafCount && fLenType; }
50 virtual Int_t *GenerateOffsetArrayBase(Int_t , Int_t ) {
return nullptr; }
51 virtual DeserializeType GetDeserializeType()
const;
53 virtual Int_t GetLen()
const {
return ((TBranchElement*)fBranch)->GetNdata()*fLen;}
54 TMethodCall *GetMethodCall(
const char *name);
55 virtual Int_t GetMaximum()
const {
return ((TBranchElement*)fBranch)->GetMaximum();}
56 virtual Int_t GetNdata()
const {
return ((TBranchElement*)fBranch)->GetNdata()*fLen;}
57 virtual const char *GetTypeName()
const {
return ((TBranchElement*)fBranch)->GetTypeName();}
59 virtual Double_t GetValue(Int_t i=0)
const {
return ((TBranchElement*)fBranch)->GetValue(i, fLen, kFALSE);}
60 virtual Long64_t GetValueLong64(Int_t i = 0)
const {
return ((TBranchElement*)fBranch)->GetTypedValue<Long64_t>(i, fLen, kFALSE); }
61 virtual LongDouble_t GetValueLongDouble(Int_t i = 0)
const {
return ((TBranchElement*)fBranch)->GetTypedValue<LongDouble_t>(i, fLen, kFALSE); }
62 template<
typename T> T GetTypedValueSubArray(Int_t i=0, Int_t j=0)
const {
return ((TBranchElement*)fBranch)->GetTypedValue<T>(i, j, kTRUE);}
64 virtual bool ReadBasketFast(TBuffer&, Long64_t);
65 virtual bool ReadBasketSerialized(TBuffer&, Long64_t) {
return GetDeserializeType() != DeserializeType::kDestructive; }
67 virtual void *GetValuePointer()
const {
return ((TBranchElement*)fBranch)->GetValuePointer(); }
68 virtual Bool_t IncludeRange(TLeaf *);
69 virtual Bool_t IsOnTerminalBranch()
const;
70 virtual void PrintValue(Int_t i=0)
const {((TBranchElement*)fBranch)->PrintValue(i);}
71 virtual void SetLeafCount(TLeaf *leaf) {fLeafCount = leaf;}
73 ClassDef(TLeafElement,1);