1 #ifndef __GLOBAL_FUNCTIONS_H__
2 #define __GLOBAL_FUNCTIONS_H__
7 #include "boost/tuple/tuple.hpp"
8 #include "boost/variant/get.hpp"
9 #include "boost/variant/variant.hpp"
17 namespace GlobalFunctions {
63 if (args.size() != 1) {
65 "sqrt expects 1 arguments, " + std::to_string(args.size()) +
" given");
68 double value = boost::get<double>(args[0]);
69 return boost::make_tuple(
sqrt(value),
true);
75 if (args.size() != 1) {
77 "sq expects 1 arguments, " + std::to_string(args.size()) +
" given");
80 double value = boost::get<double>(args[0]);
81 return boost::make_tuple(value * value,
true);
87 if (args.size() != 2) {
89 "pow expects 2 arguments, " + std::to_string(args.size()) +
" given");
92 double value = boost::get<double>(args[0]);
93 double exp = boost::get<double>(args[1]);
94 return boost::make_tuple(
pow(value, exp),
true);
100 if (args.size() != 1) {
102 "exp expects 1 arguments, " + std::to_string(args.size()) +
" given");
105 double value = boost::get<double>(args[0]);
106 return boost::make_tuple(
exp(value),
true);
112 if (args.size() != 1) {
114 "log expects 1 arguments, " + std::to_string(args.size()) +
" given");
117 double value = boost::get<double>(args[0]);
118 return boost::make_tuple(
log(value),
true);
126 if (args.size() != 1) {
128 "ceil expects 1 arguments, " + std::to_string(args.size()) +
" given");
131 double value = boost::get<double>(args[0]);
132 return boost::make_tuple(
ceil(value),
true);
138 if (args.size() != 1) {
140 "fabs expects 1 arguments, " + std::to_string(args.size()) +
" given");
143 double value = boost::get<double>(args[0]);
144 return boost::make_tuple(
fabs(value),
true);
150 if (args.size() != 1) {
152 "floor expects 1 arguments, " + std::to_string(args.size()) +
" given");
155 double value = boost::get<double>(args[0]);
156 return boost::make_tuple(
floor(value),
true);
162 if (args.size() != 2) {
164 "fmod expects 2 arguments, " + std::to_string(args.size()) +
" given");
167 double value = boost::get<double>(args[0]);
168 double val2 = boost::get<double>(args[1]);
169 return boost::make_tuple(
fmod(value, val2),
true);
177 if (args.size() != 1) {
179 "sin expects 1 arguments, " + std::to_string(args.size()) +
" given");
182 double value = boost::get<double>(args[0]);
183 return boost::make_tuple(
sin(value),
true);
189 if (args.size() != 1) {
191 "asin expects 1 arguments, " + std::to_string(args.size()) +
" given");
194 double value = boost::get<double>(args[0]);
195 return boost::make_tuple(
asin(value),
true);
201 if (args.size() != 1) {
203 "cos expects 1 arguments, " + std::to_string(args.size()) +
" given");
206 double value = boost::get<double>(args[0]);
207 return boost::make_tuple(
cos(value),
true);
213 if (args.size() != 1) {
215 "acos expects 1 arguments, " + std::to_string(args.size()) +
" given");
218 double value = boost::get<double>(args[0]);
219 return boost::make_tuple(
acos(value),
true);
225 if (args.size() != 1) {
227 "tan expects 1 arguments, " + std::to_string(args.size()) +
" given");
230 double value = boost::get<double>(args[0]);
231 return boost::make_tuple(
tan(value),
true);
237 if (args.size() != 1) {
239 "atan expects 1 arguments, " + std::to_string(args.size()) +
" given");
242 double value = boost::get<double>(args[0]);
243 return boost::make_tuple(
atan(value),
true);
250 typedef std::pair<std::string, client::function::type> funcEntry_t;
254 funcs.insert(funcEntry_t(
"sqrt", sqrt_));
256 funcs.insert(funcEntry_t(
"sq", sq_));
258 funcs.insert(funcEntry_t(
"pow", pow_));
260 funcs.insert(funcEntry_t(
"exp", exp_));
262 funcs.insert(funcEntry_t(
"log", log_));
266 funcs.insert(funcEntry_t(
"ceil", ceil_));
268 funcs.insert(funcEntry_t(
"fabs", fabs_));
270 funcs.insert(funcEntry_t(
"floor", floor_));
272 funcs.insert(funcEntry_t(
"fmod", fmod_));
276 funcs.insert(funcEntry_t(
"sin", sin_));
278 funcs.insert(funcEntry_t(
"asin", asin_));
280 funcs.insert(funcEntry_t(
"cos", cos_));
282 funcs.insert(funcEntry_t(
"acos", acos_));
284 funcs.insert(funcEntry_t(
"tan", tan_));
286 funcs.insert(funcEntry_t(
"atan", atan_));
PETE_TUTree< FnArcCos, typename T::PETE_Expr_t > acos(const PETE_Expr< T > &l)
Expressions::Result_t operator()(client::function::arguments_t args)
PETE_TUTree< FnFabs, typename T::PETE_Expr_t > fabs(const PETE_Expr< T > &l)
Tps< T > sin(const Tps< T > &x)
Sine.
PETE_TUTree< FnCeil, typename T::PETE_Expr_t > ceil(const PETE_Expr< T > &l)
Tps< T > exp(const Tps< T > &x)
Exponential.
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Tps< T > tan(const Tps< T > &x)
Tangent.
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
Tps< T > log(const Tps< T > &x)
Natural logarithm.
Expressions::Result_t operator()(client::function::arguments_t args)
boost::tuple< double, bool > Result_t
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
PETE_TUTree< FnArcTan, typename T::PETE_Expr_t > atan(const PETE_Expr< T > &l)
std::vector< argument_t > arguments_t
Expressions::Result_t operator()(client::function::arguments_t args)
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
PETE_TBTree< FnFmod, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > fmod(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
Tps< T > sqrt(const Tps< T > &x)
Square root.
Tps< T > cos(const Tps< T > &x)
Cosine.
boost::function< boost::tuple< double, bool >arguments_t)> type
PETE_TUTree< FnArcSin, typename T::PETE_Expr_t > asin(const PETE_Expr< T > &l)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
std::map< std::string, client::function::type > functionDictionary_t
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)
PETE_TUTree< FnFloor, typename T::PETE_Expr_t > floor(const PETE_Expr< T > &l)
Expressions::Result_t operator()(client::function::arguments_t args)
Expressions::Result_t operator()(client::function::arguments_t args)