23#ifndef __GLOBAL_FUNCTIONS_H__
24#define __GLOBAL_FUNCTIONS_H__
83 if (args.size() != 1) {
85 "sqrt expects 1 arguments, " + std::to_string(args.size()) +
" given");
88 double value = std::get<double>(args[0]);
89 return std::make_tuple(
sqrt(value),
true);
95 if (args.size() != 1) {
97 "sq expects 1 arguments, " + std::to_string(args.size()) +
" given");
100 double value = std::get<double>(args[0]);
101 return std::make_tuple(value * value,
true);
107 if (args.size() != 2) {
109 "pow expects 2 arguments, " + std::to_string(args.size()) +
" given");
112 double value = std::get<double>(args[0]);
113 double exp = std::get<double>(args[1]);
114 return std::make_tuple(
pow(value,
exp),
true);
120 if (args.size() != 1) {
122 "exp expects 1 arguments, " + std::to_string(args.size()) +
" given");
125 double value = std::get<double>(args[0]);
126 return std::make_tuple(
exp(value),
true);
132 if (args.size() != 1) {
134 "log expects 1 arguments, " + std::to_string(args.size()) +
" given");
137 double value = std::get<double>(args[0]);
138 return std::make_tuple(
log(value),
true);
144 if (args.size() != 1) {
146 "ceil expects 1 arguments, " + std::to_string(args.size()) +
" given");
149 double value = std::get<double>(args[0]);
150 return std::make_tuple(
ceil(value),
true);
156 if (args.size() != 1) {
158 "fabs expects 1 arguments, " + std::to_string(args.size()) +
" given");
161 double value = std::get<double>(args[0]);
162 return std::make_tuple(
fabs(value),
true);
168 if (args.size() != 1) {
170 "floor expects 1 arguments, " + std::to_string(args.size()) +
" given");
173 double value = std::get<double>(args[0]);
174 return std::make_tuple(
floor(value),
true);
180 if (args.size() != 2) {
182 "fmod expects 2 arguments, " + std::to_string(args.size()) +
" given");
185 double value = std::get<double>(args[0]);
186 double val2 = std::get<double>(args[1]);
187 return std::make_tuple(
fmod(value, val2),
true);
193 if (args.size() != 1) {
195 "sin expects 1 arguments, " + std::to_string(args.size()) +
" given");
198 double value = std::get<double>(args[0]);
199 return std::make_tuple(
sin(value),
true);
205 if (args.size() != 1) {
207 "asin expects 1 arguments, " + std::to_string(args.size()) +
" given");
210 double value = std::get<double>(args[0]);
211 return std::make_tuple(
asin(value),
true);
217 if (args.size() != 1) {
219 "cos expects 1 arguments, " + std::to_string(args.size()) +
" given");
222 double value = std::get<double>(args[0]);
223 return std::make_tuple(
cos(value),
true);
229 if (args.size() != 1) {
231 "acos expects 1 arguments, " + std::to_string(args.size()) +
" given");
234 double value = std::get<double>(args[0]);
235 return std::make_tuple(
acos(value),
true);
241 if (args.size() != 1) {
243 "tan expects 1 arguments, " + std::to_string(args.size()) +
" given");
246 double value = std::get<double>(args[0]);
247 return std::make_tuple(
tan(value),
true);
253 if (args.size() != 1) {
255 "atan expects 1 arguments, " + std::to_string(args.size()) +
" given");
258 double value = std::get<double>(args[0]);
259 return std::make_tuple(
atan(value),
true);
265 typedef std::pair<std::string, client::function::type> funcEntry_t;
269 funcs.insert(funcEntry_t(
"sqrt", sqrt_));
271 funcs.insert(funcEntry_t(
"sq", sq_));
273 funcs.insert(funcEntry_t(
"pow", pow_));
275 funcs.insert(funcEntry_t(
"exp", exp_));
277 funcs.insert(funcEntry_t(
"log", log_));
280 funcs.insert(funcEntry_t(
"ceil", ceil_));
282 funcs.insert(funcEntry_t(
"fabs", fabs_));
284 funcs.insert(funcEntry_t(
"floor", floor_));
286 funcs.insert(funcEntry_t(
"fmod", fmod_));
289 funcs.insert(funcEntry_t(
"sin", sin_));
291 funcs.insert(funcEntry_t(
"asin", asin_));
293 funcs.insert(funcEntry_t(
"cos", cos_));
295 funcs.insert(funcEntry_t(
"acos", acos_));
297 funcs.insert(funcEntry_t(
"tan", tan_));
299 funcs.insert(funcEntry_t(
"atan", atan_));
Tps< T > log(const Tps< T > &x)
Natural logarithm.
Tps< T > cos(const Tps< T > &x)
Cosine.
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
Tps< T > tan(const Tps< T > &x)
Tangent.
Tps< T > exp(const Tps< T > &x)
Exponential.
Tps< T > sin(const Tps< T > &x)
Sine.
Tps< T > sqrt(const Tps< T > &x)
Square root.
PETE_TBTree< FnFmod, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > fmod(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
PETE_TUTree< FnCeil, typename T::PETE_Expr_t > ceil(const PETE_Expr< T > &l)
PETE_TUTree< FnArcCos, typename T::PETE_Expr_t > acos(const PETE_Expr< T > &l)
PETE_TUTree< FnFabs, typename T::PETE_Expr_t > fabs(const PETE_Expr< T > &l)
PETE_TUTree< FnArcSin, typename T::PETE_Expr_t > asin(const PETE_Expr< T > &l)
PETE_TUTree< FnArcTan, typename T::PETE_Expr_t > atan(const PETE_Expr< T > &l)
PETE_TUTree< FnFloor, typename T::PETE_Expr_t > floor(const PETE_Expr< T > &l)
std::map< std::string, client::function::type > functionDictionary_t
std::tuple< double, bool > Result_t
std::function< std::tuple< double, bool >(arguments_t)> type
std::vector< argument_t > arguments_t
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)