11struct MemberHook final {
13 auto& operator()(T& node)
const noexcept {
18template <
typename HookExtractor1,
typename HookExtractor2>
19struct CombinedHook final {
20 static_assert(std::is_empty_v<HookExtractor1>);
21 static_assert(std::is_empty_v<HookExtractor2>);
24 auto& operator()(T& node)
const noexcept {
25 return HookExtractor2{}(HookExtractor1{}(node));
30class SinglyLinkedHook final {
32 SinglyLinkedHook() =
default;
35 template <
typename U,
typename HookExtractor>
36 friend class IntrusiveStack;
38 friend class IntrusiveMpscQueueImpl;
40 std::atomic<T*> next_{
nullptr};
44struct IntrusiveWalkablePoolHook final {
45 SinglyLinkedHook<T> permanent_list_hook;
46 SinglyLinkedHook<T> free_list_hook;
50class SinglyLinkedBaseHook {
52 SinglyLinkedHook<SinglyLinkedBaseHook> singly_linked_hook;