#ifndef __HBITMAN_H__
#define __HBITMAN_H__
#include "TObject.h"
#include "TString.h"
#include <vector>
#include <map>
class HBitMan : public TObject {
protected:
    typedef struct {
	TString name;                        
	Int_t offset;                        
	Int_t width ;                        
	Bool_t sign ;                        
    } word;
    std::vector < word > list;               
    std::map < TString, word> wordmap;       
public:
    HBitMan();
    ~HBitMan();
    
    
    static void   printBits(UInt_t data);
    static void   setBit   (UInt_t &data,Int_t bit);
    static void   unsetBit (UInt_t &data,Int_t bit);
    static Bool_t getBit   (UInt_t &data,Int_t bit);
    static void   setWord  (UInt_t &data,Int_t num,Int_t width, Int_t val,Bool_t sign=kFALSE);
    static void   unsetWord(UInt_t &data,Int_t num,Int_t width);
    Int_t         getWord  (UInt_t &data,Int_t num,Int_t width,Bool_t sign=kFALSE);
    
    
    
    void          createWord(const TString name,Int_t width, Bool_t sign=kFALSE);
    void          init();
    void          setWord  (UInt_t &data,const TString name,Int_t val);
    void          unsetWord(UInt_t &data,const TString name);
    Int_t         getWord  (UInt_t &data,const TString name);
    
    ClassDef(HBitMan,0)
};
#endif //__HBITMAN_H__