LAMA
|
00001 00033 #ifndef LAMA_EXPRESSION_HPP_ 00034 #define LAMA_EXPRESSION_HPP_ 00035 00039 namespace lama 00040 { 00041 00045 enum ExpressionTypes {Plus, Minus, Times, Divide}; 00046 00062 template<typename T1, typename T2, ExpressionTypes type> 00063 class Expression 00064 { 00065 public: 00066 typedef T1 Arg1Type; 00067 typedef T2 Arg2Type; 00068 typedef Expression ExpressionType; 00069 typedef const ExpressionType ExpressionMemberType; 00070 00071 private: 00072 const ExpressionTypes mExpressionType; 00073 typename Arg1Type::ExpressionMemberType mArg1; 00074 typename Arg2Type::ExpressionMemberType mArg2; 00075 public: 00076 00083 Expression(const Arg1Type& arg1, const Arg2Type& arg2) 00084 : mExpressionType(type), mArg1(arg1), mArg2(arg2) {}; 00085 00089 virtual ~Expression() {}; 00090 00096 inline ExpressionTypes getExpressionType() const 00097 { 00098 return mExpressionType; 00099 }; 00100 00106 inline const Arg1Type& getArg1() const { return mArg1; }; 00107 00113 inline const Arg2Type& getArg2() const { return mArg2; }; 00114 }; 00115 00116 } //namespace lama 00117 00118 00119 #endif // LAMA_EXPRESSION_HPP_