14#include "arcane/expr/OperatorMng.h"
29#define CREATE_ALL_OP(map, name) \
30 map.insert(name##OpMap::value_type(VariantBase::TReal, new name##OperatorT<Real>())); \
31 map.insert(name##OpMap::value_type(VariantBase::TInt64, new name##OperatorT<Int64>())); \
32 map.insert(name##OpMap::value_type(VariantBase::TInt32, new name##OperatorT<Int32>())); \
33 map.insert(name##OpMap::value_type(VariantBase::TBool, new name##OperatorT<bool>())); \
34 map.insert(name##OpMap::value_type(VariantBase::TReal2, new name##OperatorT<Real2>())); \
35 map.insert(name##OpMap::value_type(VariantBase::TReal3, new name##OperatorT<Real3>())); \
36 map.insert(name##OpMap::value_type(VariantBase::TReal2x2, new name##OperatorT<Real2x2>())); \
37 map.insert(name##OpMap::value_type(VariantBase::TReal3x3, new name##OperatorT<Real3x3>()));
39#define CREATE_OP(map, var, maptype, varname, vartype, operator) \
40 map[var].insert(maptype ::value_type(VariantBase::varname, \
41 new operator##Operator<vartype>()));
53 UnaryExpressionImpl::eOperationType ut;
54 ut = UnaryExpressionImpl::UnarySubstract;
55 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, UnarySubstract)
56 ut = UnaryExpressionImpl::Inverse;
57 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Inverse)
58 ut = UnaryExpressionImpl::Acos;
59 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Acos)
60 ut = UnaryExpressionImpl::Asin;
61 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Asin)
62 ut = UnaryExpressionImpl::Atan;
63 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Atan)
64 ut = UnaryExpressionImpl::Ceil;
65 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Ceil)
66 ut = UnaryExpressionImpl::Cos;
67 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Cos)
68 ut = UnaryExpressionImpl::Cosh;
69 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Cosh)
70 ut = UnaryExpressionImpl::Exp;
71 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Exp)
72 ut = UnaryExpressionImpl::Fabs;
73 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Fabs)
74 ut = UnaryExpressionImpl::Floor;
75 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Floor)
76 ut = UnaryExpressionImpl::Log;
77 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Log)
78 ut = UnaryExpressionImpl::Log10;
79 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Log10)
80 ut = UnaryExpressionImpl::Sin;
81 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Sin)
82 ut = UnaryExpressionImpl::Sinh;
83 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Sinh)
84 ut = UnaryExpressionImpl::Sqrt;
85 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Sqrt)
86 ut = UnaryExpressionImpl::Tan;
87 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Tan)
88 ut = UnaryExpressionImpl::Tanh;
89 CREATE_OP(m_unary_op, ut, UnaryOpMap, TReal, Real, Tanh)
94 BinaryExpressionImpl::eOperationType bt;
96 bt = BinaryExpressionImpl::Add;
97 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Add)
98 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, Add)
99 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, Add)
100 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, Add)
101 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, Add)
102 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2x2, Real2x2, Add)
103 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3x3, Real3x3, Add)
105 bt = BinaryExpressionImpl::Substract;
106 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Substract)
107 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, Substract)
108 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, Substract)
109 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, Substract)
110 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, Substract)
111 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2x2, Real2x2, Substract)
112 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3x3, Real3x3, Substract)
114 bt = BinaryExpressionImpl::Multiply;
115 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Multiply)
116 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, Multiply)
117 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, Multiply)
118 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, Multiply)
119 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, Multiply)
123 bt = BinaryExpressionImpl::Divide;
124 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Divide)
125 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, Divide)
126 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, Divide)
127 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, Divide)
128 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, Divide)
132 bt = BinaryExpressionImpl::Minimum;
133 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Minimum)
134 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, Minimum)
135 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, Minimum)
136 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, Minimum)
137 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, Minimum)
139 bt = BinaryExpressionImpl::Maximum;
140 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Maximum)
141 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, Maximum)
142 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, Maximum)
143 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, Maximum)
144 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, Maximum)
146 bt = BinaryExpressionImpl::Pow;
147 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, Pow)
149 bt = BinaryExpressionImpl::Equal;
150 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, EQ)
151 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, EQ)
152 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, EQ)
153 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, EQ)
154 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, EQ)
156 bt = BinaryExpressionImpl::LessThan;
157 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, LT)
158 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, LT)
159 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, LT)
160 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal2, Real2, LT)
161 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal3, Real3, LT)
163 bt = BinaryExpressionImpl::LessOrEqualThan;
164 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, LOET)
165 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, LOET)
166 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, LOET)
168 bt = BinaryExpressionImpl::GreaterThan;
169 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, GT)
170 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, GT)
171 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, GT)
173 bt = BinaryExpressionImpl::GreaterOrEqualThan;
174 CREATE_OP(m_binary_op, bt, BinaryOpMap, TReal, Real, GOET)
175 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt32, Integer, GOET)
176 CREATE_OP(m_binary_op, bt, BinaryOpMap, TInt64, Integer, GOET)
178 bt = BinaryExpressionImpl::Or;
179 CREATE_OP(m_binary_op, bt, BinaryOpMap, TBool,
bool, Or)
181 bt = BinaryExpressionImpl::And;
182 CREATE_OP(m_binary_op, bt, BinaryOpMap, TBool,
bool, And)
187 CREATE_ALL_OP(m_where_op, Where)
189 CREATE_ALL_OP(m_variable_op, Variable)
191 CREATE_ALL_OP(m_litteral_op, Litteral)
197 for (
int i = 0; i < UnaryExpressionImpl::NbOperationType; i++) {
198 UnaryOpMap& m = m_unary_op[i];
199 for (UnaryOpMap::iterator it = m.begin(); it != m.end(); it++)
203 for (
int i = 0; i < BinaryExpressionImpl::NbOperationType; i++) {
204 BinaryOpMap& m = m_binary_op[i];
205 for (BinaryOpMap::iterator it = m.begin(); it != m.end(); it++)
209 for (WhereOpMap::iterator it = m_where_op.begin();
210 it != m_where_op.end();
215 for (VariableOpMap::iterator it = m_variable_op.begin();
216 it != m_variable_op.end();
221 for (LitteralOpMap::iterator it = m_litteral_op.begin();
222 it != m_litteral_op.end();
230OperatorMng* OperatorMng::
234 m_instance =
new OperatorMng();
241UnaryOperator* OperatorMng::
242find(UnaryExpressionImpl*, VariantBase::eType type,
243 UnaryExpressionImpl::eOperationType operation)
245 UnaryOpMap::iterator it = m_unary_op[operation].find(type);
246 if (it == m_unary_op[operation].end())
252BinaryOperator* OperatorMng::
253find(BinaryExpressionImpl*, VariantBase::eType type,
254 BinaryExpressionImpl::eOperationType operation)
256 BinaryOpMap::iterator it = m_binary_op[operation].find(type);
257 if (it == m_binary_op[operation].end())
263WhereOperator* OperatorMng::
264find(WhereExpressionImpl*, VariantBase::eType type)
266 WhereOpMap::iterator it = m_where_op.find(type);
267 if (it == m_where_op.end())
273LitteralOperator* OperatorMng::
274find(LitteralExpressionImpl*, VariantBase::eType type)
276 LitteralOpMap::iterator it = m_litteral_op.find(type);
277 if (it == m_litteral_op.end())
284VariableOperator* OperatorMng::
285find(VariableExpressionImpl*, VariantBase::eType type)
287 VariableOpMap::iterator it = m_variable_op.find(type);
288 if (it == m_variable_op.end())
Stores all possible operator types on expressions.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --