55 if (state_ == Occupied) {
56 key_buffer_.
ref().~Key();
66 state_ = other.state_;
67 if (other.state_ == Occupied) {
68 new (&key_buffer_)
Key(*other.key_buffer_);
79 state_ = other.state_;
80 if (other.state_ == Occupied) {
81 new (&key_buffer_)
Key(std::move(*other.key_buffer_));
106 return state_ == Occupied;
114 return state_ == Empty;
124 return hash(*key_buffer_);
131 template<
typename ForwardKey,
typename IsEqual>
134 if (state_ == Occupied) {
135 return is_equal(
key, *key_buffer_);
147 new (&key_buffer_)
Key(std::forward<ForwardKey>(
key));
157 key_buffer_.
ref().~Key();
186 if (state_ == Occupied) {
187 key_buffer_.
ref().~Key();
193 state_ = other.state_;
194 if (other.state_ == Occupied) {
196 new (&key_buffer_)
Key(*other.key_buffer_);
202 state_ = other.state_;
203 if (other.state_ == Occupied) {
205 new (&key_buffer_)
Key(std::move(*other.key_buffer_));
221 return state_ == Occupied;
226 return state_ == Empty;
235 template<
typename ForwardKey,
typename IsEqual>
240 if (state_ == Occupied) {
241 return is_equal(
key, *key_buffer_);
250 new (&key_buffer_)
Key(std::forward<ForwardKey>(
key));
258 key_buffer_.
ref().~Key();
273 Key key_ = KeyInfo::get_empty();
294 return KeyInfo::is_not_empty_or_removed(key_);
299 return KeyInfo::is_empty(key_);
308 template<
typename ForwardKey,
typename IsEqual>
312 return is_equal(key_,
key);
319 key_ = std::forward<ForwardKey>(
key);
333 template<
typename Int, Int EmptyValue, Int RemovedValue>
HashedSetSlot(HashedSetSlot &&other) noexcept(std::is_nothrow_move_constructible_v< Key >)
uint64_t get_hash(const Hash &UNUSED(hash)) const
bool contains(const ForwardKey &key, const IsEqual &is_equal, const uint64_t hash) const
void occupy(ForwardKey &&key, const uint64_t hash)
HashedSetSlot(const HashedSetSlot &other)
IntrusiveSetSlot()=default
uint64_t get_hash(const Hash &hash) const
IntrusiveSetSlot(IntrusiveSetSlot &&other) noexcept(std::is_nothrow_move_constructible_v< Key >)=default
void occupy(ForwardKey &&key, const uint64_t UNUSED(hash))
IntrusiveSetSlot(const IntrusiveSetSlot &other)=default
bool contains(const ForwardKey &key, const IsEqual &is_equal, const uint64_t UNUSED(hash)) const
~IntrusiveSetSlot()=default
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint64_t UNUSED(hash)) const
SimpleSetSlot(SimpleSetSlot &&other) noexcept(std::is_nothrow_move_constructible_v< Key >)
uint64_t get_hash(const Hash &hash) const
SimpleSetSlot(const SimpleSetSlot &other)
void occupy(ForwardKey &&key, uint64_t UNUSED(hash))
bool remove(void *owner, const AttributeIDRef &attribute_id)
unsigned __int64 uint64_t