1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (CEA/DEN)
21 #ifndef __INTERPKERNELVALUE_HXX__
22 #define __INTERPKERNELVALUE_HXX__
24 #include "INTERPKERNELDefines.hxx"
25 #include "InterpKernelException.hxx"
26 #include "InterpKernelUnit.hxx"
28 namespace INTERP_KERNEL
30 class INTERPKERNEL_EXPORT Value
33 virtual Value *newInstance() const = 0;
35 virtual void setDouble(double val) = 0;
36 virtual void setVarname(int fastPos, const std::string& var) = 0;
38 virtual void positive() = 0;
39 virtual void negate() = 0;
40 virtual void sqrt() = 0;
41 virtual void cos() = 0;
42 virtual void sin() = 0;
43 virtual void tan() = 0;
44 virtual void acos() = 0;
45 virtual void asin() = 0;
46 virtual void atan() = 0;
47 virtual void cosh() = 0;
48 virtual void sinh() = 0;
49 virtual void tanh() = 0;
50 virtual void abs() = 0;
51 virtual void exp() = 0;
52 virtual void ln() = 0;
53 virtual void log10() = 0;
55 virtual Value *plus(const Value *other) const = 0;
56 virtual Value *minus(const Value *other) const = 0;
57 virtual Value *mult(const Value *other) const = 0;
58 virtual Value *div(const Value *other) const = 0;
59 virtual Value *pow(const Value *other) const = 0;
60 virtual Value *max(const Value *other) const = 0;
61 virtual Value *min(const Value *other) const = 0;
62 virtual Value *greaterThan(const Value *other) const = 0;
63 virtual Value *lowerThan(const Value *other) const = 0;
65 virtual Value *ifFunc(const Value *the, const Value *els) const = 0;
68 class INTERPKERNEL_EXPORT ValueDouble : public Value
72 Value *newInstance() const;
73 void setDouble(double val);
74 void setVarname(int fastPos, const std::string& var);
76 double getData() const { return _data; }
94 Value *plus(const Value *other) const;
95 Value *minus(const Value *other) const;
96 Value *mult(const Value *other) const;
97 Value *div(const Value *other) const;
98 Value *pow(const Value *other) const;
99 Value *max(const Value *other) const;
100 Value *min(const Value *other) const;
101 Value *greaterThan(const Value *other) const;
102 Value *lowerThan(const Value *other) const;
104 Value *ifFunc(const Value *the, const Value *els) const;
106 ValueDouble(double val);
107 static const ValueDouble *checkSameType(const Value *val);
112 class ValueUnit : public Value
115 INTERPKERNEL_EXPORT ValueUnit();
116 INTERPKERNEL_EXPORT Value *newInstance() const;
117 INTERPKERNEL_EXPORT void setDouble(double val);
118 INTERPKERNEL_EXPORT void setVarname(int fastPos, const std::string& var);
120 INTERPKERNEL_EXPORT DecompositionInUnitBase getData() const { return _data; }
121 INTERPKERNEL_EXPORT void positive();
122 INTERPKERNEL_EXPORT void negate();
123 INTERPKERNEL_EXPORT void sqrt();
124 INTERPKERNEL_EXPORT void cos();
125 INTERPKERNEL_EXPORT void sin();
126 INTERPKERNEL_EXPORT void tan();
127 INTERPKERNEL_EXPORT void acos();
128 INTERPKERNEL_EXPORT void asin();
129 INTERPKERNEL_EXPORT void atan();
130 INTERPKERNEL_EXPORT void cosh();
131 INTERPKERNEL_EXPORT void sinh();
132 INTERPKERNEL_EXPORT void tanh();
133 INTERPKERNEL_EXPORT void abs();
134 INTERPKERNEL_EXPORT void exp();
135 INTERPKERNEL_EXPORT void ln();
136 INTERPKERNEL_EXPORT void log10();
138 INTERPKERNEL_EXPORT Value *plus(const Value *other) const;
139 INTERPKERNEL_EXPORT Value *minus(const Value *other) const;
140 INTERPKERNEL_EXPORT Value *mult(const Value *other) const;
141 INTERPKERNEL_EXPORT Value *div(const Value *other) const;
142 INTERPKERNEL_EXPORT Value *pow(const Value *other) const;
143 INTERPKERNEL_EXPORT Value *max(const Value *other) const;
144 INTERPKERNEL_EXPORT Value *min(const Value *other) const;
145 INTERPKERNEL_EXPORT Value *greaterThan(const Value *other) const;
146 INTERPKERNEL_EXPORT Value *lowerThan(const Value *other) const;
148 INTERPKERNEL_EXPORT Value *ifFunc(const Value *the, const Value *els) const;
150 ValueUnit(const DecompositionInUnitBase& unit);
151 static void unsupportedOp(const char *type);
152 static const ValueUnit *checkSameType(const Value *val);
154 DecompositionInUnitBase _data;
157 class INTERPKERNEL_EXPORT ValueDoubleExpr : public Value
160 ValueDoubleExpr(int szDestData, const double *srcData);
162 double *getData() const { return _dest_data; }
163 Value *newInstance() const;
164 void setDouble(double val);
165 void setVarname(int fastPos, const std::string& var);
184 Value *plus(const Value *other) const;
185 Value *minus(const Value *other) const;
186 Value *mult(const Value *other) const;
187 Value *div(const Value *other) const;
188 Value *pow(const Value *other) const;
189 Value *max(const Value *other) const;
190 Value *min(const Value *other) const;
191 Value *greaterThan(const Value *other) const;
192 Value *lowerThan(const Value *other) const;
194 Value *ifFunc(const Value *the, const Value *els) const;
198 const double *_src_data;