#ifndef HSUDummyRec_H
#define HSUDummyRec_H
#include "hreconstructor.h"
#include "haddef.h"
#include "TList.h"
#include "TFile.h"
class HCategory;
class HIterator;
class TFile;
class HSUDummyRec : public HReconstructor
{
public:
                        HSUDummyRec(Bool_t bVerbose = kTRUE);
                        HSUDummyRec(const Char_t *pOutFileName,
                                            Bool_t bVerbose = kTRUE);
                        HSUDummyRec(const Text_t name[],const Text_t title[],
                                    Bool_t bVerbose = kTRUE);
                        HSUDummyRec(const Char_t *pOutFileName,
                                    const Text_t name[],const Text_t title[],
                                    Bool_t bVerbose = kTRUE);
                       ~HSUDummyRec(void);
    
    void                setVerbose(Bool_t b = kTRUE)      { bVerbose = b;      }
    Bool_t              getVerbose(void) const            { return bVerbose;   }
    
    static HCategory*   getCategory(Cat_t cat, Bool_t bRaport = kTRUE);
    static HCategory*   getCategory(const Char_t* pName, Bool_t bRaport = kTRUE);
    HIterator*          getIterator(Cat_t cat, Bool_t bDelete = kTRUE);
    HIterator*          getIterator(const Char_t* pName, Bool_t bDelete = kTRUE);
    
    void                addObjectToWrite(TObject *pObj, Bool_t bDelete = kTRUE);
    Bool_t              removeObject(TObject *pObj);
    Bool_t              removeIterator(HIterator *pI);
    
    Int_t               writeObjects(TFile *pFile);
    Int_t               writeObjects(const Char_t *pFileName,
                                Bool_t bRecreate = kTRUE);
    
    TFile*              getOutFile(void) const          { return pOutFile;     }
    Bool_t              setOutFile(TFile *pFile, Bool_t bCloseOld = kFALSE);
    TFile*              openOutFile(const Char_t *pName = NULL,
                                                Bool_t bRecr = kTRUE);
    Bool_t              writeAndCloseOutFile(void);
    
    const TString&      getOutFileName(void) const      { return sOutFileName; }
    void                setOutFileName(const Char_t *pName)
                                                        { sOutFileName = pName;}
    
    virtual void        Print(Option_t* option) const   { print();             }
    virtual void        print(void) const;
    
    virtual Int_t       execute(void)                   { return 0;            }
    virtual Bool_t      init(void)                      { return kTRUE;        }
    virtual Bool_t      finalize(void)                  { return kTRUE;        }
    virtual Bool_t      reinit(void)                    { return kTRUE;        }
    
    Bool_t              getInitOk(void)                 { return bInitOk;      }
    void                setInitOk(Bool_t b = kTRUE)     { bInitOk = b;         }
    
    void                setEvents(Int_t i)              { iEvents = i;         }
    void                incEvents(void)                 { ++iEvents;           }
    Int_t               getEvents(void) const           { return iEvents;      }
    void                setWriteEvents(Bool_t b = kTRUE){ bWriteEvents = b;    }
    Bool_t              getWriteEvents(void) const      { return bWriteEvents; }
    
protected:
    TList               lToDelete;          
    TList               lToWrite;           
    Bool_t              bVerbose;           
    Bool_t              bInitOk;            
    TFile              *pOutFile;           
    TString             sOutFileName;       
    Int_t               iEvents;            
    Bool_t              bWriteEvents;       
    
    void                setDefault(void);
    
    ClassDef(HSUDummyRec, 0)  
};
class HSUIteratorObject : public TObject
{
public:
                HSUIteratorObject(void)          : pIter(NULL)  {}
                HSUIteratorObject(HIterator *pI) : pIter(pI)    {}
               ~HSUIteratorObject(void);
    
    HIterator*  get(void) const             { return pIter; }
    void        set(HIterator *pI)          { pIter = pI;   }
public:
    HIterator *pIter;
    
    ClassDef(HSUIteratorObject, 0)  
};
#endif //HSUDummyRec_H