6 #ifndef XENIUM_DETAL_CONCURRENT_PTR_HPP
7 #define XENIUM_DETAL_CONCURRENT_PTR_HPP
9 #include <xenium/marked_ptr.hpp>
13 namespace xenium{
namespace reclamation {
namespace detail {
19 template <
class,
class MarkedPtr>
class GuardPtr
24 using guard_ptr = GuardPtr<T, marked_ptr>;
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;