Shkyera Engine
Easy to use, game engine for Python
Loading...
Searching...
No Matches
BiMap.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <unordered_map>
4
5namespace shkyera::common {
6
7template <typename First, typename Second, template <typename, typename> class Impl = std::unordered_map>
8class BiMap {
9 public:
10 using ForwardMap = Impl<First, Second>;
11 using BackwardMap = Impl<Second, First>;
12
13 bool empty() const { return forward.empty(); }
14
15 void clear() {
16 forward.clear();
17 backward.clear();
18 }
19
20 const Second& at(const First& first) const { return forward.at(first); }
21
22 const First& at(const Second& second) const { return backward.at(second); }
23
24 void insert(First first, Second second) {
25 forward[first] = second;
26 backward[second] = first;
27 }
28
29 void remove(First first) {
30 const auto& second = at(first);
31 backward.erase(second);
32 forward.erase(first);
33 }
34
35 void remove(Second second) {
36 const auto& first = at(second);
37 forward.erase(first);
38 backward.erase(second);
39 }
40
41 private:
44};
45
46} // namespace shkyera::common
Definition BiMap.hpp:8
const Second & at(const First &first) const
Definition BiMap.hpp:20
void clear()
Definition BiMap.hpp:15
bool empty() const
Definition BiMap.hpp:13
Impl< Second, First > BackwardMap
Definition BiMap.hpp:11
const First & at(const Second &second) const
Definition BiMap.hpp:22
BackwardMap backward
Definition BiMap.hpp:43
void remove(Second second)
Definition BiMap.hpp:35
void insert(First first, Second second)
Definition BiMap.hpp:24
ForwardMap forward
Definition BiMap.hpp:42
Impl< First, Second > ForwardMap
Definition BiMap.hpp:10
void remove(First first)
Definition BiMap.hpp:29
Definition BiMap.hpp:5