00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #if !defined(VARIABLES_H)
00023 #define VARIABLES_H
00024
00025 #include "Ingredients.h"
00026
00027 #include "Root.h"
00028 #include "BaseClasses.h"
00029 #include "BaseActions.h"
00030
00031 class MHVariable : public MHIngredient
00032 {
00033 public:
00034 MHVariable() {}
00035 virtual ~MHVariable() {}
00036
00037
00038 virtual void Activation(MHEngine *engine);
00039 };
00040
00041 class MHBooleanVar : public MHVariable
00042 {
00043 public:
00044 MHBooleanVar(): m_fOriginalValue(false), m_fValue(false) {}
00045 virtual const char *ClassName() { return "BooleanVariable"; }
00046 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00047 virtual void PrintMe(FILE *fd, int nTabs) const;
00048 virtual void Prepare() { m_fValue = m_fOriginalValue; }
00049
00050
00051 virtual void Preparation(MHEngine *engine);
00052
00053
00054 virtual void TestVariable(int nOp, const MHUnion &parm, MHEngine *engine);
00055 virtual void GetVariableValue(MHUnion &value, MHEngine *);
00056 virtual void SetVariableValue(const MHUnion &value);
00057
00058 protected:
00059 bool m_fOriginalValue, m_fValue;
00060 };
00061
00062 class MHIntegerVar : public MHVariable
00063 {
00064 public:
00065 MHIntegerVar(): m_nOriginalValue(0), m_nValue(0) {}
00066 virtual const char *ClassName() { return "IntegerVariable"; }
00067 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00068 virtual void PrintMe(FILE *fd, int nTabs) const;
00069 virtual void Prepare() { m_nValue = m_nOriginalValue; }
00070
00071
00072 virtual void Preparation(MHEngine *engine);
00073
00074
00075 virtual void TestVariable(int nOp, const MHUnion &parmm, MHEngine *engine);
00076 virtual void GetVariableValue(MHUnion &value, MHEngine *);
00077 virtual void SetVariableValue(const MHUnion &value);
00078 protected:
00079 int m_nOriginalValue, m_nValue;
00080 };
00081
00082 class MHOctetStrVar : public MHVariable
00083 {
00084 public:
00085 MHOctetStrVar() {}
00086 virtual const char *ClassName() { return "OctetStringVariable"; }
00087 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00088 virtual void PrintMe(FILE *fd, int nTabs) const;
00089 virtual void Prepare() { m_Value.Copy(m_OriginalValue); }
00090
00091
00092 virtual void Preparation(MHEngine *engine);
00093
00094
00095 virtual void TestVariable(int nOp, const MHUnion &parm, MHEngine *engine);
00096 virtual void GetVariableValue(MHUnion &value, MHEngine *);
00097 virtual void SetVariableValue(const MHUnion &value);
00098 protected:
00099 MHOctetString m_OriginalValue, m_Value;
00100 };
00101
00102 class MHObjectRefVar : public MHVariable
00103 {
00104 public:
00105 MHObjectRefVar() {}
00106 virtual const char *ClassName() { return "ObjectRefVariable"; }
00107 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00108 virtual void PrintMe(FILE *fd, int nTabs) const;
00109 virtual void Prepare() { m_Value.Copy(m_OriginalValue); }
00110
00111
00112 virtual void Preparation(MHEngine *engine);
00113
00114
00115 virtual void TestVariable(int nOp, const MHUnion &parm, MHEngine *engine);
00116 virtual void GetVariableValue(MHUnion &value, MHEngine *);
00117 virtual void SetVariableValue(const MHUnion &value);
00118 protected:
00119 MHObjectRef m_OriginalValue, m_Value;
00120 };
00121
00122 class MHContentRefVar : public MHVariable
00123 {
00124 public:
00125 MHContentRefVar() {}
00126 virtual const char *ClassName() { return "ContentRefVariable"; }
00127 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00128 virtual void PrintMe(FILE *fd, int nTabs) const;
00129 virtual void Prepare() { m_Value.Copy(m_OriginalValue); }
00130
00131
00132 virtual void Preparation(MHEngine *engine);
00133
00134
00135 virtual void TestVariable(int nOp, const MHUnion &parm, MHEngine *engine);
00136 virtual void GetVariableValue(MHUnion &value, MHEngine *);
00137 virtual void SetVariableValue(const MHUnion &value);
00138 protected:
00139 MHContentRef m_OriginalValue, m_Value;
00140 };
00141
00142
00143
00144 class MHSetVariable: public MHElemAction
00145 {
00146 public:
00147 MHSetVariable():MHElemAction(":SetVariable") {}
00148 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00149 virtual void Perform(MHEngine *engine);
00150 protected:
00151 virtual void PrintArgs(FILE *fd, int ) const { m_NewValue.PrintMe(fd, 0); }
00152 MHParameter m_NewValue;
00153 };
00154
00155
00156 class MHTestVariable: public MHElemAction
00157 {
00158 public:
00159 MHTestVariable(): MHElemAction(":TestVariable"), m_nOperator(0) {}
00160 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00161 virtual void Perform(MHEngine *engine);
00162 protected:
00163 virtual void PrintArgs(FILE *fd, int nTabs) const;
00164 int m_nOperator;
00165 MHParameter m_Comparison;
00166 };
00167
00168
00169
00170
00171 class MHIntegerAction: public MHElemAction
00172 {
00173 public:
00174 MHIntegerAction(const char *name): MHElemAction(name) {}
00175 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00176 virtual void Perform(MHEngine *engine);
00177 protected:
00178 virtual void PrintArgs(FILE *fd, int ) const { m_Operand.PrintMe(fd, 0); }
00179 virtual int DoOp(int arg1, int arg2) = 0;
00180 MHGenericInteger m_Operand;
00181 };
00182
00183 class MHAdd: public MHIntegerAction {
00184 public:
00185 MHAdd(): MHIntegerAction(":Add") {}
00186 protected:
00187 virtual int DoOp(int arg1, int arg2) { return arg1+arg2; }
00188 };
00189
00190 class MHSubtract: public MHIntegerAction {
00191 public:
00192 MHSubtract(): MHIntegerAction(":Subtract") {}
00193 protected:
00194 virtual int DoOp(int arg1, int arg2) { return arg1-arg2; }
00195 };
00196
00197 class MHMultiply: public MHIntegerAction {
00198 public:
00199 MHMultiply(): MHIntegerAction(":Multiply") {}
00200 protected:
00201 virtual int DoOp(int arg1, int arg2) { return arg1*arg2; }
00202 };
00203
00204 class MHDivide: public MHIntegerAction {
00205 public:
00206 MHDivide(): MHIntegerAction(":Divide") {}
00207 protected:
00208 virtual int DoOp(int arg1, int arg2) { return arg1/arg2; }
00209 };
00210
00211 class MHModulo: public MHIntegerAction {
00212 public:
00213 MHModulo(): MHIntegerAction(":Modulo") {}
00214 protected:
00215 virtual int DoOp(int arg1, int arg2) { return arg1%arg2; }
00216 };
00217
00218
00219 class MHAppend: public MHElemAction
00220 {
00221 public:
00222 MHAppend(): MHElemAction(":Append") {}
00223 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00224 virtual void Perform(MHEngine *engine);
00225 protected:
00226 virtual void PrintArgs(FILE *fd, int ) const { m_Operand.PrintMe(fd, 0); }
00227 MHGenericOctetString m_Operand;
00228 };
00229
00230 #endif