8
8
9
9
#include < iosfwd>
10
10
11
+ #include " dlinear/symbolic/GenericExpressionVisitor.h"
11
12
#include " dlinear/symbolic/symbolic.h"
12
13
#include " dlinear/util/Box.h"
13
14
#include " dlinear/util/Interval.h"
@@ -20,51 +21,51 @@ namespace dlinear {
20
21
* The ExpressionEvaluator is used to evaluate an expression with a given box.
21
22
* The box provides the values of the variables in the expression with intervals.
22
23
*/
23
- class ExpressionEvaluator {
24
+ class ExpressionEvaluator : public GenericExpressionVisitor <Interval, const Box&> {
24
25
public:
25
- explicit ExpressionEvaluator (Expression e);
26
+ /* *
27
+ * Construct a new ExpressionEvaluator object with the given expression and configuration.
28
+ * @param e expression to evaluate
29
+ * @param config configuration to use
30
+ */
31
+ ExpressionEvaluator (Expression e, const Config& config);
26
32
27
33
// / Evaluates the expression with @p box.
28
- Interval operator ()(const Box& box) const ;
34
+ [[nodiscard]] Interval Process (const Box& box) const ;
35
+ [[nodiscard]] Interval operator ()(const Box& box) const ;
29
36
30
37
[[nodiscard]] const Variables& variables () const { return e_.GetVariables (); }
31
-
32
38
[[nodiscard]] const Expression& expression () const { return e_; }
33
39
34
40
private:
35
- [[nodiscard]] Interval Visit (const Expression& e, const Box& box) const ;
36
- static Interval VisitVariable (const Expression& e, const Box& box);
37
- static Interval VisitConstant (const Expression& e, const Box& box);
38
- static Interval VisitRealConstant (const Expression& e, const Box& box);
39
- [[nodiscard]] Interval VisitAddition (const Expression& e, const Box& box) const ;
40
- [[nodiscard]] Interval VisitMultiplication (const Expression& e, const Box& box) const ;
41
- [[nodiscard]] Interval VisitDivision (const Expression& e, const Box& box) const ;
42
- [[nodiscard]] Interval VisitLog (const Expression& e, const Box& box) const ;
43
- [[nodiscard]] Interval VisitAbs (const Expression& e, const Box& box) const ;
44
- [[nodiscard]] Interval VisitExp (const Expression& e, const Box& box) const ;
45
- [[nodiscard]] Interval VisitSqrt (const Expression& e, const Box& box) const ;
46
- [[nodiscard]] Interval VisitPow (const Expression& e, const Box& box) const ;
41
+ [[nodiscard]] Interval VisitVariable (const Expression& e, const Box& box) const override ;
42
+ [[nodiscard]] Interval VisitConstant (const Expression& e, const Box& box) const override ;
43
+ [[nodiscard]] Interval VisitRealConstant (const Expression& e, const Box& box) const ;
44
+ [[nodiscard]] Interval VisitAddition (const Expression& e, const Box& box) const override ;
45
+ [[nodiscard]] Interval VisitMultiplication (const Expression& e, const Box& box) const override ;
46
+ [[nodiscard]] Interval VisitDivision (const Expression& e, const Box& box) const override ;
47
+ [[nodiscard]] Interval VisitLog (const Expression& e, const Box& box) const override ;
48
+ [[nodiscard]] Interval VisitAbs (const Expression& e, const Box& box) const override ;
49
+ [[nodiscard]] Interval VisitExp (const Expression& e, const Box& box) const override ;
50
+ [[nodiscard]] Interval VisitSqrt (const Expression& e, const Box& box) const override ;
51
+ [[nodiscard]] Interval VisitPow (const Expression& e, const Box& box) const override ;
47
52
48
53
// Evaluates `pow(e1, e2)` with the @p box.
49
54
[[nodiscard]] Interval VisitPow (const Expression& e1 , const Expression& e2 , const Box& box) const ;
50
- [[nodiscard]] Interval VisitSin (const Expression& e, const Box& box) const ;
51
- [[nodiscard]] Interval VisitCos (const Expression& e, const Box& box) const ;
52
- [[nodiscard]] Interval VisitTan (const Expression& e, const Box& box) const ;
53
- [[nodiscard]] Interval VisitAsin (const Expression& e, const Box& box) const ;
54
- [[nodiscard]] Interval VisitAcos (const Expression& e, const Box& box) const ;
55
- [[nodiscard]] Interval VisitAtan (const Expression& e, const Box& box) const ;
56
- [[nodiscard]] Interval VisitAtan2 (const Expression& e, const Box& box) const ;
57
- [[nodiscard]] Interval VisitSinh (const Expression& e, const Box& box) const ;
58
- [[nodiscard]] Interval VisitCosh (const Expression& e, const Box& box) const ;
59
- [[nodiscard]] Interval VisitTanh (const Expression& e, const Box& box) const ;
60
- [[nodiscard]] Interval VisitMin (const Expression& e, const Box& box) const ;
61
- [[nodiscard]] Interval VisitMax (const Expression& e, const Box& box) const ;
62
- static Interval VisitIfThenElse (const Expression& e, const Box& box);
63
- static Interval VisitUninterpretedFunction (const Expression& e, const Box& box);
64
-
65
- // Makes VisitExpression a friend of this class so that it can use private
66
- // operator()s.
67
- friend Interval drake::symbolic::VisitExpression<Interval>(const ExpressionEvaluator*, const Expression&, const Box&);
55
+ [[nodiscard]] Interval VisitSin (const Expression& e, const Box& box) const override ;
56
+ [[nodiscard]] Interval VisitCos (const Expression& e, const Box& box) const override ;
57
+ [[nodiscard]] Interval VisitTan (const Expression& e, const Box& box) const override ;
58
+ [[nodiscard]] Interval VisitAsin (const Expression& e, const Box& box) const override ;
59
+ [[nodiscard]] Interval VisitAcos (const Expression& e, const Box& box) const override ;
60
+ [[nodiscard]] Interval VisitAtan (const Expression& e, const Box& box) const override ;
61
+ [[nodiscard]] Interval VisitAtan2 (const Expression& e, const Box& box) const override ;
62
+ [[nodiscard]] Interval VisitSinh (const Expression& e, const Box& box) const override ;
63
+ [[nodiscard]] Interval VisitCosh (const Expression& e, const Box& box) const override ;
64
+ [[nodiscard]] Interval VisitTanh (const Expression& e, const Box& box) const override ;
65
+ [[nodiscard]] Interval VisitMin (const Expression& e, const Box& box) const override ;
66
+ [[nodiscard]] Interval VisitMax (const Expression& e, const Box& box) const override ;
67
+ [[nodiscard]] Interval VisitIfThenElse (const Expression& e, const Box& box) const override ;
68
+ [[nodiscard]] Interval VisitUninterpretedFunction (const Expression& e, const Box& box) const override ;
68
69
69
70
const Expression e_;
70
71
};
0 commit comments