29template<
typename Src1,
typename Src2,
typename Dst1,
typename Dst2>
32 new ((
void *)dst1) Dst1(std::forward<Src1>(src1));
34 new ((
void *)dst2) Dst2(std::forward<Src2>(src2));
73 if (state_ == Occupied) {
74 key_buffer_.
ref().~Key();
75 value_buffer_.
ref().~Value();
85 state_ = other.state_;
86 if (other.state_ == Occupied) {
88 other.value_buffer_.ref(),
100 std::is_nothrow_move_constructible_v<Value>)
102 state_ = other.state_;
103 if (other.state_ == Occupied) {
105 std::move(other.value_buffer_.ref()),
107 value_buffer_.
ptr());
132 return value_buffer_;
140 return value_buffer_;
148 return state_ == Occupied;
156 return state_ == Empty;
166 return hash(*key_buffer_);
173 template<
typename ForwardKey,
typename IsEqual>
176 if (state_ == Occupied) {
177 return is_equal(
key, *key_buffer_);
186 template<
typename ForwardKey,
typename... ForwardValue>
190 new (&value_buffer_)
Value(std::forward<ForwardValue>(value)...);
203 new (&key_buffer_)
Key(std::forward<ForwardKey>(
key));
207 value_buffer_.
ref().~Value();
220 key_buffer_.
ref().~Key();
221 value_buffer_.
ref().~Value();
236 Key key_ = KeyInfo::get_empty();
244 if (KeyInfo::is_not_empty_or_removed(key_)) {
245 value_buffer_.
ref().~Value();
251 if (KeyInfo::is_not_empty_or_removed(key_)) {
252 new (&value_buffer_)
Value(*other.value_buffer_);
258 if (KeyInfo::is_not_empty_or_removed(key_)) {
259 new (&value_buffer_)
Value(std::move(*other.value_buffer_));
275 return value_buffer_;
280 return value_buffer_;
285 return KeyInfo::is_not_empty_or_removed(key_);
290 return KeyInfo::is_empty(key_);
299 template<
typename ForwardKey,
typename IsEqual>
303 return is_equal(
key, key_);
306 template<
typename ForwardKey,
typename... ForwardValue>
311 new (&value_buffer_)
Value(std::forward<ForwardValue>(value)...);
320 key_ = std::forward<ForwardKey>(
key);
323 value_buffer_.
ref().~Value();
331 value_buffer_.
ref().~Value();
332 KeyInfo::remove(key_);
336template<
typename Key,
typename Value>
struct DefaultMapSlot;
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue Hue Saturation Value
void occupy_no_value(ForwardKey &&key, uint64_t)
const Value * value() const
IntrusiveMapSlot(IntrusiveMapSlot &&other) noexcept
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint64_t) const
IntrusiveMapSlot(const IntrusiveMapSlot &other)
void occupy(ForwardKey &&key, uint64_t hash, ForwardValue &&...value)
uint64_t get_hash(const Hash &hash)
IntrusiveMapSlot()=default
SimpleMapSlot(const SimpleMapSlot &other)
SimpleMapSlot(SimpleMapSlot &&other) noexcept(std::is_nothrow_move_constructible_v< Key > &&std::is_nothrow_move_constructible_v< Value >)
const Value * value() const
uint64_t get_hash(const Hash &hash)
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint64_t) const
void occupy(ForwardKey &&key, uint64_t hash, ForwardValue &&...value)
void occupy_no_value(ForwardKey &&key, uint64_t)
void initialize_pointer_pair(Src1 &&src1, Src2 &&src2, Dst1 *dst1, Dst2 *dst2)
unsigned __int64 uint64_t