10#ifndef MCRL2_UTILITIES_UNORDERED_MAP_IMPLEMENTATION_H
11#define MCRL2_UTILITIES_UNORDERED_MAP_IMPLEMENTATION_H
16#define MCRL2_UNORDERED_MAP_TEMPLATES template<typename Key, typename T, typename Hash, typename Equals, typename Allocator, bool ThreadSafe, bool Resize>
17#define MCRL2_UNORDERED_MAP_CLASS unordered_map<Key, T, Hash, Equals, Allocator, ThreadSafe, Resize>
23template<
typename ...Args>
24auto MCRL2_UNORDERED_MAP_CLASS::try_emplace(
const key_type& key, Args&&... args) -> std::pair<iterator, bool>
26 m_set.rehash_if_needed();
28 std::size_t bucket = m_set.find_bucket_index(key);
30 iterator it = m_set.find_impl(bucket, key);
33 return std::make_pair(it,
false);
37 auto [x, y] = m_set.emplace_impl(bucket, key, std::forward<Args>(args)...);
38 return std::make_pair(iterator(x), y);
43T& MCRL2_UNORDERED_MAP_CLASS::operator[](
const key_type& key)
47 auto pair = m_set.emplace(std::make_pair(key, mapped_type()));
50 return const_cast<mapped_type&
>((*pair.first).second);
54const T& MCRL2_UNORDERED_MAP_CLASS::at(
const key_type& key)
const
56 auto it = m_set.find(key);
57 assert(it != m_set.end());
61#undef MCRL2_UNORDERED_MAP_TEMPLATES
62#undef MCRL2_UNORDERED_MAP_CLASS
#define MCRL2_UNORDERED_MAP_TEMPLATES