7#include "unfair_mutex.hpp"
12#include <unordered_map>
15namespace hi::inline v1 {
30 using value_type = Key;
31 using size_type = size_t;
32 using map_type = std::conditional_t<
37 using difference_type = ptrdiff_t;
39 using const_reference = value_type
const&;
40 using pointer = value_type
const *;
41 using const_pointer = value_type
const *;
50 [[nodiscard]]
size_t size()
const noexcept
52 hilet lock = std::scoped_lock(_mutex);
53 return _vector.size();
56 [[nodiscard]]
bool empty()
const noexcept
61 operator bool()
const noexcept
72 [[nodiscard]] const_reference
operator[](
size_t index)
const noexcept
74 hilet lock = std::scoped_lock(_mutex);
75 hi_axiom(index < _vector.size());
76 return *_vector[index];
88 template<
typename Arg>
89 [[nodiscard]]
size_t insert(Arg&& arg)
noexcept requires(std::is_same_v<std::decay_t<Arg>, value_type>)
91 hilet lock = std::scoped_lock(_mutex);
93 hilet[it, is_inserted] = _map.emplace(std::forward<Arg>(arg), _vector.size());
109 template<
typename... Args>
110 [[nodiscard]]
size_t emplace(Args&&...args)
noexcept
112 hilet lock = std::scoped_lock(_mutex);
114 hilet[it, is_inserted] = _map.emplace(value_type{std::forward<Args>(args)...}, _vector.size());
#define hilet
Invariant should be the default for variables.
Definition required.hpp:23
This is a set of object with stable indices.
Definition stable_set.hpp:28
size_t insert(Arg &&arg) noexcept
Insert an object into the stable-set.
Definition stable_set.hpp:89
size_t emplace(Args &&...args) noexcept
Emplace an object into the stable-set.
Definition stable_set.hpp:110
const_reference operator[](size_t index) const noexcept
Get a const reference to an object located at an index in the set.
Definition stable_set.hpp:72
Definition concepts.hpp:36
Definition concepts.hpp:39