14 #define exprtk_disable_string_capabilities // Workaround a bug in Ubuntu 16 #include <mrpt/otherlibs/exprtk.hpp> 26 CRuntimeCompiledExpression::CRuntimeCompiledExpression()
31 void CRuntimeCompiledExpression::compile(
37 const std::map<std::string, double>& variables,
42 m_original_expr_str = expression;
44 exprtk::symbol_table<double> symbol_table;
45 for (
const auto&
v : variables)
47 double& var =
const_cast<double&
>(
v.second);
48 symbol_table.add_variable(
v.first, var);
50 symbol_table.add_constant(
"M_PI",
M_PI);
51 symbol_table.add_constants();
54 .register_symbol_table(symbol_table);
56 exprtk::parser<double> parser;
59 PIMPL_GET_REF(exprtk::expression<double>, m_compiled_formula)))
61 "Error compiling expression (name=`%s`): `%s`. Error: `%s`",
62 expr_name_for_error_reporting.c_str(), expression.c_str(),
63 parser.error().c_str());
66 double CRuntimeCompiledExpression::eval()
const 68 ASSERT_(m_compiled_formula.ptr.get() !=
nullptr);
73 void CRuntimeCompiledExpression::register_symbol_table(
77 const std::map<std::string, double*>& variables)
79 exprtk::symbol_table<double> symbol_table;
80 for (
const auto&
v : variables)
82 double* var =
const_cast<double*
>(
v.second);
83 symbol_table.add_variable(
v.first, *var);
86 .register_symbol_table(symbol_table);
89 exprtk::expression<double>& CRuntimeCompiledExpression::get_raw_exprtk_expr()
91 ASSERT_(m_compiled_formula.ptr.get() !=
nullptr);
92 return PIMPL_GET_REF(exprtk::expression<double>, m_compiled_formula);
94 const exprtk::expression<double>&
95 CRuntimeCompiledExpression::get_raw_exprtk_expr()
const 97 ASSERT_(m_compiled_formula.ptr.get() !=
nullptr);
101 bool CRuntimeCompiledExpression::is_compiled()
const 103 return m_compiled_formula.ptr.get() !=
nullptr;
105 const std::string& CRuntimeCompiledExpression::get_original_expression()
const 107 return m_original_expr_str;
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
#define PIMPL_IMPLEMENT(_TYPE)
This base provides a set of functions for maths stuff.
#define PIMPL_GET_CONSTREF(_TYPE, _VAR_NAME)
GLsizei const GLchar ** string
#define PIMPL_GET_REF(_TYPE, _VAR_NAME)
#define PIMPL_CONSTRUCT(_TYPE, _VAR_NAME)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.