6#include <algorithms/logger.h>
13#include <unordered_map>
31class EvaluatorSvc :
public algorithms::LoggedService<EvaluatorSvc> {
44 template <
class... Args>
45 std::function<double(Args...)>
47 std::function<std::unordered_map<std::string, double>(Args...)> transform) {
51 float expr_value = std::stof(expr, &pos);
52 if (pos < expr.size()) {
53 throw std::invalid_argument(
"unparsed trailing characters");
55 return [expr_value](Args... ) {
return expr_value; };
56 }
catch (std::exception& e) {
58 std::vector<std::string> params;
60 for (
auto& p : transform(Args{}...)) {
61 params.push_back(p.first);
63 auto compiled_expr =
_compile(expr, params);
64 return [compiled_expr, transform](Args... args) {
65 return compiled_expr(transform(std::forward<Args>(args)...));
78 std::function<double(
const std::unordered_map<std::string, double>&)>
79 _compile(
const std::string& expr,
const std::vector<std::string>& params);
82 unsigned int m_function_id = 0;
83 std::mutex m_interpreter_mutex;
Provides an interface to a compiler that converts string expressions to native std::function.
Definition EvaluatorSvc.h:31
std::function< double(const std::unordered_map< std::string, double > &)> _compile(const std::string &expr, const std::vector< std::string > ¶ms)
Compile expression expr to std::function.
Definition EvaluatorSvc.cc:21
std::function< double(Args...)> compile(const std::string &expr, std::function< std::unordered_map< std::string, double >(Args...)> transform)
Compile expression expr to std::function.
Definition EvaluatorSvc.h:46
void init()
Definition EvaluatorSvc.cc:14
-client
Definition CalorimeterClusterRecoCoG.cc:37