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
15namespace smats {
16
17template <class T>
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
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
35 ExpressionAddFactory<T> &add(const T &o);
37 ExpressionAddFactory<T> &add(const std::shared_ptr<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
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
55template <class T>
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);
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
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
Definition expression_factory.h:18
Definition expression_cell.h:54
Definition expression_factory.h:56
Definition expression.h:185
ExpressionKind enum.