// @(#)root/tree:$Id$
// Author: Rene Brun   14/01/2001

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TLeafElement
#define ROOT_TLeafElement


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TLeafElement                                                          //
//                                                                      //
// A TLeaf for a general object derived from TObject.                   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////


#ifndef ROOT_TLeaf
#include "TLeaf.h"
#endif
#ifndef ROOT_TBranchElement
#include "TBranchElement.h"
#endif

class TMethodCall;

class TLeafElement : public TLeaf {

protected:
   char               *fAbsAddress;   //! Absolute leaf Address
   Int_t               fID;           //element serial number in fInfo
   Int_t               fType;         //leaf type

public:
   TLeafElement();
   TLeafElement(TBranch *parent, const char *name, Int_t id, Int_t type);
   virtual ~TLeafElement();

   virtual Int_t    GetLen() const {return ((TBranchElement*)fBranch)->GetNdata()*fLen;}
   TMethodCall     *GetMethodCall(const char *name);
   virtual Int_t    GetMaximum() const {return ((TBranchElement*)fBranch)->GetMaximum();}
   virtual Int_t    GetNdata() const {return ((TBranchElement*)fBranch)->GetNdata()*fLen;}
   virtual const char *GetTypeName() const {return ((TBranchElement*)fBranch)->GetTypeName();}

   virtual Double_t     GetValue(Int_t i=0) const { return ((TBranchElement*)fBranch)->GetValue(i, fLen, kFALSE);}
   virtual Long64_t     GetValueLong64(Int_t i = 0) const { return ((TBranchElement*)fBranch)->GetTypedValue<Long64_t>(i, fLen, kFALSE); }
   virtual LongDouble_t GetValueLongDouble(Int_t i = 0) const { return ((TBranchElement*)fBranch)->GetTypedValue<LongDouble_t>(i, fLen, kFALSE); }
   template<typename T> T GetTypedValueSubArray(Int_t i=0, Int_t j=0) const {return ((TBranchElement*)fBranch)->GetTypedValue<T>(i, j, kTRUE);}

   virtual void    *GetValuePointer() const { return ((TBranchElement*)fBranch)->GetValuePointer(); }
   virtual Bool_t   IsOnTerminalBranch() const;
   virtual void     PrintValue(Int_t i=0) const {((TBranchElement*)fBranch)->PrintValue(i);}
   virtual void     SetLeafCount(TLeaf *leaf) {fLeafCount = leaf;}

   ClassDef(TLeafElement,1);  //A TLeaf for a general object derived from TObject.
};

#endif
 TLeafElement.h:1
 TLeafElement.h:2
 TLeafElement.h:3
 TLeafElement.h:4
 TLeafElement.h:5
 TLeafElement.h:6
 TLeafElement.h:7
 TLeafElement.h:8
 TLeafElement.h:9
 TLeafElement.h:10
 TLeafElement.h:11
 TLeafElement.h:12
 TLeafElement.h:13
 TLeafElement.h:14
 TLeafElement.h:15
 TLeafElement.h:16
 TLeafElement.h:17
 TLeafElement.h:18
 TLeafElement.h:19
 TLeafElement.h:20
 TLeafElement.h:21
 TLeafElement.h:22
 TLeafElement.h:23
 TLeafElement.h:24
 TLeafElement.h:25
 TLeafElement.h:26
 TLeafElement.h:27
 TLeafElement.h:28
 TLeafElement.h:29
 TLeafElement.h:30
 TLeafElement.h:31
 TLeafElement.h:32
 TLeafElement.h:33
 TLeafElement.h:34
 TLeafElement.h:35
 TLeafElement.h:36
 TLeafElement.h:37
 TLeafElement.h:38
 TLeafElement.h:39
 TLeafElement.h:40
 TLeafElement.h:41
 TLeafElement.h:42
 TLeafElement.h:43
 TLeafElement.h:44
 TLeafElement.h:45
 TLeafElement.h:46
 TLeafElement.h:47
 TLeafElement.h:48
 TLeafElement.h:49
 TLeafElement.h:50
 TLeafElement.h:51
 TLeafElement.h:52
 TLeafElement.h:53
 TLeafElement.h:54
 TLeafElement.h:55
 TLeafElement.h:56
 TLeafElement.h:57
 TLeafElement.h:58
 TLeafElement.h:59
 TLeafElement.h:60
 TLeafElement.h:61
 TLeafElement.h:62
 TLeafElement.h:63
 TLeafElement.h:64
 TLeafElement.h:65