Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/Xabsl2/Xabsl2Engine/Xabsl2BooleanExpression.h

Go to the documentation of this file.
00001 /** 
00002 * @file Xabsl2BooleanExpression.h
00003 *
00004 * Definition of Xabsl2BooleanExpression and derivates
00005 * 
00006 * @author Martin Lötzsch
00007 */
00008 
00009 #ifndef __Xabsl2BooleanExpression_h_
00010 #define __Xabsl2BooleanExpression_h_
00011 
00012 #include "Xabsl2DecimalExpression.h"
00013 
00014 // class prototype needed for the subsequentOption paramer of some classes
00015 class Xabsl2Option;
00016 
00017 /** 
00018 * @class Xabsl2BooleanExpression
00019 * 
00020 * Base class for all boolean expressions inside an option graph.
00021 *
00022 * @author Martin Lötzsch
00023 */
00024 class Xabsl2BooleanExpression
00025 {
00026 public:
00027   /** Evaluates the boolean expression. */
00028   virtual bool getValue() = 0;
00029   
00030   /**
00031   * Creates a boolean expression depending on the input.
00032   * @param input An input source for the intermediate code. It must be opened and read until 
00033   *              A position where a boolean expression starts.
00034   * @param subsequentOption The subsequent option of the state. 0 if the subsequent behavior is a basic behavior
00035   * @param errorHandler A reference to a Xabsl2ErrorHandler instance
00036   * @param parameters The parameters of the option
00037   * @param symbols All available symbols
00038   * @param timeOfOptionExecution The time how long the option is already active
00039   * @param timeOfStateExecution The time how long the state is already active
00040   */
00041   static Xabsl2BooleanExpression* create(Xabsl2InputSource& input, 
00042     Xabsl2Option* subsequentOption,
00043     Xabsl2ErrorHandler& errorHandler,
00044     Xabsl2Array<double>& parameters,
00045     Xabsl2Symbols& symbols,
00046     unsigned long& timeOfOptionExecution,
00047     unsigned long& timeOfStateExecution);
00048   
00049   /** Destructor */
00050   virtual ~Xabsl2BooleanExpression() = 0;
00051 private:
00052 /** 
00053 * Creates a boolean expression depending on the input. 
00054 * Used by the create() function to create boolean operands.
00055 * @param operand The expression to be created
00056 * @param input An input source for the intermediate code. It must be opened and read until 
00057 *              A position where a boolean operand starts.
00058 * @param subsequentOption The subsequent option of the state. 0 if the subsequent behavior is a basic behavior
00059 * @param errorHandler A reference to a Xabsl2ErrorHandler instance
00060 * @param parameters The parameters of the option
00061 * @param symbols All available symbols
00062 * @param timeOfOptionExecution The time how long the option is already active
00063 * @param timeOfStateExecution The time how long the state is already active
00064 * @return If the creation was successful
00065   */
00066   static bool createOperand(
00067     Xabsl2BooleanExpression*& operand,
00068     Xabsl2InputSource& input, 
00069     Xabsl2Option* subsequentOption,
00070     Xabsl2ErrorHandler& errorHandler,
00071     Xabsl2Array<double>& parameters,
00072     Xabsl2Symbols& symbols,
00073     unsigned long& timeOfOptionExecution,
00074     unsigned long& timeOfStateExecution);
00075 };
00076 
00077 /** 
00078 * @class Xabsl2AndOperator
00079 *
00080 * Represents an 'and' element of the option graph 
00081 *
00082 * @author Martin Lötzsch
00083 */
00084 class Xabsl2AndOperator : public Xabsl2BooleanExpression
00085 {
00086 public:
00087   /** Constructor */
00088   Xabsl2AndOperator();
00089   
00090   /** Destructor. Deletes the two operands */
00091   ~Xabsl2AndOperator();
00092   
00093   /** Evaluates the boolean expression.*/
00094   virtual bool getValue();
00095   
00096   /** Adds an operand to the operands array */
00097   void addOperand(Xabsl2BooleanExpression* operand);
00098 
00099 private:
00100   /** the 2+n operands of the operator */
00101   Xabsl2Array<Xabsl2BooleanExpression*> operands;
00102 };
00103 
00104 /** 
00105 * @class Xabsl2OrOperator
00106 *
00107 * Represents an 'or' element of the option graph 
00108 *
00109 * @author Martin Lötzsch
00110 */
00111 class Xabsl2OrOperator : public Xabsl2BooleanExpression
00112 {
00113 public:
00114   /** Constructor */
00115   Xabsl2OrOperator();
00116   
00117   /** Destructor. Deletes the two operands */
00118   ~Xabsl2OrOperator();
00119   
00120   /** Evaluates the boolean expression. */
00121   virtual bool getValue();
00122   
00123   /** Adds an operand to the operands array */
00124   void addOperand(Xabsl2BooleanExpression* operand);
00125 
00126 private:
00127   /** the 2+n operands of the operator */
00128   Xabsl2Array<Xabsl2BooleanExpression*> operands;
00129 };
00130 
00131 
00132 /** 
00133 * @class Xabsl2NotOperator
00134 *
00135 * Represents an 'not' element of the option graph 
00136 *
00137 * @author Martin Lötzsch
00138 */
00139 class Xabsl2NotOperator : public Xabsl2BooleanExpression
00140 {
00141 public:
00142 /** 
00143 * Constructor. Creates the element.
00144 * @param operand1 A boolean expression
00145   */
00146   Xabsl2NotOperator(Xabsl2BooleanExpression* operand1);
00147   
00148   /** Destructor. Deletes the operand */
00149   ~Xabsl2NotOperator();
00150   
00151   /** Evaluates the boolean expression. */
00152   virtual bool getValue();
00153   
00154 private:
00155   /** operand 1 */
00156   Xabsl2BooleanExpression* operand1;
00157 };
00158 
00159 /** 
00160 * @class Xabsl2BooleanInputSymbolRef
00161 *
00162 * Represents an 'boolean-input-symbol-ref' element of the option graph 
00163 *
00164 * @author Martin Lötzsch
00165 */
00166 class Xabsl2BooleanInputSymbolRef : public Xabsl2BooleanExpression
00167 {
00168 public:
00169 /** 
00170 * Constructor. Creates the element.
00171 * @param input An input source for the intermediate code. It must be opened and read until 
00172 *              A position where the symbol starts.
00173 * @param errorHandler A reference to a Xabsl2ErrorHandler instance
00174 * @param symbols All available symbols
00175   */
00176   Xabsl2BooleanInputSymbolRef(Xabsl2InputSource& input,
00177     Xabsl2ErrorHandler& errorHandler, Xabsl2Symbols& symbols);
00178   
00179   /** Evaluates the boolean expression. */
00180   virtual bool getValue();
00181   
00182 private:
00183   /** The referenced symbol */
00184   Xabsl2BooleanInputSymbol* symbol;
00185 };
00186 
00187 /** 
00188 * @class Xabsl2subsequentOptionReachedTargetStateCondition
00189 *
00190 * Represents an 'subsequent-option-reached-target-state' element of the option graph
00191 *
00192 * @author Martin Lötzsch
00193 */
00194 class Xabsl2subsequentOptionReachedTargetStateCondition : public Xabsl2BooleanExpression
00195 {
00196 public:
00197 /** 
00198 * Constructor. Creates the element.
00199 * @param subsequentOption The subsequent option of the state. 0 if the subsequent behavior is a basic behavior
00200 * @param errorHandler A reference to a Xabsl2ErrorHandler instance
00201   */
00202   Xabsl2subsequentOptionReachedTargetStateCondition(
00203     Xabsl2Option* subsequentOption,
00204     Xabsl2ErrorHandler& errorHandler);
00205   
00206   /** Evaluates the boolean expression. */
00207   virtual bool getValue();
00208   
00209 private:
00210   /** The subsequent option of that state */
00211   Xabsl2Option* subsequentOption;
00212 };
00213 
00214 /** 
00215 * @class Xabsl2EnumeratedInputSymbolComparison
00216 *
00217 * Represents an 'enumerated-input-symbol-comparison' element of the option graph 
00218 *
00219 * @author Martin Lötzsch
00220 */
00221 class Xabsl2EnumeratedInputSymbolComparison : public Xabsl2BooleanExpression
00222 {
00223 public:
00224 /** 
00225 * Constructor. Creates the element.
00226 * @param input An input source for the intermediate code. It must be opened and read until 
00227 *              A position where the element starts.
00228 * @param errorHandler A reference to a Xabsl2ErrorHandler instance
00229 * @param symbols All available symbols
00230   */
00231   Xabsl2EnumeratedInputSymbolComparison(Xabsl2InputSource& input,
00232     Xabsl2ErrorHandler& errorHandler, Xabsl2Symbols& symbols);
00233   
00234   /** Evaluates the boolean expression. */
00235   virtual bool getValue();
00236   
00237 private:
00238   /** The referenced symbol */
00239   Xabsl2EnumeratedInputSymbol* symbol;
00240   
00241   /** The value to compare */
00242   int value;
00243 };
00244 
00245 /**
00246 * @class Xabsl2RelationalAndEqualityOperator
00247 *
00248 * Base class for the operators <, <=, >, >=, == and !=
00249 * 
00250 * @author Martin Lötzsch
00251 */
00252 class Xabsl2RelationalAndEqualityOperator : public Xabsl2BooleanExpression
00253 {
00254 public:
00255 /** 
00256 * Creates the element.
00257 * @param operand1 A decimal expression
00258 * @param operand2 A decimal expression
00259   */
00260   void create(Xabsl2DecimalExpression* operand1, 
00261     Xabsl2DecimalExpression* operand2);
00262   
00263   /** Destructor. Deletes the two operands */
00264   ~Xabsl2RelationalAndEqualityOperator();
00265   
00266   /** Evaluates the boolean expression.*/
00267   virtual bool getValue() = 0;
00268   
00269 protected:
00270   /** operand 1 */
00271   Xabsl2DecimalExpression* operand1;
00272   
00273   /** operand 2 */
00274   Xabsl2DecimalExpression* operand2;
00275 };
00276 
00277 /** 
00278 * @class Xabsl2EqualToOperator
00279 *
00280 * Represents an 'equal-to' element of the option graph 
00281 *
00282 * @author Martin Lötzsch
00283 */
00284 class Xabsl2EqualToOperator : public Xabsl2RelationalAndEqualityOperator
00285 {
00286 public:
00287   /** Evaluates the boolean expression.*/
00288   virtual bool getValue();
00289 };
00290 
00291 /** 
00292 * @class Xabsl2NotEqualToOperator
00293 *
00294 * Represents an 'not-equal-to' element of the option graph 
00295 *
00296 * @author Martin Lötzsch
00297 */
00298 class Xabsl2NotEqualToOperator : public Xabsl2RelationalAndEqualityOperator
00299 {
00300 public:
00301   /** Evaluates the boolean expression.*/
00302   virtual bool getValue();
00303 };
00304 
00305 /** 
00306 * @class Xabsl2LessThanOperator
00307 *
00308 * Represents an 'less-than' element of the option graph 
00309 *
00310 * @author Martin Lötzsch
00311 */
00312 class Xabsl2LessThanOperator : public Xabsl2RelationalAndEqualityOperator
00313 {
00314 public:
00315   /** Evaluates the boolean expression.*/
00316   virtual bool getValue();
00317 };
00318 
00319 /** 
00320 * @class Xabsl2LessThanOrEqualToOperator
00321 *
00322 * Represents an 'less-than-or-equal-to' element of the option graph 
00323 *
00324 * @author Martin Lötzsch
00325 */
00326 class Xabsl2LessThanOrEqualToOperator : public Xabsl2RelationalAndEqualityOperator
00327 {
00328 public:
00329   /** Evaluates the boolean expression.*/
00330   virtual bool getValue();
00331 };
00332 
00333 /** 
00334 * @class Xabsl2GreaterThanOperator
00335 *
00336 * Represents an 'greater-than' element of the option graph 
00337 *
00338 * @author Martin Lötzsch
00339 */
00340 class Xabsl2GreaterThanOperator : public Xabsl2RelationalAndEqualityOperator
00341 {
00342 public:
00343   /** Evaluates the boolean expression.*/
00344   virtual bool getValue();
00345 };
00346 
00347 /** 
00348 * @class Xabsl2GreaterThanOrEqualToOperator
00349 *
00350 * Represents an 'greater-than-or-equal-to' element of the option graph 
00351 *
00352 * @author Martin Lötzsch
00353 */
00354 class Xabsl2GreaterThanOrEqualToOperator : public Xabsl2RelationalAndEqualityOperator
00355 {
00356 public:
00357   /** Evaluates the boolean expression.*/
00358   virtual bool getValue();
00359 };
00360 
00361 
00362 #endif //__Xabsl2BooleanExpression_h_

Generated on Mon Mar 20 22:00:10 2006 for GT2005 by doxygen 1.3.6