#ifndef __TMrbModuleRegister_h__
#define __TMrbModuleRegister_h__
namespace std {} using namespace std;
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>
#include "Rtypes.h"
#include "TSystem.h"
#include "TObject.h"
#include "TArrayI.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbModule.h"
enum EMrbRegisterAccess { kMrbRegAccessReadWrite,
kMrbRegAccessReadOnly,
kMrbRegAccessWriteOnly
};
class TMrbModuleRegister : public TObject {
public:
TMrbModuleRegister() {};
TMrbModuleRegister(TMrbModule * Module, Int_t NofChannels, TMrbNamedX * RegDef,
Int_t InitValue = 0, Int_t LowerLimit = 0, Int_t UpperLimit = -1,
TMrbLofNamedX * BitNames = NULL, Bool_t PatternMode = kFALSE,
EMrbRegisterAccess AccessMode = kMrbRegAccessReadWrite);
~TMrbModuleRegister() {};
Int_t Get(Int_t Channel = -1) const;
Bool_t Set(Int_t Value);
Bool_t Set(Int_t Channel, Int_t Value);
Bool_t Set(const Char_t * Value);
Bool_t Set(Int_t Channel, const Char_t * Value);
Bool_t SetFromResource(Int_t Value);
inline TMrbModule * Parent() const { return(fParent); };
inline Int_t GetIndex() const { return(fRegDef->GetIndex()); };
inline const Char_t * GetName() const { return(fRegDef->GetName()); };
inline void Reset() { IsCommon() ? Set(fInitValue) : Set(-1, fInitValue); };
inline Int_t GetNofChannels() const { return(fNofChannels); };
inline Bool_t IsCommon() const { return(fNofChannels == 0); };
inline Bool_t IsPerChannel() const { return(fNofChannels > 0); };
inline EMrbRegisterAccess GetAccessMode() const { return(fAccessMode); };
inline Bool_t IsReadOnly() const { return(fAccessMode == kMrbRegAccessReadOnly); };
inline Bool_t IsWriteOnly() const { return(fAccessMode == kMrbRegAccessWriteOnly); };
inline void SetPatternMode(Bool_t Flag = kTRUE) { if (fLofBitNames) fPatternMode = Flag; };
inline Bool_t IsPatternMode() const { return(fPatternMode); };
void SetBoolean(Bool_t Flag = kTRUE);
inline Bool_t IsBoolean() const { return(fIsBoolean); };
inline void SetLofBitNames(TMrbLofNamedX * BitNames) { fLofBitNames = BitNames; };
inline Bool_t HasBitNames() const { return(fLofBitNames != NULL); };
inline TMrbLofNamedX * BitNames() { return(fLofBitNames); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
void Print(Option_t * Option) const { TObject::Print(Option); }
void Print(ostream & OutStrm, const Char_t * Prefix = "") const;
inline virtual void Print() const { Print(cout, ""); };
protected:
TMrbModule * fParent;
Int_t fNofChannels;
TMrbNamedX * fRegDef;
EMrbRegisterAccess fAccessMode;
Bool_t fPatternMode;
Bool_t fIsBoolean;
TMrbLofNamedX * fLofBitNames;
Int_t fInitValue;
Int_t fLowerLimit;
Int_t fUpperLimit;
TArrayI fValues;
ClassDef(TMrbModuleRegister, 1)
};
#endif