00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _SUB_OPTION_EXPRESSION_HPP_
00021 #define _SUB_OPTION_EXPRESSION_HPP_
00022
00023 #include <Expression.hpp>
00024 #include <StringExpression.hpp>
00025 #include <RealExpression.hpp>
00026
00027 class SubOptionExpression
00028 : public Expression
00029 {
00030 public:
00031 enum SOEType {
00032 stringValue,
00033 realValue,
00034 integerValue
00035 };
00036
00037 protected:
00038 ReferenceCounting<StringExpression> __name;
00039
00040 virtual void setOption(std::string& name) = 0;
00041
00042 private:
00043 SubOptionExpression::SOEType __type;
00044
00045 public:
00046 void evaluate(const std::string& basename)
00047 {
00048 std::string name = basename;
00049 name += "::";
00050 name += (*__name).value();
00051
00052 setOption(name);
00053 }
00054
00055 SubOptionExpression(const SubOptionExpression& soe)
00056 : Expression(soe),
00057 __name(soe.__name),
00058 __type(soe.__type)
00059 {
00060 ;
00061 }
00062
00063 SubOptionExpression(ReferenceCounting<StringExpression> name,
00064 SubOptionExpression::SOEType type)
00065 : Expression(Expression::subOption),
00066 __name(name),
00067 __type(type)
00068 {
00069 ;
00070 }
00071
00072 virtual ~SubOptionExpression()
00073 {
00074 ;
00075 }
00076 };
00077
00078 class SubOptionExpressionString
00079 : public SubOptionExpression
00080 {
00081 private:
00082 ReferenceCounting<StringExpression> __value;
00083
00084 std::ostream& put(std::ostream& os) const
00085 {
00086 os << *__name << "::" << *__value;
00087 return os;
00088 }
00089
00090 void setOption(std::string& name);
00091
00092 public:
00093 void execute()
00094 {
00095 (*__name).execute();
00096 (*__value).execute();
00097 }
00098
00099 SubOptionExpressionString(ReferenceCounting<StringExpression> name,
00100 ReferenceCounting<StringExpression> value)
00101 : SubOptionExpression(name, SubOptionExpression::stringValue),
00102 __value(value)
00103 {
00104 ;
00105 }
00106 };
00107
00108
00109 class SubOptionExpressionReal
00110 : public SubOptionExpression
00111 {
00112 private:
00113 ReferenceCounting<RealExpression> __value;
00114
00115 std::ostream& put(std::ostream& os) const
00116 {
00117 os << *__name << "::" << *__value;
00118 return os;
00119 }
00120
00121 void setOption(std::string& name);
00122
00123 public:
00124 void execute()
00125 {
00126 (*__name).execute();
00127 (*__value).execute();
00128 }
00129
00130 SubOptionExpressionReal(ReferenceCounting<StringExpression> name,
00131 ReferenceCounting<RealExpression> value)
00132 : SubOptionExpression(name, SubOptionExpression::realValue),
00133 __value(value)
00134 {
00135 ;
00136 }
00137 };
00138
00139 #endif // _SUB_OPTION_EXPRESSION_HPP_
00140