DMRITool  v0.1.1-139-g860d86b4
Diffusion MRI Tool
utlExprtk.h
Go to the documentation of this file.
1 
11 #ifndef __utlExprtk_h
12 #define __utlExprtk_h
13 
14 #include "exprtk_lib.h"
15 #include <functional>
16 #include <vector>
17 
18 namespace utl
19 {
20 
27 template <class T=double>
28 inline std::function<T(T)>
29 GetScalarFunctionFromString ( const std::string& funcStr )
30 {
31  auto func =
32  [funcStr](T xval)
33  {
34  T x(xval);
35  exprtk::symbol_table<T> symbol_table;
36  symbol_table.add_variable("x",x);
37  symbol_table.add_constants();
38 
39  exprtk::expression<T> expression;
40  expression.register_symbol_table(symbol_table);
41 
42  exprtk::parser<T> parser;
43  parser.compile(funcStr ,expression);
44 
45  T result = expression.value();
46  return result;
47  };
48  return func;
49 }
50 
51 
58 template <class T=double>
59 inline std::function<T(std::vector<T>)>
60 GetVectorFunctionFromString ( const std::string& funcStr )
61 {
62  auto func =
63  [funcStr](const std::vector<T>& xval)
64  {
65  std::vector<T> x(xval);
66  exprtk::symbol_table<T> symbol_table;
67  symbol_table.add_vector("x",x);
68  symbol_table.add_constants();
69 
70  exprtk::expression<T> expression;
71  expression.register_symbol_table(symbol_table);
72 
73  exprtk::parser<T> parser;
74  parser.compile(funcStr,expression);
75 
76  T result = expression.value();
77  return result;
78  };
79  return func;
80 }
81 
82 }
83 
84 #endif
Created "04-04-2017.
std::function< T(std::vector< T >)> GetVectorFunctionFromString(const std::string &funcStr)
Definition: utlExprtk.h:60
std::function< T(T)> GetScalarFunctionFromString(const std::string &funcStr)
Definition: utlExprtk.h:29
Definition: utl.h:90