5#include <unordered_map>
8template <
typename TLeft,
typename TRight>
class BiMap {
18 void Add(const TLeft &left, const TRight &right)
20 if (
auto existingIt = this->
_leftToRight.find(left); existingIt != this->_leftToRight.end())
22 this->_rightToLeft.erase(existingIt->second);
24 if (
auto existingRightIt = this->
_rightToLeft.find(right); existingRightIt != this->_rightToLeft.end())
26 this->_leftToRight.erase(existingRightIt->second);
28 this->_leftToRight.insert_or_assign(left, right);
29 this->_rightToLeft.insert_or_assign(right, left);
50 const TRight &
Get(
const TLeft &left)
const {
return this->
_leftToRight.at(left); }
51 const TLeft &
Get(
const TRight &right)
const {
return this->
_rightToLeft.at(right); }
void Add(const Engine::EntityId &left, const JPH::BodyID &right)
Definition BiMap.hpp:18
void Remove(const TRight &right)
Definition BiMap.hpp:40
bool Contains(const TLeft &left) const
Definition BiMap.hpp:52
std::unordered_map< JPH::BodyID, Engine::EntityId > _rightToLeft
Definition BiMap.hpp:57
bool Contains(const TRight &right) const
Definition BiMap.hpp:53
BiMap(const BiMap &)=delete
std::unordered_map< Engine::EntityId, JPH::BodyID > _leftToRight
Definition BiMap.hpp:56
void Remove(const TLeft &left)
Definition BiMap.hpp:31
const TLeft & Get(const TRight &right) const
Definition BiMap.hpp:51
BiMap & operator=(const BiMap &)=delete
auto Size() const
Definition BiMap.hpp:49
BiMap(BiMap &&) noexcept=default
const TRight & Get(const TLeft &left) const
Definition BiMap.hpp:50