Feellgood
expression_parser.h
1 /*
2  * Parser/evaluator for the analytic expressions given by the user:
3  * - vector M(x, y, z, regions): initial magnetization
4  * - vector B(t): space-independent applied field, or
5  * - scalar A(t): amplitude of space-dependent applied field, and
6  * - vector f(x, y, z): space-dependent part of the applied field.
7  */
8 
9 #ifndef expression_parser_h
10 #define expression_parser_h
11 
12 #include <duktape.h>
13 #include <string>
14 
15 #include <eigen3/Eigen/Dense>
16 
22  {
23 public:
25  ExpressionParser(const ExpressionParser &) = delete;
26  ExpressionParser &operator=(const ExpressionParser &) = delete;
28 
34  void set_function(const std::string &js_function) const;
35 
41  void set_expressions(const std::string &parameters, const std::string &expr_x,
42  const std::string &expr_y, const std::string &expr_z);
43 
47  int parameter_count() const { return duk_get_length(ctx, -1); }
48 
52  double get_scalar(double arg) const;
53 
57  Eigen::Vector3d get_vector(double arg) const;
58 
62  Eigen::Vector3d get_vector(const Eigen::Ref<Eigen::Vector3d> arg) const;
63 
67  Eigen::Vector3d get_vector(const Eigen::Ref<Eigen::Vector3d> position,
68  const std::vector<std::string> &regions) const;
69 
70 private:
75  void die_if_error(duk_int_t err) const;
76 
80  double get_vector_component(int idx) const;
81 
86  Eigen::Vector3d compute_vector(int argument_count) const;
87 
91  duk_context *ctx;
92  };
93 
94 #endif /* expression_parser_h */
Definition: expression_parser.h:22
void set_expressions(const std::string &parameters, const std::string &expr_x, const std::string &expr_y, const std::string &expr_z)
Definition: expression_parser.cpp:74
Eigen::Vector3d compute_vector(int argument_count) const
Definition: expression_parser.cpp:106
double get_vector_component(int idx) const
Definition: expression_parser.cpp:92
double get_scalar(double arg) const
Definition: expression_parser.cpp:81
Eigen::Vector3d get_vector(double arg) const
Definition: expression_parser.cpp:117
int parameter_count() const
Definition: expression_parser.h:47
duk_context * ctx
Definition: expression_parser.h:91
void die_if_error(duk_int_t err) const
Definition: expression_parser.cpp:54
void set_function(const std::string &js_function) const
Definition: expression_parser.cpp:62