7#include "utility/module.hpp"
8#include "concurrency/module.hpp"
13#include <unordered_map>
16namespace hi::inline
v1 {
31 using value_type = Key;
32 using size_type = size_t;
33 using map_type = std::conditional_t<
38 using difference_type = ptrdiff_t;
40 using const_reference = value_type
const&;
41 using pointer = value_type
const *;
42 using const_pointer = value_type
const *;
51 [[nodiscard]]
size_t size()
const noexcept
53 hilet lock = std::scoped_lock(_mutex);
54 return _vector.size();
57 [[nodiscard]]
bool empty()
const noexcept
62 operator bool()
const noexcept
73 [[nodiscard]] const_reference
operator[](
size_t index)
const noexcept
75 hilet lock = std::scoped_lock(_mutex);
77 return *_vector[index];
89 template<
typename Arg>
90 [[nodiscard]]
size_t insert(Arg&& arg)
noexcept requires(std::is_same_v<std::decay_t<Arg>, value_type>)
92 hilet lock = std::scoped_lock(_mutex);
94 hilet[it, is_inserted] = _map.emplace(std::forward<Arg>(arg), _vector.size());
110 template<
typename... Args>
111 [[nodiscard]]
size_t emplace(Args&&...args)
noexcept
113 hilet lock = std::scoped_lock(_mutex);
115 hilet[it, is_inserted] = _map.emplace(value_type{std::forward<Args>(args)...}, _vector.size());
128 mutable unfair_mutex _mutex;
#define hi_assert_bounds(x,...)
Assert if a value is within bounds.
Definition assert.hpp:225
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
DOXYGEN BUG.
Definition algorithm.hpp:13
This is a set of object with stable indices.
Definition stable_set.hpp:29
size_t insert(Arg &&arg) noexcept
Insert an object into the stable-set.
Definition stable_set.hpp:90
size_t emplace(Args &&...args) noexcept
Emplace an object into the stable-set.
Definition stable_set.hpp:111
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:73
Definition concepts.hpp:36
Definition concepts.hpp:39