smats
0.0.1
Satisfability Modulo Arithmetic Theories Symbols
Loading...
Searching...
No Matches
expression_visitor.h
1
10
#pragma once
11
12
#include "smats/symbolic/expression.h"
13
#include "smats/symbolic/expression_kind.h"
14
#include "smats/util/exception.h"
15
#include "smats/util/visitor.h"
16
17
namespace
smats
{
18
19
template
<
class
T,
class
... Args>
20
class
ExpressionVisitor
:
public
Visitor
<Expression<T>> {
21
public
:
22
void
visit(
const
Expression<T>
&e, Args... args)
override
{
23
switch
(e.
kind
()) {
24
case
ExpressionKind::Constant
:
25
visit_constant(e, args...);
26
break
;
27
case
ExpressionKind::Var
:
28
visit_var(e, args...);
29
break
;
30
case
ExpressionKind::Add
:
31
visit_add(e, args...);
32
break
;
33
case
ExpressionKind::Mul
:
34
visit_mul(e, args...);
35
break
;
36
case
ExpressionKind::Div
:
37
visit_div(e, args...);
38
break
;
39
case
ExpressionKind::Log
:
40
visit_log(e, args...);
41
break
;
42
case
ExpressionKind::Abs
:
43
visit_abs(e, args...);
44
break
;
45
case
ExpressionKind::Pow
:
46
visit_pow(e, args...);
47
break
;
48
default
:
49
throw
SmatsUnreachable
(
"Unknown expression kind"
);
50
}
51
}
52
53
private
:
54
virtual
void
visit_constant(
Expression<T>
&e, Args... args) = 0;
55
virtual
void
visit_var(
Expression<T>
&e, Args... args) = 0;
56
virtual
void
visit_add(
Expression<T>
&e, Args... args) = 0;
57
virtual
void
visit_mul(
Expression<T>
&e, Args... args) = 0;
58
virtual
void
visit_div(
Expression<T>
&e, Args... args) = 0;
59
virtual
void
visit_log(
Expression<T>
&e, Args... args) = 0;
60
virtual
void
visit_abs(
Expression<T>
&e, Args... args) = 0;
61
virtual
void
visit_pow(
Expression<T>
&e, Args... args) = 0;
62
};
63
64
}
// namespace smats
smats::ExpressionVisitor
Definition
expression_visitor.h:20
smats::Expression
Definition
expression.h:185
smats::Expression::kind
ExpressionKind kind() const
Definition
expression.cpp:36
smats::SmatsUnreachable
Definition
exception.h:58
smats::Visitor
Definition
visitor.h:14
smats
ExpressionKind enum.
smats::ExpressionKind::Abs
@ Abs
absolute value function
smats::ExpressionKind::Div
@ Div
division (/)
smats::ExpressionKind::Var
@ Var
variable
smats::ExpressionKind::Mul
@ Mul
multiplication (*)
smats::ExpressionKind::Pow
@ Pow
power function
smats::ExpressionKind::Constant
@ Constant
constant (double)
smats::ExpressionKind::Log
@ Log
logarithms
smats::ExpressionKind::Add
@ Add
addition (+)
smats
symbolic
expression_visitor.h
Generated by
1.11.0