smats
0.0.1
Satisfability Modulo Arithmetic Theories Symbols
Loading...
Searching...
No Matches
expression_factory.h
1
7
#pragma once
8
9
#include <map>
10
#include <memory>
11
12
#include "smats/symbolic/expression.h"
13
#include "smats/symbolic/expression_cell.h"
14
15
namespace
smats
{
16
17
template
<
class
T>
18
class
ExpressionAddFactory
{
19
public
:
20
using
ExpressionMap = std::map<Expression<T>, T>;
21
22
ExpressionAddFactory
() =
default
;
23
ExpressionAddFactory
(T constant, ExpressionMap expr_to_coeff_map);
24
explicit
ExpressionAddFactory
(
const
Expression<T>
&e);
25
explicit
ExpressionAddFactory
(
const
std::shared_ptr<
const
ExpressionCell<T>
> &e);
26
explicit
ExpressionAddFactory
(
const
ExpressionCell<T>
&e);
27
28
ExpressionAddFactory<T>
&operator+=(
const
ExpressionAddFactory<T>
&o);
29
ExpressionAddFactory<T>
&operator+=(
const
T &o);
30
ExpressionAddFactory<T>
&operator+=(
const
Expression<T>
&o);
31
ExpressionAddFactory<T>
&operator+=(
const
std::shared_ptr<
ExpressionCell<T>
> &o);
32
ExpressionAddFactory<T>
&operator+=(
const
ExpressionCell<T>
&o);
33
34
ExpressionAddFactory<T>
&add(
const
ExpressionAddFactory<T>
&o);
35
ExpressionAddFactory<T>
&add(
const
T &o);
36
ExpressionAddFactory<T>
&add(
const
Expression<T>
&o);
37
ExpressionAddFactory<T>
&add(
const
std::shared_ptr<
ExpressionCell<T>
> &o);
38
ExpressionAddFactory<T>
&add(
const
ExpressionCell<T>
&o);
39
40
ExpressionAddFactory<T>
&add(
const
T &constant,
const
ExpressionMap &expr_to_coeff_map);
41
ExpressionAddFactory<T>
&add(
const
T &coeff,
const
Expression<T>
&expr);
42
43
ExpressionAddFactory<T>
&negate();
44
45
[[nodiscard]]
Expression<T>
build()
const
;
46
[[nodiscard]]
Expression<T>
consume();
47
48
private
:
49
bool
consumed_{
false
};
50
bool
is_expanded_{
false
};
51
T constant_{0};
52
ExpressionMap expr_to_coeff_map_;
53
};
54
55
template
<
class
T>
56
class
ExpressionMulFactory
{
57
public
:
58
using
ExpressionMap = std::map<Expression<T>,
Expression<T>
>;
59
60
ExpressionMulFactory
(T constant, ExpressionMap expr_to_coeff_map);
61
explicit
ExpressionMulFactory
(
const
Expression<T>
&e);
62
explicit
ExpressionMulFactory
(
const
std::shared_ptr<
const
ExpressionCell<T>
> &e);
63
explicit
ExpressionMulFactory
(
const
ExpressionCell<T>
&e);
64
65
ExpressionMulFactory<T>
&operator*=(
const
T &o);
66
ExpressionMulFactory<T>
&operator*=(
const
Expression<T>
&o);
67
ExpressionMulFactory<T>
&operator*=(
const
std::shared_ptr<
ExpressionCell<T>
> &o);
68
ExpressionMulFactory<T>
&operator*=(
const
ExpressionCell<T>
&o);
69
70
ExpressionMulFactory<T>
&multiply(
const
T &o);
71
ExpressionMulFactory<T>
&multiply(
const
Expression<T>
&o);
72
ExpressionMulFactory<T>
&multiply(
const
std::shared_ptr<
ExpressionCell<T>
> &o);
73
ExpressionMulFactory<T>
&multiply(
const
ExpressionCell<T>
&o);
74
ExpressionMulFactory<T>
&multiply(
const
T &constant,
const
ExpressionMap &expr_to_coeff_map);
75
ExpressionMulFactory<T>
&multiply(
const
Expression<T>
&base,
const
Expression<T>
&exponent);
76
77
ExpressionMulFactory<T>
&negate();
78
79
[[nodiscard]]
Expression<T>
build()
const
;
80
Expression<T>
consume();
81
82
private
:
83
bool
consumed_{
false
};
84
bool
is_expanded_{
false
};
85
T constant_{1};
86
ExpressionMap base_to_exponent_map_;
87
};
88
}
// namespace smats
smats::ExpressionAddFactory
Definition
expression_factory.h:18
smats::ExpressionCell
Definition
expression_cell.h:54
smats::ExpressionMulFactory
Definition
expression_factory.h:56
smats::Expression
Definition
expression.h:185
smats
ExpressionKind enum.
smats
symbolic
expression_factory.h
Generated by
1.11.0