48 lines
1.5 KiB
Text
48 lines
1.5 KiB
Text
//$$ controlw.h Control word class
|
|
|
|
#ifndef CONTROL_WORD_LIB
|
|
#define CONTROL_WORD_LIB 0
|
|
|
|
// for organising an int as a series of bits which indicate whether an
|
|
// option is on or off.
|
|
|
|
class ControlWord
|
|
{
|
|
protected:
|
|
int cw; // the control word
|
|
public:
|
|
ControlWord() : cw(0) {} // do nothing
|
|
ControlWord(int i) : cw(i) {} // load an integer
|
|
|
|
// select specific bits (for testing at least one set)
|
|
ControlWord operator*(ControlWord i) const
|
|
{ return ControlWord(cw & i.cw); }
|
|
void operator*=(ControlWord i) { cw &= i.cw; }
|
|
|
|
// set bits
|
|
ControlWord operator+(ControlWord i) const
|
|
{ return ControlWord(cw | i.cw); }
|
|
void operator+=(ControlWord i) { cw |= i.cw; }
|
|
|
|
// reset bits
|
|
ControlWord operator-(ControlWord i) const
|
|
{ return ControlWord(cw - (cw & i.cw)); }
|
|
void operator-=(ControlWord i) { cw -= (cw & i.cw); }
|
|
|
|
// check if all of selected bits set or reset
|
|
bool operator>=(ControlWord i) const { return (cw & i.cw) == i.cw; }
|
|
bool operator<=(ControlWord i) const { return (cw & i.cw) == cw; }
|
|
|
|
// flip selected bits
|
|
ControlWord operator^(ControlWord i) const
|
|
{ return ControlWord(cw ^ i.cw); }
|
|
ControlWord operator~() const { return ControlWord(~cw); }
|
|
|
|
// convert to integer
|
|
int operator+() const { return cw; }
|
|
int operator!() const { return cw==0; }
|
|
FREE_CHECK(ControlWord)
|
|
};
|
|
|
|
|
|
#endif
|