11#include "vecmem/memory/memory_order.hpp"
12#include "vecmem/utils/types.hpp"
19template <
typename T, device_address_space address>
24template <
typename T, device_address_space address>
28 : m_ptr(parent.m_ptr) {}
30template <
typename T, device_address_space address>
38template <
typename T, device_address_space address>
42 exchange(data,
order);
45template <
typename T, device_address_space address>
54template <
typename T, device_address_space address>
59 while (!compare_exchange_strong(
tmp, data,
order))
64template <
typename T, device_address_space address>
65VECMEM_HOST_AND_DEVICE
bool
69 if (
order == memory_order::acq_rel) {
71 memory_order::acquire);
72 }
else if (
order == memory_order::release) {
74 memory_order::relaxed);
80template <
typename T, device_address_space address>
81VECMEM_HOST_AND_DEVICE
bool
96template <
typename T, device_address_space address>
101 while (!compare_exchange_strong(
tmp,
tmp + data,
order))
106template <
typename T, device_address_space address>
111 while (!compare_exchange_strong(
tmp,
tmp - data,
order))
116template <
typename T, device_address_space address>
121 while (!compare_exchange_strong(
tmp,
tmp & data,
order))
126template <
typename T, device_address_space address>
131 while (!compare_exchange_strong(
tmp,
tmp | data,
order))
136template <
typename T, device_address_space address>
141 while (!compare_exchange_strong(
tmp,
tmp ^ data,
order))
Dummy / No-op atomic reference for unsupported devices / compilers.
Definition dummy_device_atomic_ref.hpp:27
VECMEM_HOST_AND_DEVICE value_type fetch_sub(value_type data, memory_order order=memory_order::seq_cst) const
Substitute a chosen value from the stored variable.
Definition dummy_device_atomic_ref.ipp:107
VECMEM_HOST_AND_DEVICE value_type exchange(value_type data, memory_order order=memory_order::seq_cst) const
Exchange the current value of the variable with a different one.
Definition dummy_device_atomic_ref.ipp:55
value_type & reference
Reference to a value given by the user.
Definition dummy_device_atomic_ref.hpp:40
VECMEM_HOST_AND_DEVICE void store(value_type data, memory_order order=memory_order::seq_cst) const
Set the variable to the desired value.
Definition dummy_device_atomic_ref.ipp:39
VECMEM_HOST_AND_DEVICE value_type fetch_add(value_type data, memory_order order=memory_order::seq_cst) const
Add a chosen value to the stored variable.
Definition dummy_device_atomic_ref.ipp:97
VECMEM_HOST_AND_DEVICE dummy_device_atomic_ref(reference ref)
Constructor, with a pointer to the managed variable.
Definition dummy_device_atomic_ref.ipp:21
dummy_device_atomic_ref & operator=(const dummy_device_atomic_ref &)=delete
Disable the assignment operator.
VECMEM_HOST_AND_DEVICE value_type load(memory_order order=memory_order::seq_cst) const
Get the value of the variable.
Definition dummy_device_atomic_ref.ipp:46
T value_type
Type managed by the object.
Definition dummy_device_atomic_ref.hpp:34
VECMEM_HOST_AND_DEVICE value_type fetch_and(value_type data, memory_order order=memory_order::seq_cst) const
Replace the current value with the specified value AND-ed to it.
Definition dummy_device_atomic_ref.ipp:117
VECMEM_HOST_AND_DEVICE value_type fetch_or(value_type data, memory_order order=memory_order::seq_cst) const
Replace the current value with the specified value OR-d to it.
Definition dummy_device_atomic_ref.ipp:127
VECMEM_HOST_AND_DEVICE bool compare_exchange_strong(reference expected, value_type desired, memory_order success, memory_order failure) const
Compare against the current value, and exchange only if different.
Definition dummy_device_atomic_ref.ipp:82
VECMEM_HOST_AND_DEVICE value_type fetch_xor(value_type data, memory_order order=memory_order::seq_cst) const
Replace the current value with the specified value XOR-d to it.
Definition dummy_device_atomic_ref.ipp:137
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
std::vector< T, vecmem::polymorphic_allocator< T > > vector
Alias type for vectors with our polymorphic allocator.
Definition vector.hpp:35
memory_order
Custom (dummy) definition for the memory order.
Definition memory_order.hpp:31