00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef LINEAR_EXPRESSION_HPP
00021 #define LINEAR_EXPRESSION_HPP
00022
00023 #include <Expression.hpp>
00024 #include <ReferenceCounting.hpp>
00025
00026 #include <RealExpression.hpp>
00027
00028 #include <FunctionExpression.hpp>
00029 #include <IntegratedOperatorExpression.hpp>
00030
00031 class LinearExpression
00032 : public Expression
00033 {
00034 public:
00035 enum LinearType {
00036 elementary,
00037 elementaryTimesFunction,
00038 elementaryTimesReal,
00039 elementaryTimesFunctionOperator
00040 };
00041
00042 private:
00043 LinearExpression::LinearType __formType;
00044
00045 protected:
00046 ReferenceCounting<IntegratedOperatorExpression> __integrated;
00047
00048 public:
00049 const LinearExpression::LinearType& formType() const
00050 {
00051 return __formType;
00052 }
00053
00054 ConstReferenceCounting<IntegratedOperatorExpression> integrated() const
00055 {
00056 return __integrated;
00057 }
00058
00059 LinearExpression(const LinearExpression::LinearType t,
00060 ReferenceCounting<IntegratedOperatorExpression> i)
00061 : Expression(linearExp),
00062 __formType(t),
00063 __integrated(i)
00064 {
00065 ;
00066 }
00067
00068 LinearExpression(const LinearExpression& LF)
00069 : Expression(LF),
00070 __formType(LF.__formType),
00071 __integrated(LF.__integrated)
00072 {
00073 ;
00074 }
00075
00076 virtual ~LinearExpression()
00077 {
00078 ;
00079 }
00080 };
00081
00082
00083 class LinearExpressionElementary
00084 : public LinearExpression
00085 {
00086 private:
00087
00088 std::ostream& put (std::ostream& os) const
00089 {
00090 os << *__integrated;
00091 return os;
00092 }
00093
00094 public:
00095 void execute()
00096 {
00097 (*__integrated).execute();
00098 }
00099
00100 LinearExpressionElementary(ReferenceCounting<IntegratedOperatorExpression> i)
00101 : LinearExpression(LinearExpression::elementary, i)
00102 {
00103 ;
00104 }
00105
00106 LinearExpressionElementary(const LinearExpressionElementary& LF)
00107 : LinearExpression(LF)
00108 {
00109 ;
00110 }
00111
00112 ~LinearExpressionElementary()
00113 {
00114 ;
00115 }
00116 };
00117
00118
00119 class LinearExpressionElementaryTimesFunction
00120 : public LinearExpression
00121 {
00122 private:
00123 ReferenceCounting<FunctionExpression> __function;
00124
00125
00126 std::ostream& put (std::ostream& os) const
00127 {
00128 os << *__function << '*' << *__integrated;
00129 return os;
00130 }
00131
00132 public:
00133
00134 void execute()
00135 {
00136 (*__integrated).execute();
00137 (*__function).execute();
00138 }
00139
00140 ReferenceCounting<FunctionExpression> function()
00141 {
00142 return __function;
00143 }
00144
00145 LinearExpressionElementaryTimesFunction
00146 (ReferenceCounting<IntegratedOperatorExpression> i,
00147 ReferenceCounting<FunctionExpression> f)
00148 : LinearExpression(LinearExpression::elementaryTimesFunction, i),
00149 __function(f)
00150 {
00151 ;
00152 }
00153
00154 LinearExpressionElementaryTimesFunction(const LinearExpressionElementaryTimesFunction& LF)
00155 : LinearExpression(LF),
00156 __function(LF.__function)
00157 {
00158 ;
00159 }
00160
00161 ~LinearExpressionElementaryTimesFunction()
00162 {
00163 ;
00164 }
00165 };
00166
00167
00168 class LinearExpressionElementaryTimesReal
00169 : public LinearExpression
00170 {
00171 private:
00172 ReferenceCounting<RealExpression> __realexp;
00173
00174 std::ostream& put (std::ostream& os) const
00175 {
00176 os << *__realexp << '*' << *__integrated;
00177 return os;
00178 }
00179
00180 public:
00181
00182 void execute()
00183 {
00184 (*__realexp).execute();
00185 (*__integrated).execute();
00186 }
00187
00188 ReferenceCounting<RealExpression> real_t()
00189 {
00190 return __realexp;
00191 }
00192
00193 LinearExpressionElementaryTimesReal
00194 (ReferenceCounting<IntegratedOperatorExpression> i,
00195 ReferenceCounting<RealExpression> r)
00196 : LinearExpression(LinearExpression::elementaryTimesReal, i),
00197 __realexp(r)
00198 {
00199 ;
00200 }
00201
00202 LinearExpressionElementaryTimesReal(const LinearExpressionElementaryTimesReal& LF)
00203 : LinearExpression(LF),
00204 __realexp(LF.__realexp)
00205 {
00206 ;
00207 }
00208
00209 ~LinearExpressionElementaryTimesReal()
00210 {
00211 ;
00212 }
00213 };
00214
00215 #endif // LINEAR_EXPRESSION_HPP
00216