23 #include <glog/logging.h> 39 template <
template <
typename>
class Atom>
43 template <
template <
typename>
class>
45 template <
typename,
template <
typename>
class,
typename>
47 template <
typename,
template <
typename>
class,
typename>
49 template <
template <
typename>
class>
51 template <
template <
typename>
class>
80 template <
typename,
template <
typename>
class,
typename>
82 template <
typename,
template <
typename>
class,
typename>
110 #if FOLLY_HAZPTR_THR_LOCAL 111 if (&domain == &default_hazptr_domain<Atom>() && !domain.
shutdown_) {
112 hazptr_priv_tls<Atom>().push(
this);
121 CHECK_EQ(next_,
this);
130 template <
template <
typename>
class Atom>
140 : head_(obj), tail_(obj), count_(1) {}
146 : head_(head), tail_(tail), count_(
count) {}
161 obj->set_next(head_);
163 if (tail_ ==
nullptr) {
170 if (l.
count() == 0) {
176 tail_->set_next(l.
head());
195 template <
typename T,
typename D>
209 template <
typename T>
224 template <
typename T,
template <
typename>
class Atom,
typename D>
250 auto obj =
static_cast<T*
>(hobp);
251 hobp->delete_obj(obj);
void splice(hazptr_obj_list< Atom > &l)
hazptr_obj< Atom > & operator=(hazptr_obj< Atom > &&) noexcept
hazptr_obj(hazptr_obj< Atom > &&) noexcept
ReclaimFnPtr reclaim() noexcept
hazptr_obj_list(hazptr_obj< Atom > *head, hazptr_obj< Atom > *tail, int count) noexcept
void push(hazptr_obj< Atom > *obj)
hazptr_obj< Atom > * tail()
void pre_retire(D deleter)
constexpr detail::Map< Move > move
void retire(D deleter={}, hazptr_domain< Atom > &domain=default_hazptr_domain< Atom >())
hazptr_obj< Atom > * head_
void set_deleter(std::default_delete< T >={})
hazptr_obj(const hazptr_obj< Atom > &) noexcept
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
hazptr_obj< Atom > * head()
FOLLY_NOINLINE void pre_retire_check_fail() noexcept
void(*)(hazptr_obj< Atom > *, hazptr_obj_list< Atom > &) ReclaimFnPtr
hazptr_obj_list() noexcept
hazptr_obj< Atom > * tail_
void pre_retire_check() noexcept
void set_next(hazptr_obj *obj) noexcept
hazptr_obj< Atom > & operator=(const hazptr_obj< Atom > &) noexcept
void retire(hazptr_domain< Atom > &domain)
const void * raw_ptr() const
hazptr_obj< Atom > * next() const noexcept
void push_to_retired(hazptr_domain< Atom > &domain)
hazptr_obj< Atom > * next_
hazptr_obj_list(hazptr_obj< Atom > *obj) noexcept
void hazptr_domain_push_retired(hazptr_obj_list< Atom > &l, bool check=true, hazptr_domain< Atom > &domain=default_hazptr_domain< Atom >()) noexcept
friend class hazptr_obj_base_refcounted