25 #ifndef EXPRESSIONWALKER_H 26 #define EXPRESSIONWALKER_H 37 if (x.
units.empty())
return {};
40 throw std::runtime_error(
"index must be an integer for roots of dimensioned quanitites");
42 for (
auto& i: x.
units)
45 throw std::runtime_error(
"input dimension "+i.first+
" not a power to the index "+
std::to_string(index));
46 r.
units[i.first]=i.second/index;
54 auto exponent=int(y.
value);
55 if (exponent==y.
value)
58 for (
auto& i: tmp.units)
96 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) 99 # include <sys/time.h> 100 # include <sys/types.h> 111 #include <exprtk/exprtk.hpp> 132 #define exprtk_define_unary_function(Function) \ 134 inline minsky::UnitsExpressionWalker Function(const minsky::UnitsExpressionWalker x) \ 135 {x.checkDimensionless(); return x;} 137 #define exprtk_define_unary_function_not_dimensionless(Function) \ 139 inline minsky::UnitsExpressionWalker Function(const minsky::UnitsExpressionWalker x) \ 185 for (
auto& i: x.
units)
188 throw std::runtime_error(
"input dimension "+i.first+
" not a square");
189 r.
units[i.first]=i.second/2;
200 #define exprtk_define_binary_function(Function) \ 202 inline minsky::UnitsExpressionWalker Function \ 203 (const minsky::UnitsExpressionWalker x, const minsky::UnitsExpressionWalker y) \ 204 {x.checkSameDims(y); return x;} 206 #define exprtk_define_binary_function_first_arg(Function) \ 208 inline minsky::UnitsExpressionWalker Function \ 209 (const minsky::UnitsExpressionWalker x, const minsky::UnitsExpressionWalker y) \ 212 #define exprtk_define_binary_function_dimensionless(Function) \ 214 inline minsky::UnitsExpressionWalker Function \ 215 (const minsky::UnitsExpressionWalker x, const minsky::UnitsExpressionWalker y) \ 216 {x.checkSameDims(y); return {};} 243 #define exprtk_define_binary_op_impl(Op, def) \ 245 struct Op##_op<minsky::UnitsExpressionWalker>: \ 246 public opr_base<minsky::UnitsExpressionWalker> \ 248 using T=minsky::UnitsExpressionWalker; \ 249 typedef typename opr_base<T>::Type Type; \ 250 typedef typename opr_base<T>::RefType RefType; \ 252 static inline T process(Type x, Type y) \ 254 static inline void assign(RefType t1, Type t2) \ 256 static inline typename expression_node<T>::node_type type() \ 257 { return expression_node<T>::e_##Op; } \ 258 static inline details::operator_type operation() \ 259 { return details::e_##Op; } \ 262 #define exprtk_define_binary_op(Op,op) exprtk_define_binary_op_impl(Op, x op y) 263 #define exprtk_define_binary_fun_op(Op,f) exprtk_define_binary_op_impl(Op, f(x,y)) 286 #undef exprtk_define_unary_function 287 #undef exprtk_define_binary_function 288 #undef exprtk_define_binary_op 289 #undef exprtk_define_binary_fun_op 290 #undef exprtk_define_binary_fun_op_impl exprtk_define_unary_function_not_dimensionless(abs) exprtk_define_unary_function(acos) exprtk_define_unary_function(acosh) exprtk_define_unary_function(asin) exprtk_define_unary_function(asinh) exprtk_define_unary_function(atan) exprtk_define_unary_function(atanh) exprtk_define_unary_function(ceil) exprtk_define_unary_function(cos) exprtk_define_unary_function(cosh) exprtk_define_unary_function(exp) exprtk_define_unary_function(expm1) exprtk_define_unary_function(floor) exprtk_define_unary_function(log) exprtk_define_unary_function(log10) exprtk_define_unary_function(log2) exprtk_define_unary_function(log1p) exprtk_define_unary_function_not_dimensionless(neg) exprtk_define_unary_function_not_dimensionless(pos) exprtk_define_unary_function_not_dimensionless(round) exprtk_define_unary_function(sin) exprtk_define_unary_function(sinc) exprtk_define_unary_function(sinh) exprtk_define_unary_function(tan) exprtk_define_unary_function(tanh) exprtk_define_unary_function(cot) exprtk_define_unary_function(sec) exprtk_define_unary_function(csc) exprtk_define_unary_function(r2d) exprtk_define_unary_function(d2r) exprtk_define_unary_function(d2g) exprtk_define_unary_function(g2d) exprtk_define_unary_function(notl) template<> inline minsky
exprtk_define_binary_function(min)
bool operator>(std::size_t x, const UnitsExpressionWalker &y)
int to_int32(const minsky::UnitsExpressionWalker x)
UnitsExpressionWalker pow(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)
_int64_t to_int64(const minsky::UnitsExpressionWalker x)
UnitsExpressionWalker checkDimensionless(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)
UnitsExpressionWalker root(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)
exprtk_define_binary_op(add,+) exprtk_define_binary_op(sub
void checkDimensionless() const
exprtk_define_binary_op_impl(mod, x) exprtk_define_binary_fun_op(pow
Creation and access to the minskyTCL_obj object, which has code to record whenever Minsky's state cha...
exprtk_define_unary_function(erf) exprtk_define_unary_function(erfc) exprtk_define_unary_function(ncdf) exprtk_define_unary_function_not_dimensionless(frac) exprtk_define_unary_function_not_dimensionless(trunc) template<> inline minsky
UnitsExpressionWalker checkSameDims(const UnitsExpressionWalker &x, const UnitsExpressionWalker &y)
bool is_integer(const minsky::UnitsExpressionWalker x)
pow exprtk_define_binary_fun_op(lt, checkSameDims) exprtk_define_binary_fun_op(lte
void checkSameDims(const UnitsExpressionWalker &x) const
exprtk_define_binary_function_dimensionless(equal)
minsky::UnitsExpressionWalker root(const minsky::UnitsExpressionWalker x, const minsky::UnitsExpressionWalker y)
bool string_to_real(const std::string &s, minsky::UnitsExpressionWalker &t)
bool is_true(const minsky::UnitsExpressionWalker &x)
bool is_nan(const minsky::UnitsExpressionWalker x)
string to_string(CONST84 char *x)
exprtk_define_binary_function_first_arg(modulus)