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) const;
43 
50  void define_global_function(const std::string &name, const std::string &js_function) const;
51 
55  bool is_set() const { return duk_get_top(ctx) == 1 && duk_is_function(ctx, -1); }
56 
60  int parameter_count() const { return duk_get_length(ctx, -1); }
61 
65  double get_scalar(double arg) const;
66 
70  Eigen::Vector3d get_vector(double arg) const;
71 
75  Eigen::Vector3d get_vector(const Eigen::Ref<const Eigen::Vector3d> arg) const;
76 
80  Eigen::Vector3d get_vector(const Eigen::Ref<const Eigen::Vector3d> position,
81  const std::vector<std::string> &regions) const;
82 
83 private:
88  void die_if_error(duk_int_t err) const;
89 
93  double get_vector_component(int idx) const;
94 
99  Eigen::Vector3d compute_vector(int argument_count) const;
100 
104  duk_context *ctx;
105  };
106 
107 #endif /* expression_parser_h */
Definition: expression_parser.h:22
void define_global_function(const std::string &name, const std::string &js_function) const
Definition: expression_parser.cpp:81
bool is_set() const
Definition: expression_parser.h:55
Eigen::Vector3d compute_vector(int argument_count) const
Definition: expression_parser.cpp:114
double get_vector_component(int idx) const
Definition: expression_parser.cpp:100
double get_scalar(double arg) const
Definition: expression_parser.cpp:89
Eigen::Vector3d get_vector(double arg) const
Definition: expression_parser.cpp:125
int parameter_count() const
Definition: expression_parser.h:60
duk_context * ctx
Definition: expression_parser.h:104
void set_expressions(const std::string &parameters, const std::string &expr_x, const std::string &expr_y, const std::string &expr_z) const
Definition: expression_parser.cpp:74
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