Go to the documentation of this file.
19 #define exprtk_disable_string_capabilities // Workaround a bug in Ubuntu
23 #define exprtk_disable_enhanced_features
24 #define exprtk_disable_superscalar_unroll
25 #define exprtk_disable_rtl_vecops
26 #define exprtk_disable_rtl_io_file
27 #include <mrpt/3rdparty/exprtk.hpp>
46 const char* sp = ::getenv(
"MRPT_EXPR_VERBOSE");
47 if (
nullptr == sp)
return;
50 if (s == std::string(
"1"))
76 const std::string& expression,
80 const std::map<std::string, double>& variables,
83 const std::string& expr_name_for_error_reporting)
85 m_impl->m_original_expr_str = expression;
87 exprtk::symbol_table<double> symbol_table;
88 for (
const auto& v : variables)
90 auto& var =
const_cast<double&
>(v.second);
91 symbol_table.add_variable(v.first, var);
93 symbol_table.add_constant(
"M_PI",
M_PI);
94 symbol_table.add_constants();
96 m_impl->m_compiled_formula.register_symbol_table(symbol_table);
99 exprtk::parser<double> parser;
100 if (!parser.compile(expression,
m_impl->m_compiled_formula))
102 "Error compiling expression (name=`%s`): `%s`. Error: `%s`",
103 expr_name_for_error_reporting.c_str(), expression.c_str(),
104 parser.error().c_str());
110 double ret =
m_impl->m_compiled_formula.value();
119 const std::map<std::string, double*>& variables)
121 exprtk::symbol_table<double> symbol_table;
122 for (
const auto& v : variables)
124 auto* var =
const_cast<double*
>(v.second);
125 symbol_table.add_variable(v.first, *var);
127 m_impl->m_compiled_formula.register_symbol_table(symbol_table);
133 return m_impl->m_compiled_formula;
139 return m_impl->m_compiled_formula;
145 return m_impl->m_compiled_formula;
149 return m_impl->m_original_expr_str;
157 const auto& exp = *rce.
m_impl.get();
161 bool matched =
false;
164 if (exp.m_original_expr_str.find(s) != std::string::npos)
170 if (!matched)
return;
173 std::vector<std::pair<std::string, double>> lst;
174 exp.m_compiled_formula.get_symbol_table().get_variable_list(lst);
176 std::cout <<
"[CRuntimeCompiledExpression::eval()] DEBUG:\n"
178 << exp.m_original_expr_str <<
"\n"
179 "* Final value: " << ret <<
"\n"
180 "* Using these symbols:\n";
182 for (
const auto& v : lst)
183 std::cout <<
" * " << v.first <<
" = " << v.second <<
"\n";
bool is_compiled() const
Returns true if compile() was called and ended without errors.
void compile(const std::string &expression, const std::map< std::string, double > &variables=std::map< std::string, double >(), const std::string &expr_name_for_error_reporting=std::string())
Initializes the object by compiling an expression.
CRuntimeCompiledExpression()
Default ctor.
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
void register_symbol_table(const std::map< std::string, double * > &variables)
Can be used before calling compile() to register additional variables by means of pointers instead of...
#define ASSERT_(f)
Defines an assertion mechanism.
void tokenize(const std::string &inString, const std::string &inDelimiters, OUT_CONTAINER &outTokens, bool skipBlankTokens=true) noexcept
Tokenizes a string according to a set of delimiting characters.
mrpt::pimpl< Impl > m_impl
A wrapper of exprtk runtime expression compiler: it takes a string representing an expression (from a...
~CRuntimeCompiledExpression()
static CRuntimeCompiledExpression::ExprVerbose & Instance()
double eval() const
Evaluates the current value of the precompiled formula.
pimpl< T > make_impl(Args &&... args)
const std::string & get_original_expression() const
Returns the original formula passed to compile(), or an empty string if still not compiled.
exprtk::expression< double > & get_raw_exprtk_expr()
Access raw exprtk expression object.
std::string trim(const std::string &str)
Removes leading and trailing spaces.
void process(const CRuntimeCompiledExpression &rce, const double ret)
bool m_verbose_always_enabled
std::vector< std::string > m_verbose_matches
exprtk::expression< double > m_compiled_formula
std::string m_original_expr_str
Page generated by Doxygen 1.8.17 for MRPT 2.0.4 at Fri Jul 17 08:43:33 UTC 2020 | |