smats  0.0.1
Satisfability Modulo Arithmetic Theories Symbols
Loading...
Searching...
No Matches
environment.h
1
9#pragma once
10
11#include <algorithm>
12#include <cstddef>
13#include <initializer_list>
14#include <ostream>
15#include <span>
16#include <unordered_map>
17
18#include "smats/symbolic/variable.h"
19#include "smats/symbolic/variables.h"
20
21namespace smats {
44template <class T>
46 public:
47 using key_type = Variable;
48 using mapped_type = T;
49 using map = std::unordered_map<key_type, T>;
50 using value_type = map::value_type;
51 using iterator = map::iterator;
52 using const_iterator = map::const_iterator;
53
55 Environment() = default;
56
62 explicit Environment(std::initializer_list<value_type> init);
63
69 explicit Environment(std::span<const value_type> init);
70
78 explicit Environment(std::initializer_list<key_type> vars);
79
87 explicit Environment(std::span<const key_type> vars);
88
94 explicit Environment(map m);
95
97 iterator begin() { return map_.begin(); }
99 iterator end() { return map_.end(); }
101 [[nodiscard]] const_iterator begin() const { return map_.cbegin(); }
103 [[nodiscard]] const_iterator end() const { return map_.cend(); }
105 [[nodiscard]] const_iterator cbegin() const { return map_.cbegin(); }
107 [[nodiscard]] const_iterator cend() const { return map_.cend(); }
108
118 void insert(const key_type& key, const T& elem);
124 void insert_or_assign(const key_type& key, const T& elem);
125
127 [[nodiscard]] bool empty() const { return map_.empty(); }
129 [[nodiscard]] std::size_t size() const { return map_.size(); }
131 [[nodiscard]] Variables domain() const;
132
138 [[nodiscard]] bool contains(const key_type& key) const { return map_.contains(key); }
144 iterator find(const key_type& key) { return map_.find(key); }
150 [[nodiscard]] const_iterator find(const key_type& key) const { return map_.find(key); }
151
158 [[nodiscard]] const T& at(const key_type& key) const;
159
165 T& operator[](const key_type& key);
166
173 const T& operator[](const key_type& key) const;
174
175 bool operator==(const Environment<T>& other) const;
176
177 private:
178 map map_;
179};
180
181template <class T>
182std::ostream& operator<<(std::ostream& os, const Environment<T>& env);
183
188
189extern template class Environment<int>;
190extern template class Environment<long>;
191extern template class Environment<float>;
192extern template class Environment<double>;
193
194} // namespace smats
Definition environment.h:45
const T & at(const key_type &key) const
Definition environment.cpp:70
const_iterator cbegin() const
Definition environment.h:105
const_iterator find(const key_type &key) const
Definition environment.h:150
const_iterator cend() const
Definition environment.h:107
iterator find(const key_type &key)
Definition environment.h:144
T & operator[](const key_type &key)
Definition environment.cpp:75
Variables domain() const
Definition environment.cpp:63
void insert(const key_type &key, const T &elem)
Definition environment.cpp:51
Environment()=default
bool contains(const key_type &key) const
Definition environment.h:138
bool empty() const
Definition environment.h:127
std::size_t size() const
Definition environment.h:129
map map_
map between variables and values
Definition environment.h:178
iterator end()
Definition environment.h:99
const_iterator end() const
Definition environment.h:103
void insert_or_assign(const key_type &key, const T &elem)
Definition environment.cpp:57
iterator begin()
Definition environment.h:97
const_iterator begin() const
Definition environment.h:101
Definition variable.h:34
Definition variables.h:27
ExpressionKind enum.