00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef INTEGRATED_OPERATOR_EXPRESSION_HPP
00021 #define INTEGRATED_OPERATOR_EXPRESSION_HPP
00022
00023 #include <Expression.hpp>
00024 #include <IntegratedExpression.hpp>
00025
00026 class IntegratedOperatorExpression
00027 : public Expression
00028 {
00029 public:
00030 enum OperatorType {
00031 undefined,
00032 orderZero,
00033 gradient,
00034 dx,
00035 dy,
00036 dz
00037 };
00038
00039 private:
00040 const OperatorType __operatorType;
00041
00042 protected:
00043 ReferenceCounting<IntegratedExpression> __integratedExpression;
00044
00045 private:
00046 bool __isMean;
00047 bool __isJump;
00048
00049 protected:
00050 std::string __vo;
00051 std::string __vf;
00052
00053
00054 public:
00055 const bool& isJump() const
00056 {
00057 return __isJump;
00058 }
00059
00060 void setJump()
00061 {
00062 __isJump=true;
00063 __vo = "[";
00064 __vf = "]";
00065 }
00066
00067 const bool& isMean() const
00068 {
00069 return __isMean;
00070 }
00071
00072 void setMean()
00073 {
00074 __isMean=true;
00075 __vo = "{";
00076 __vf = "}";
00077 }
00078
00079 const OperatorType& operatorType() const
00080 {
00081 return __operatorType;
00082 }
00083
00084 ConstReferenceCounting<IntegratedExpression> integratedExpression() const
00085 {
00086 return __integratedExpression;
00087 }
00088
00089 IntegratedOperatorExpression(const IntegratedOperatorExpression::
00090 OperatorType t,
00091 ReferenceCounting<IntegratedExpression> i)
00092 : Expression(Expression::integratedOperator),
00093 __operatorType(t),
00094 __integratedExpression(i),
00095 __isMean(false),
00096 __isJump(false),
00097 __vo(""),
00098 __vf("")
00099 {
00100 ;
00101 }
00102
00103 IntegratedOperatorExpression(const IntegratedOperatorExpression& I)
00104 : Expression(I),
00105 __operatorType(I.__operatorType),
00106 __integratedExpression(I.__integratedExpression),
00107 __isMean(I.__isMean),
00108 __isJump(I.__isJump),
00109 __vo(I.__vo),
00110 __vf(I.__vf)
00111 {
00112 ;
00113 }
00114
00115 virtual ~IntegratedOperatorExpression()
00116 {
00117 ;
00118 }
00119 };
00120
00121
00122 class IntegratedOperatorExpressionOrderZero
00123 : public IntegratedOperatorExpression
00124 {
00125 private:
00126 std::ostream& put(std::ostream& os) const
00127 {
00128 os << __vo << *__integratedExpression << __vf;
00129 return os;
00130 }
00131 public:
00132
00133 void execute()
00134 {
00135 ;
00136 }
00137
00138 IntegratedOperatorExpressionOrderZero(ReferenceCounting<IntegratedExpression> I)
00139 : IntegratedOperatorExpression(IntegratedOperatorExpression::orderZero,
00140 I)
00141 {
00142 ;
00143 }
00144
00145 IntegratedOperatorExpressionOrderZero(const IntegratedOperatorExpressionOrderZero& I)
00146 : IntegratedOperatorExpression(I)
00147 {
00148 ;
00149 }
00150
00151 ~IntegratedOperatorExpressionOrderZero()
00152 {
00153 ;
00154 }
00155 };
00156
00157
00158 class IntegratedOperatorExpressionGrad
00159 : public IntegratedOperatorExpression
00160 {
00161 private:
00162 std::ostream& put(std::ostream& os) const
00163 {
00164 os << __vo << "grad(" << *__integratedExpression << ')' << __vf;
00165 return os;
00166 }
00167 public:
00168
00169 void execute()
00170 {
00171 ;
00172 }
00173
00174 IntegratedOperatorExpressionGrad(ReferenceCounting<IntegratedExpression> I)
00175 : IntegratedOperatorExpression(IntegratedOperatorExpression::gradient, I)
00176 {
00177 ;
00178 }
00179
00180 IntegratedOperatorExpressionGrad(const IntegratedOperatorExpressionGrad& I)
00181 : IntegratedOperatorExpression(I)
00182 {
00183 ;
00184 }
00185
00186 ~IntegratedOperatorExpressionGrad()
00187 {
00188 ;
00189 }
00190 };
00191
00192 class IntegratedOperatorExpressionDx
00193 : public IntegratedOperatorExpression
00194 {
00195 private:
00196 std::string __operatorName;
00197
00198 std::ostream& put(std::ostream& os) const
00199 {
00200 os << __vo << __operatorName << '(' << *__integratedExpression << ')' << __vf;
00201 return os;
00202 }
00203
00204 static IntegratedOperatorExpression::OperatorType
00205 getOperatorType(const std::string& operatorName)
00206 {
00207 if (operatorName == "dx") {
00208 return IntegratedOperatorExpression::dx;
00209 }
00210 if (operatorName == "dy") {
00211 return IntegratedOperatorExpression::dy;
00212 }
00213 if (operatorName == "dz") {
00214 return IntegratedOperatorExpression::dz;
00215 }
00216 throw ErrorHandler(__FILE__,__LINE__,
00217 "unknown operator",
00218 ErrorHandler::unexpected);
00219 return IntegratedOperatorExpression::undefined;
00220 }
00221 public:
00222
00223 void execute()
00224 {
00225 ;
00226 }
00227
00228 IntegratedOperatorExpressionDx(const std::string& operatorName,
00229 ReferenceCounting<IntegratedExpression> I)
00230 : IntegratedOperatorExpression(IntegratedOperatorExpressionDx::getOperatorType(operatorName), I),
00231 __operatorName(operatorName)
00232 {
00233 ;
00234 }
00235
00236 IntegratedOperatorExpressionDx(const IntegratedOperatorExpressionDx& I)
00237 : IntegratedOperatorExpression(I),
00238 __operatorName(I.__operatorName)
00239 {
00240 ;
00241 }
00242
00243 ~IntegratedOperatorExpressionDx()
00244 {
00245 ;
00246 }
00247 };
00248
00249 #endif // INTEGRATED_OPERATOR_EXPRESSION_HPP
00250