21 class concurrent_ptr {
24 using guard_ptr = GuardPtr<T, marked_ptr>;
26 concurrent_ptr(
const marked_ptr& p = marked_ptr()) noexcept : ptr(p) {}
27 concurrent_ptr(
const concurrent_ptr&) =
delete;
28 concurrent_ptr(concurrent_ptr&&) =
delete;
29 concurrent_ptr& operator=(
const concurrent_ptr&) =
delete;
30 concurrent_ptr& operator=(concurrent_ptr&&) =
delete;
33 marked_ptr load(std::memory_order order = std::memory_order_seq_cst)
const
35 return ptr.load(order);
39 void store(
const marked_ptr& src, std::memory_order order = std::memory_order_seq_cst)
41 ptr.store(src, order);
45 void store(
const guard_ptr& src, std::memory_order order = std::memory_order_seq_cst)
47 ptr.store(src.
get(), order);
50 bool compare_exchange_weak(marked_ptr& expected, marked_ptr desired, std::memory_order order = std::memory_order_seq_cst)
52 return ptr.compare_exchange_weak(expected, desired, order);
55 bool compare_exchange_weak(marked_ptr& expected, marked_ptr desired, std::memory_order order = std::memory_order_seq_cst)
volatile
57 return ptr.compare_exchange_weak(expected, desired, order);
60 bool compare_exchange_weak(marked_ptr& expected, marked_ptr desired, std::memory_order success, std::memory_order failure)
62 return ptr.compare_exchange_weak(expected, desired, success, failure);
65 bool compare_exchange_weak(marked_ptr& expected, marked_ptr desired, std::memory_order success, std::memory_order failure)
volatile
67 return ptr.compare_exchange_weak(expected, desired, success, failure);
70 bool compare_exchange_strong(marked_ptr& expected, marked_ptr desired, std::memory_order order = std::memory_order_seq_cst)
72 return ptr.compare_exchange_strong(expected, desired, order);
75 bool compare_exchange_strong(marked_ptr& expected, marked_ptr desired, std::memory_order order = std::memory_order_seq_cst)
volatile
77 return ptr.compare_exchange_strong(expected, desired, order);
80 bool compare_exchange_strong(marked_ptr& expected, marked_ptr desired, std::memory_order success, std::memory_order failure)
82 return ptr.compare_exchange_strong(expected, desired, success, failure);
85 bool compare_exchange_strong(marked_ptr& expected, marked_ptr desired, std::memory_order success, std::memory_order failure)
volatile
87 return ptr.compare_exchange_strong(expected, desired, success, failure);
91 std::atomic<marked_ptr> ptr;