ROOT logo
#ifndef __TMrbModuleRegister_h__
#define __TMrbModuleRegister_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           expconf/inc/TMrbModuleRegister.h
// Purpose:        Define experimental configuration for MARaBOU
// Class:          TMrbModuleRegister   -- base class to describe a set of module registers
// Description:    Class definitions to implement a configuration front-end for MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbModuleRegister.h,v 1.8 2006-06-23 08:48:30 Marabou Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

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
							};
							
//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbModuleRegister
// Purpose:        Define methods for module registers
// Description:    Describes a module register.
// Keywords:	
//////////////////////////////////////////////////////////////////////////////

class TMrbModuleRegister : public TObject {

	public:

		TMrbModuleRegister() {};										// default ctor

		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() {};									// default dtor
	
		Int_t Get(Int_t Channel = -1) const;		 						// get (common) value
		Bool_t Set(Int_t Value);									// set common value
		Bool_t Set(Int_t Channel, Int_t Value); 					// set channel value explicitly

		Bool_t Set(const Char_t * Value);							// set common value
		Bool_t Set(Int_t Channel, const Char_t * Value); 			// set channel value explicitly

		Bool_t SetFromResource(Int_t Value);						// set (common) value from resource database

		inline TMrbModule * Parent() const { return(fParent); };		 	// return addr of parent module
		inline Int_t GetIndex() const { return(fRegDef->GetIndex()); };	// register index
		inline const Char_t * GetName() const { return(fRegDef->GetName()); };	// register name
		inline void Reset() { IsCommon() ? Set(fInitValue) : Set(-1, fInitValue); };	// reset to initial values

		inline Int_t GetNofChannels() const { return(fNofChannels); };	// nyumber of channels

		inline Bool_t IsCommon() const { return(fNofChannels == 0); };	// register is common for all channels
		inline Bool_t IsPerChannel() const { return(fNofChannels > 0); };	// register has values per channel

		inline EMrbRegisterAccess GetAccessMode() const { return(fAccessMode); }; // access mode: rd/wr, rdonly, wronly
		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; };	// has bitwise value
		inline Bool_t IsPatternMode() const { return(fPatternMode); };
		void SetBoolean(Bool_t Flag = kTRUE);	// has boolean value
		inline Bool_t IsBoolean() const { return(fIsBoolean); };
		inline void SetLofBitNames(TMrbLofNamedX * BitNames) { fLofBitNames = BitNames; }; 	// list of bit names
		inline Bool_t HasBitNames() const { return(fLofBitNames != NULL); };		// test if bit names given
		inline TMrbLofNamedX * BitNames() { return(fLofBitNames); };		// list of bit names

		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, ""); };						// print settings

	protected:
		TMrbModule * fParent;						// parent module
		Int_t fNofChannels; 						// number of channels
		TMrbNamedX * fRegDef;						// register name & index

		EMrbRegisterAccess fAccessMode; 			// access mode
		
		Bool_t fPatternMode;						// kTRUE if bitwise value
		Bool_t fIsBoolean;							// kTRUE if value boolean

		TMrbLofNamedX * fLofBitNames;				// list of possible bit values

		Int_t fInitValue;							// init value
		Int_t fLowerLimit;							// lower limit
		Int_t fUpperLimit;							// upper limit
		TArrayI fValues;							// current values

	ClassDef(TMrbModuleRegister, 1) 	// [Config] A base class describing internal module registers
};	

#endif
 TMrbModuleRegister.h:1
 TMrbModuleRegister.h:2
 TMrbModuleRegister.h:3
 TMrbModuleRegister.h:4
 TMrbModuleRegister.h:5
 TMrbModuleRegister.h:6
 TMrbModuleRegister.h:7
 TMrbModuleRegister.h:8
 TMrbModuleRegister.h:9
 TMrbModuleRegister.h:10
 TMrbModuleRegister.h:11
 TMrbModuleRegister.h:12
 TMrbModuleRegister.h:13
 TMrbModuleRegister.h:14
 TMrbModuleRegister.h:15
 TMrbModuleRegister.h:16
 TMrbModuleRegister.h:17
 TMrbModuleRegister.h:18
 TMrbModuleRegister.h:19
 TMrbModuleRegister.h:20
 TMrbModuleRegister.h:21
 TMrbModuleRegister.h:22
 TMrbModuleRegister.h:23
 TMrbModuleRegister.h:24
 TMrbModuleRegister.h:25
 TMrbModuleRegister.h:26
 TMrbModuleRegister.h:27
 TMrbModuleRegister.h:28
 TMrbModuleRegister.h:29
 TMrbModuleRegister.h:30
 TMrbModuleRegister.h:31
 TMrbModuleRegister.h:32
 TMrbModuleRegister.h:33
 TMrbModuleRegister.h:34
 TMrbModuleRegister.h:35
 TMrbModuleRegister.h:36
 TMrbModuleRegister.h:37
 TMrbModuleRegister.h:38
 TMrbModuleRegister.h:39
 TMrbModuleRegister.h:40
 TMrbModuleRegister.h:41
 TMrbModuleRegister.h:42
 TMrbModuleRegister.h:43
 TMrbModuleRegister.h:44
 TMrbModuleRegister.h:45
 TMrbModuleRegister.h:46
 TMrbModuleRegister.h:47
 TMrbModuleRegister.h:48
 TMrbModuleRegister.h:49
 TMrbModuleRegister.h:50
 TMrbModuleRegister.h:51
 TMrbModuleRegister.h:52
 TMrbModuleRegister.h:53
 TMrbModuleRegister.h:54
 TMrbModuleRegister.h:55
 TMrbModuleRegister.h:56
 TMrbModuleRegister.h:57
 TMrbModuleRegister.h:58
 TMrbModuleRegister.h:59
 TMrbModuleRegister.h:60
 TMrbModuleRegister.h:61
 TMrbModuleRegister.h:62
 TMrbModuleRegister.h:63
 TMrbModuleRegister.h:64
 TMrbModuleRegister.h:65
 TMrbModuleRegister.h:66
 TMrbModuleRegister.h:67
 TMrbModuleRegister.h:68
 TMrbModuleRegister.h:69
 TMrbModuleRegister.h:70
 TMrbModuleRegister.h:71
 TMrbModuleRegister.h:72
 TMrbModuleRegister.h:73
 TMrbModuleRegister.h:74
 TMrbModuleRegister.h:75
 TMrbModuleRegister.h:76
 TMrbModuleRegister.h:77
 TMrbModuleRegister.h:78
 TMrbModuleRegister.h:79
 TMrbModuleRegister.h:80
 TMrbModuleRegister.h:81
 TMrbModuleRegister.h:82
 TMrbModuleRegister.h:83
 TMrbModuleRegister.h:84
 TMrbModuleRegister.h:85
 TMrbModuleRegister.h:86
 TMrbModuleRegister.h:87
 TMrbModuleRegister.h:88
 TMrbModuleRegister.h:89
 TMrbModuleRegister.h:90
 TMrbModuleRegister.h:91
 TMrbModuleRegister.h:92
 TMrbModuleRegister.h:93
 TMrbModuleRegister.h:94
 TMrbModuleRegister.h:95
 TMrbModuleRegister.h:96
 TMrbModuleRegister.h:97
 TMrbModuleRegister.h:98
 TMrbModuleRegister.h:99
 TMrbModuleRegister.h:100
 TMrbModuleRegister.h:101
 TMrbModuleRegister.h:102
 TMrbModuleRegister.h:103
 TMrbModuleRegister.h:104
 TMrbModuleRegister.h:105
 TMrbModuleRegister.h:106
 TMrbModuleRegister.h:107
 TMrbModuleRegister.h:108
 TMrbModuleRegister.h:109
 TMrbModuleRegister.h:110
 TMrbModuleRegister.h:111
 TMrbModuleRegister.h:112
 TMrbModuleRegister.h:113
 TMrbModuleRegister.h:114
 TMrbModuleRegister.h:115
 TMrbModuleRegister.h:116