1#ifndef CYTNX_INTRUSIVE_PTR_BASE_H_
2#define CYTNX_INTRUSIVE_PTR_BASE_H_
6#include <boost/smart_ptr/intrusive_ptr.hpp>
7#include <boost/checked_delete.hpp>
8#include <boost/detail/atomic_count.hpp>
13 class intrusive_ptr_base {
22 intrusive_ptr_base(intrusive_ptr_base<T>
const &) : ref_count(0) {
27 intrusive_ptr_base &operator=(intrusive_ptr_base
const &rhs) {
33 friend void intrusive_ptr_add_ref(T *s) {
36 auto &base =
static_cast<const intrusive_ptr_base<T> &
>(*s);
37 assert(base.ref_count >= 0);
41 friend void intrusive_ptr_release(T *s) {
44 auto &base =
static_cast<const intrusive_ptr_base<T> &
>(*s);
45 assert(base.ref_count > 0);
46 if (--base.ref_count == 0) boost::checked_delete(
static_cast<T
const *
>(s));
49 boost::intrusive_ptr<T> self() {
return boost::intrusive_ptr<T>((T *)
this); }
51 boost::intrusive_ptr<const T> self()
const {
52 return boost::intrusive_ptr<const T>((T
const *)
this);
55 int refcount()
const {
return ref_count; }
59 mutable boost::detail::atomic_count ref_count;
Definition Accessor.hpp:12