// @(#)root/tree:$Id$
// Author: Rene Brun   11/02/97

/*************************************************************************
 * 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_TChainElement
#define ROOT_TChainElement


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TChainElement                                                        //
//                                                                      //
// Describes a component of a TChain.                                   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////


#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class TBranch;

class TChainElement : public TNamed {

   // TChainElement status bits
   enum EStatusBits {
      kHasBeenLookedUp = BIT(15)
   };

protected:
   Long64_t      fEntries;          //Number of entries in the tree of this chain element
   Int_t         fNPackets;         //Number of packets
   Int_t         fPacketSize;       //Number of events in one packet for parallel root
   Int_t         fStatus;           //branch status when used as a branch
   void         *fBaddress;         //!branch address when used as a branch
   TString       fBaddressClassName;//!Name of the class pointed to by fBaddress
   UInt_t        fBaddressType;     //!Type of the value pointed to by fBaddress
   Bool_t        fBaddressIsPtr;    //!True if the address is a pointer to an address
   char         *fPackets;          //!Packet descriptor string
   TBranch     **fBranchPtr;        //!Address of user branch pointer (to updated upon loading a file)

public:
   TChainElement();
   TChainElement(const char *title, const char *filename);
   virtual ~TChainElement();
   virtual void        CreatePackets();
   virtual void       *GetBaddress() const {return fBaddress;}
   virtual const char *GetBaddressClassName() const { return fBaddressClassName; }
   virtual Bool_t      GetBaddressIsPtr() const { return fBaddressIsPtr; }
   virtual UInt_t      GetBaddressType() const { return fBaddressType; }
   virtual TBranch   **GetBranchPtr() const { return fBranchPtr; }
   virtual Long64_t    GetEntries() const {return fEntries;}
   virtual char       *GetPackets() const {return fPackets;}
   virtual Int_t       GetPacketSize() const {return fPacketSize;}
   virtual Int_t       GetStatus() const {return fStatus;}
   virtual Bool_t      HasBeenLookedUp() { return TestBit(kHasBeenLookedUp); }
   virtual void        ls(Option_t *option="") const;
   virtual void        SetBaddress(void *add) {fBaddress = add;}
   virtual void        SetBaddressClassName(const char* clname) { fBaddressClassName = clname; }
   virtual void        SetBaddressIsPtr(Bool_t isptr) { fBaddressIsPtr = isptr; }
   virtual void        SetBaddressType(UInt_t type) { fBaddressType = type; }
   virtual void        SetBranchPtr(TBranch **ptr) { fBranchPtr = ptr; }
   virtual void        SetLookedUp(Bool_t y = kTRUE);
   virtual void        SetNumberEntries(Long64_t n) {fEntries=n;}
   virtual void        SetPacketSize(Int_t size = 100);
   virtual void        SetStatus(Int_t status) {fStatus = status;}

   ClassDef(TChainElement,2);  //A chain element
};

#endif

 TChainElement.h:1
 TChainElement.h:2
 TChainElement.h:3
 TChainElement.h:4
 TChainElement.h:5
 TChainElement.h:6
 TChainElement.h:7
 TChainElement.h:8
 TChainElement.h:9
 TChainElement.h:10
 TChainElement.h:11
 TChainElement.h:12
 TChainElement.h:13
 TChainElement.h:14
 TChainElement.h:15
 TChainElement.h:16
 TChainElement.h:17
 TChainElement.h:18
 TChainElement.h:19
 TChainElement.h:20
 TChainElement.h:21
 TChainElement.h:22
 TChainElement.h:23
 TChainElement.h:24
 TChainElement.h:25
 TChainElement.h:26
 TChainElement.h:27
 TChainElement.h:28
 TChainElement.h:29
 TChainElement.h:30
 TChainElement.h:31
 TChainElement.h:32
 TChainElement.h:33
 TChainElement.h:34
 TChainElement.h:35
 TChainElement.h:36
 TChainElement.h:37
 TChainElement.h:38
 TChainElement.h:39
 TChainElement.h:40
 TChainElement.h:41
 TChainElement.h:42
 TChainElement.h:43
 TChainElement.h:44
 TChainElement.h:45
 TChainElement.h:46
 TChainElement.h:47
 TChainElement.h:48
 TChainElement.h:49
 TChainElement.h:50
 TChainElement.h:51
 TChainElement.h:52
 TChainElement.h:53
 TChainElement.h:54
 TChainElement.h:55
 TChainElement.h:56
 TChainElement.h:57
 TChainElement.h:58
 TChainElement.h:59
 TChainElement.h:60
 TChainElement.h:61
 TChainElement.h:62
 TChainElement.h:63
 TChainElement.h:64
 TChainElement.h:65
 TChainElement.h:66
 TChainElement.h:67
 TChainElement.h:68
 TChainElement.h:69
 TChainElement.h:70
 TChainElement.h:71
 TChainElement.h:72
 TChainElement.h:73
 TChainElement.h:74
 TChainElement.h:75
 TChainElement.h:76
 TChainElement.h:77
 TChainElement.h:78
 TChainElement.h:79