19 template<concepts::RemoveCVRefSameAs<Atomic> Self>
20 constexpr auto as_ref(
this Self&& self) {
28 constexpr explicit Atomic(T value) : m_value(value) {}
34 return as_ref().store(value, order);
37 return as_ref().store(value, order);
41 return as_ref().load(order);
44 return as_ref().load(order);
48 return as_ref().exchange(value, order);
51 return as_ref().exchange(value, order);
55 return as_ref().compare_exchange_weak(expected, desired, success, failure);
59 return as_ref().compare_exchange_weak(expected, desired, success, failure);
64 return as_ref().compare_exchange_weak(expected, desired, order);
68 return as_ref().compare_exchange_weak(expected, desired, order);
72 return as_ref().compare_exchange_strong(expected, desired, success, failure);
76 return as_ref().compare_exchange_strong(expected, desired, success, failure);
81 return as_ref().compare_exchange_strong(expected, desired, order);
85 return as_ref().compare_exchange_strong(expected, desired, order);
91 return as_ref().fetch_add(delta, order);
96 return as_ref().fetch_add(delta, order);
102 return as_ref().fetch_sub(delta, order);
107 return as_ref().fetch_sub(delta, order);
113 return as_ref().fetch_and(value, order);
118 return as_ref().fetch_and(value, order);
124 return as_ref().fetch_or(value, order);
129 return as_ref().fetch_or(value, order);
135 return as_ref().fetch_xor(value, order);
140 return as_ref().fetch_xor(value, order);
Definition atomic_ref.h:14
auto operator=(Atomic const &) -> Atomic &=delete
constexpr auto compare_exchange_weak(T &expected, T desired, MemoryOrder success, MemoryOrder failure) -> bool
Definition atomic.h:54
auto operator=(Atomic const &) volatile -> Atomic &=delete
constexpr auto fetch_sub(DeltaType delta, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> T requires(concepts::Integral< T >||concepts::Pointer< T >)
Definition atomic.h:104
Atomic(Atomic const &)=delete
constexpr auto fetch_xor(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) -> T requires(concepts::Integral< T >)
Definition atomic.h:132
constexpr auto fetch_add(DeltaType delta, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> T requires(concepts::Integral< T >||concepts::Pointer< T >)
Definition atomic.h:93
constexpr void store(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile
Definition atomic.h:36
constexpr auto exchange(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> T
Definition atomic.h:50
constexpr auto fetch_add(DeltaType delta, MemoryOrder order=MemoryOrder::SequentialConsistency) -> T requires(concepts::Integral< T >||concepts::Pointer< T >)
Definition atomic.h:88
constexpr auto compare_exchange_strong(T &expected, T desired, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> bool
Definition atomic.h:83
constexpr auto fetch_sub(DeltaType delta, MemoryOrder order=MemoryOrder::SequentialConsistency) -> T requires(concepts::Integral< T >||concepts::Pointer< T >)
Definition atomic.h:99
constexpr auto load(MemoryOrder order=MemoryOrder::SequentialConsistency) const volatile -> T
Definition atomic.h:43
constexpr auto exchange(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) -> T
Definition atomic.h:47
constexpr void store(T value, MemoryOrder order=MemoryOrder::SequentialConsistency)
Definition atomic.h:33
constexpr auto compare_exchange_strong(T &expected, T desired, MemoryOrder success, MemoryOrder failure) -> bool
Definition atomic.h:71
constexpr auto fetch_and(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) -> T requires(concepts::Integral< T >)
Definition atomic.h:110
constexpr auto compare_exchange_weak(T &expected, T desired, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> bool
Definition atomic.h:66
constexpr Atomic(T value)
Definition atomic.h:28
constexpr auto fetch_and(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> T requires(concepts::Integral< T >)
Definition atomic.h:115
constexpr auto load(MemoryOrder order=MemoryOrder::SequentialConsistency) const -> T
Definition atomic.h:40
constexpr auto compare_exchange_weak(T &expected, T desired, MemoryOrder success, MemoryOrder failure) volatile -> bool
Definition atomic.h:57
constexpr auto compare_exchange_strong(T &expected, T desired, MemoryOrder order=MemoryOrder::SequentialConsistency) -> bool
Definition atomic.h:79
constexpr auto fetch_xor(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> T requires(concepts::Integral< T >)
Definition atomic.h:137
constexpr auto compare_exchange_strong(T &expected, T desired, MemoryOrder success, MemoryOrder failure) volatile -> bool
Definition atomic.h:74
constexpr auto fetch_or(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) volatile -> T requires(concepts::Integral< T >)
Definition atomic.h:126
constexpr auto compare_exchange_weak(T &expected, T desired, MemoryOrder order=MemoryOrder::SequentialConsistency) -> bool
Definition atomic.h:62
constexpr auto fetch_or(T value, MemoryOrder order=MemoryOrder::SequentialConsistency) -> T requires(concepts::Integral< T >)
Definition atomic.h:121
Definition language.h:235
Definition language.h:259
Definition language.h:224
MemoryOrder
Definition memory_order.h:6
@ SequentialConsistency
Definition memory_order.h:12
std::ptrdiff_t ptrdiff_t
Definition ptrdiff_t.h:12
Definition zstring_parser.h:9