#ifndef __TMrbVar_h__
#define __TMrbVar_h__
#include "TNamed.h"
#include "TArrayI.h"
#include "TArrayD.h"
#include "TString.h"
#include "TSystem.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbVarWdwCommon.h"
class TMrbVariable: public TNamed {
public:
TMrbVariable();
~TMrbVariable();
inline UInt_t GetType() const { return(GetUniqueID() & kVarOrWindow); };
inline UInt_t GetStatus() const { return(GetUniqueID() & kStatus); };
inline Bool_t IsArray() const { return((GetUniqueID() & kVarIsArray) != 0); };
inline Bool_t HasInitValues() const { return((GetUniqueID() & kHasInitValues) != 0); };
inline Bool_t IsRangeChecked() const { return((GetUniqueID() & kIsRangeChecked) != 0); };
inline Int_t GetSize() const { return(fSize); };
void Initialize();
virtual void Print(Option_t * Option = "") const;
void SetRange(Bool_t Flag = kTRUE) {
UInt_t varType = GetUniqueID();
if (Flag) varType |= kIsRangeChecked; else varType &= ~kIsRangeChecked;
SetUniqueID(varType);
};
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
void SetInitialType(UInt_t VarType);
protected:
Int_t fSize;
ClassDef(TMrbVariable, 1)
};
class TMrbVarI: public TMrbVariable {
public:
TMrbVarI() {};
TMrbVarI(const Char_t * Name, Int_t Value = 0);
~TMrbVarI() {};
inline Int_t Clip(Int_t Value) const {
if (this->IsRangeChecked()) {
if (Value < fLowerRange) return(fLowerRange);
else if (Value > fUpperRange) return(fUpperRange);
else return(Value);
} else return(Value);
};
inline Int_t & operator[](UInt_t) { return(fValue); };
inline void Set(Int_t Value) { fValue = Clip(Value); };
inline void SetInit(Int_t Value) { fInitValue = Clip(Value); };
inline Int_t Get() const { return(fValue); };
inline Bool_t IsEQ(Int_t X) const { return(fValue == X); };
inline Bool_t IsNE(Int_t X) const { return(fValue != X); };
inline Bool_t IsLT(Int_t X) const { return(fValue < X); };
inline Bool_t IsLE(Int_t X) const { return(fValue <= X); };
inline Bool_t IsGT(Int_t X) const { return(fValue > X); };
inline Bool_t IsGE(Int_t X) const { return(fValue >= X); };
inline void Initialize() { fValue = Clip(fInitValue); };
void SetRange(Int_t Xlower, Int_t Xupper) {
SetUniqueID(GetUniqueID() | kIsRangeChecked);
fLowerRange = Xlower;
fUpperRange = Xupper;
};
virtual void Print(Option_t * Option = "") const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
Int_t fValue;
Int_t fInitValue;
Int_t fLowerRange;
Int_t fUpperRange;
ClassDef(TMrbVarI, 1)
};
class TMrbVarF: public TMrbVariable {
public:
TMrbVarF() {};
TMrbVarF(const Char_t * Name, Double_t Value = 0.);
~TMrbVarF() {};
inline Double_t Clip(Double_t Value) const {
if (this->IsRangeChecked()) {
if (Value < fLowerRange) return(fLowerRange);
else if (Value > fUpperRange) return(fUpperRange);
else return(Value);
} else return(Value);
};
inline Double_t & operator[](UInt_t) { return(fValue); };
inline void Set(Double_t Value) { fValue = Clip(Value); };
inline Double_t Get() const { return(fValue); };
inline Bool_t IsEQ(Double_t X) const { return(fValue == X); };
inline Bool_t IsNE(Double_t X) const { return(fValue != X); };
inline Bool_t IsLT(Double_t X) const { return(fValue < X); };
inline Bool_t IsLE(Double_t X) const { return(fValue <= X); };
inline Bool_t IsGT(Double_t X) const { return(fValue > X); };
inline Bool_t IsGE(Double_t X) const { return(fValue >= X); };
inline void Initialize() { fValue = Clip(fInitValue); };
void SetRange(Double_t Xlower, Double_t Xupper) {
SetUniqueID(GetUniqueID() | kIsRangeChecked);
fLowerRange = Xlower;
fUpperRange = Xupper;
};
virtual void Print(Option_t * Option = "") const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
Double_t fValue;
Double_t fInitValue;
Double_t fLowerRange;
Double_t fUpperRange;
ClassDef(TMrbVarF, 1)
};
class TMrbVarS: public TMrbVariable {
public:
TMrbVarS() {};
TMrbVarS(const Char_t * Name, const Char_t * Value = "");
~TMrbVarS() {};
inline void Set(const Char_t * Value) { fValue = Value; };
inline const Char_t * Get() const { return(fValue.Data()); };
inline Bool_t IsEQ(Char_t * X) const { return(fValue.CompareTo(X) == 0); };
inline Bool_t IsNE(Char_t * X) const { return(fValue.CompareTo(X) != 0); };
inline Bool_t IsLT(Char_t * X) const { return(fValue.CompareTo(X) < 0); };
inline Bool_t IsLE(Char_t * X) const { return(fValue.CompareTo(X) <= 0); };
inline Bool_t IsGT(Char_t * X) const { return(fValue.CompareTo(X) > 0); };
inline Bool_t IsGE(Char_t * X) const { return(fValue.CompareTo(X) >= 0); };
inline void Initialize() { fValue = fInitValue; };
virtual void Print(Option_t * Option = "") const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TString fValue;
TString fInitValue;
ClassDef(TMrbVarS, 1)
};
class TMrbVarB: public TMrbVariable {
public:
TMrbVarB() {};
TMrbVarB(const Char_t * Name, Bool_t Value = kFALSE);
~TMrbVarB() {};
inline void Set(Bool_t Value) { fValue = Value; };
inline Bool_t Get() const { return(fValue); };
inline Bool_t IsTrue() const { return(fValue); };
inline void Initialize() { fValue = fInitValue; };
virtual void Print(Option_t * Option = "") const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
Bool_t fValue;
Bool_t fInitValue;
ClassDef(TMrbVarB, 1)
};
class TMrbVarArrayI: public TMrbVariable {
public:
TMrbVarArrayI() {};
TMrbVarArrayI(const Char_t * Name, Int_t Size, Int_t Value = 0);
~TMrbVarArrayI() {};
inline Int_t Clip(Int_t Value) const {
if (this->IsRangeChecked()) {
if (Value < fLowerRange) return(fLowerRange);
else if (Value > fUpperRange) return(fUpperRange);
else return(Value);
} else return(Value);
};
inline Int_t & operator[](UInt_t i) { return(fValue[i]); };
inline void Set(UInt_t Index, Int_t Value) { fValue[Index] = Clip(Value); };
inline void SetInit(UInt_t Index, Int_t Value) { fInitValue[Index] = Clip(Value); };
inline Int_t Get(UInt_t Index) const { return(fValue[Index]); };
inline Bool_t IsEQ(UInt_t Index, Int_t X) const { return(fValue[Index] == X); };
inline Bool_t IsNE(UInt_t Index, Int_t X) const { return(fValue[Index] != X); };
inline Bool_t IsLT(UInt_t Index, Int_t X) const { return(fValue[Index] < X); };
inline Bool_t IsLE(UInt_t Index, Int_t X) const { return(fValue[Index] <= X); };
inline Bool_t IsGT(UInt_t Index, Int_t X) const { return(fValue[Index] > X); };
inline Bool_t IsGE(UInt_t Index, Int_t X) const { return(fValue[Index] >= X); };
void SetRange(Int_t Xlower, Int_t Xupper) {
SetUniqueID(GetUniqueID() | kIsRangeChecked);
fLowerRange = Xlower;
fUpperRange = Xupper;
};
void Initialize() { for (Int_t i = 0; i < fSize; i++) fValue[i] = fInitValue[i]; };
virtual void Print(Option_t * Option = "") const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TArrayI fValue;
TArrayI fInitValue;
Int_t fLowerRange;
Int_t fUpperRange;
ClassDef(TMrbVarArrayI, 1)
};
class TMrbVarArrayF: public TMrbVariable {
public:
TMrbVarArrayF() {};
TMrbVarArrayF(const Char_t * Name, Int_t Size, Double_t Value = 0.);
~TMrbVarArrayF() {};
inline Double_t Clip(Double_t Value) const {
if (this->IsRangeChecked()) {
if (Value < fLowerRange) return(fLowerRange);
else if (Value > fUpperRange) return(fUpperRange);
else return(Value);
} else return(Value);
};
inline Double_t & operator[](UInt_t i) { return(fValue[i]); };
inline void Set(UInt_t Index, Double_t Value) { fValue[Index] = Clip(Value); };
inline void SetInit(UInt_t Index, Double_t Value) { fInitValue[Index] = Clip(Value); };
inline Double_t Get(UInt_t Index) const { return(fValue[Index]); };
inline Bool_t IsEQ(UInt_t Index, Double_t X) const { return(fValue[Index] == X); };
inline Bool_t IsNE(UInt_t Index, Double_t X) const { return(fValue[Index] != X); };
inline Bool_t IsLT(UInt_t Index, Double_t X) const { return(fValue[Index] < X); };
inline Bool_t IsLE(UInt_t Index, Double_t X) const { return(fValue[Index] <= X); };
inline Bool_t IsGT(UInt_t Index, Double_t X) const { return(fValue[Index] > X); };
inline Bool_t IsGE(UInt_t Index, Double_t X) const { return(fValue[Index] >= X); };
void SetRange(Double_t Xlower, Double_t Xupper) {
SetUniqueID(GetUniqueID() | kIsRangeChecked);
fLowerRange = Xlower;
fUpperRange = Xupper;
};
void Initialize() { for (Int_t i = 0; i < fSize; i++) fValue[i] = fInitValue[i]; };
virtual void Print(Option_t * Option = "") const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TArrayD fValue;
TArrayD fInitValue;
Double_t fLowerRange;
Double_t fUpperRange;
ClassDef(TMrbVarArrayF, 1)
};
#endif