#ifndef ROOT_TChainElement
#define ROOT_TChainElement

//+SEQ,CopyRight,T=NOINCLUDE.

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


#ifndef ROOT_TNamed
//*KEEP,TNamed.
#include "TNamed.h"
//*KEND.
#endif

class TChainElement : public TNamed {

protected:
    Int_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
    Text_t       *fPackets;         //Packet descriptor string

public:
        TChainElement();
        TChainElement(const Text_t *filename, const Text_t *title);
        virtual ~TChainElement();
        virtual void     CreatePackets();
        virtual void    *GetBaddress() {return fBaddress;}
        virtual Text_t  *GetPackets() {return fPackets;}
        virtual Int_t    GetPacketSize() {return fPacketSize;}
        virtual Int_t    GetStatus() {return fStatus;}
        virtual void     SetBaddress(void *add) {fBaddress = add;}
        virtual void     SetNumberEntries(Int_t n) {fEntries=n;}
        virtual void     SetPacketSize(Int_t size = 100);
        virtual void     SetStatus(Int_t status) {fStatus = status;}

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

#endif