00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef FUNCTION_EXPRESSION_HPP
00021 #define FUNCTION_EXPRESSION_HPP
00022
00023 #include <Expression.hpp>
00024 #include <ReferenceCounting.hpp>
00025
00026 #include <iostream>
00027
00028 class ScalarFunctionBase;
00037 class FunctionExpression
00038 : public Expression
00039 {
00040 public:
00042 enum FunctionType {
00043 constant,
00044 linearBase,
00045 normalComponent,
00046 fem,
00047 dg,
00048 spectral,
00049 derivative,
00050 meshReferences,
00051 composed,
00052 variable,
00053 cfunction,
00054 binaryOperation,
00055 unaryMinus,
00056 convection,
00057
00058 objectCharacteristic,
00059 meshCharacteristic,
00060 domainCharacteristic,
00061
00062 read,
00063 functionValue,
00064 not_,
00065 integrate
00066 };
00067 private:
00068 const FunctionType __type;
00070 bool __unknown;
00072 protected:
00073 ConstReferenceCounting<ScalarFunctionBase> __scalarFunction;
00082 virtual std::ostream& put(std::ostream& os) const;
00083
00084 public:
00090 virtual bool hasBoundaryExpression() const;
00091
00097 const FunctionExpression::FunctionType& type() const;
00098
00104 ConstReferenceCounting<ScalarFunctionBase> function() const;
00105
00111 ReferenceCounting<FunctionExpression> value();
00112
00119 FunctionExpression(const FunctionExpression& e);
00120
00127 FunctionExpression(const FunctionExpression::FunctionType& type);
00128
00133 virtual ~FunctionExpression();
00134 };
00135
00136 #endif // FUNCTION_EXPRESSION_HPP