1#ifndef __XRDSYSRATOMIC__HH
2#define __XRDSYSRATOMIC__HH
32 {_m.store(v, std::memory_order_relaxed);
return v;}
35 {_m.store(v, std::memory_order_relaxed);
return v;}
38 {
return _m.load(std::memory_order_relaxed);}
40 operator T() volatile noexcept
41 {
return _m.load(std::memory_order_relaxed);}
46 {
return _m.fetch_add(1, std::memory_order_relaxed);}
49 {
return _m.fetch_add(1, std::memory_order_relaxed);}
52 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
55 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
60 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
63 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
66 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
69 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
72 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
75 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
78 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
81 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
84 {
return _m.fetch_and(v, std::memory_order_relaxed) & v;}
87 {
return _m.fetch_and(v, std::memory_order_relaxed) & v;}
90 {
return _m.fetch_or (v, std::memory_order_relaxed) | v;}
93 {
return _m.fetch_or (v, std::memory_order_relaxed) | v;}
96 {
return _m.fetch_xor(v, std::memory_order_relaxed) ^ v;}
99 {
return _m.fetch_xor(v, std::memory_order_relaxed) ^ v;}
104 {
return _m.fetch_and(v, std::memory_order_relaxed);}
107 {
return _m.fetch_or (v, std::memory_order_relaxed);}
110 {
return _m.fetch_xor(v, std::memory_order_relaxed);}
115 std::memory_order mo1=std::memory_order_relaxed,
116 std::memory_order mo2=std::memory_order_relaxed)
118 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
121 std::memory_order mo1=std::memory_order_relaxed,
122 std::memory_order mo2=std::memory_order_relaxed)
124 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
127 std::memory_order mo1=std::memory_order_relaxed,
128 std::memory_order mo2=std::memory_order_relaxed)
130 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
133 std::memory_order mo1=std::memory_order_relaxed,
134 std::memory_order mo2=std::memory_order_relaxed)
136 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
138T
exchange(T v, std::memory_order mo=std::memory_order_relaxed)
noexcept
139 {
return _m.exchange(v, mo);}
141T
exchange(T v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
142 {
return _m.exchange(v, mo);}
144T
load() {
return _m.load(std::memory_order_relaxed);}
163 {_m.store(v, std::memory_order_relaxed);
return v;}
166 {_m.store(v, std::memory_order_relaxed);
return v;}
168 operator T*()
noexcept
169 {
return _m.load(std::memory_order_relaxed);}
171 operator T*()
volatile noexcept
172 {
return _m.load(std::memory_order_relaxed);}
175 {
return _m.load(std::memory_order_relaxed);}
180 {
return _m.fetch_add(1, std::memory_order_relaxed);}
183 {
return _m.fetch_add(1, std::memory_order_relaxed);}
186 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
189 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
194 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
197 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
200 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
203 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
206 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
209 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
212 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
215 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
220 std::memory_order mo1=std::memory_order_relaxed,
221 std::memory_order mo2=std::memory_order_relaxed)
223 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
226 std::memory_order mo1=std::memory_order_relaxed,
227 std::memory_order mo2=std::memory_order_relaxed)
229 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
232 std::memory_order mo1=std::memory_order_relaxed,
233 std::memory_order mo2=std::memory_order_relaxed)
235 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
238 std::memory_order mo1=std::memory_order_relaxed,
239 std::memory_order mo2=std::memory_order_relaxed)
241 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
243T*
exchange(T* v, std::memory_order mo=std::memory_order_relaxed)
noexcept
244 {
return _m.exchange(v, mo);}
246T*
exchange(T* v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
247 {
return _m.exchange(v, mo);}
266 {_m.store(v, std::memory_order_relaxed);
return v;}
269 {_m.store(v, std::memory_order_relaxed);
return v;}
271 operator bool() noexcept
272 {
return _m.load(std::memory_order_relaxed);}
274 operator bool() volatile noexcept
275 {
return _m.load(std::memory_order_relaxed);}
280 std::memory_order mo1=std::memory_order_relaxed,
281 std::memory_order mo2=std::memory_order_relaxed)
283 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
286 std::memory_order mo1=std::memory_order_relaxed,
287 std::memory_order mo2=std::memory_order_relaxed)
289 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
292 std::memory_order mo1=std::memory_order_relaxed,
293 std::memory_order mo2=std::memory_order_relaxed)
295 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
298 std::memory_order mo1=std::memory_order_relaxed,
299 std::memory_order mo2=std::memory_order_relaxed)
301 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
303bool exchange(
bool v, std::memory_order mo=std::memory_order_relaxed)
noexcept
304 {
return _m.exchange(v, mo);}
306bool exchange(
bool v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
307 {
return _m.exchange(v, mo);}
309bool load() {
return _m.load(std::memory_order_relaxed);}
XrdSys::RAtomic< unsigned char > RAtomic_uchar
XrdSys::RAtomic< uint64_t > RAtomic_uint64_t
XrdSys::RAtomic< short > RAtomic_short
XrdSys::RAtomic< bool > RAtomic_bool
XrdSys::RAtomic< char > RAtomic_char
XrdSys::RAtomic< wchar_t > RAtomic_wchar_t
XrdSys::RAtomic< long long > RAtomic_llong
XrdSys::RAtomic< uint32_t > RAtomic_uint32_t
XrdSys::RAtomic< int16_t > RAtomic_int16_t
XrdSys::RAtomic< uint8_t > RAtomic_uint8_t
XrdSys::RAtomic< int32_t > RAtomic_int32_t
XrdSys::RAtomic< uint16_t > RAtomic_uint16_t
XrdSys::RAtomic< long > RAtomic_long
XrdSys::RAtomic< unsigned long long > RAtomic_ullong
XrdSys::RAtomic< unsigned short > RAtomic_ushort
XrdSys::RAtomic< int64_t > RAtomic_int64_t
XrdSys::RAtomic< unsigned int > RAtomic_uint
XrdSys::RAtomic< unsigned long > RAtomic_ulong
XrdSys::RAtomic< signed char > RAtomic_schar
XrdSys::RAtomic< int > RAtomic_int
XrdSys::RAtomic< int8_t > RAtomic_int8_t
T * exchange(T *v, std::memory_order mo=std::memory_order_relaxed) noexcept
T * operator++(int) volatile noexcept
T * compare_exchange_strong(T &v1, T *v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) volatile noexcept
T * compare_exchange_strong(T &v1, T *v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) noexcept
T * operator--() volatile noexcept
T * compare_exchange_weak(T &v1, T *v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) noexcept
T * operator--() noexcept
T * operator+=(ptrdiff_t v) noexcept
T * operator-=(ptrdiff_t v) volatile noexcept
T * operator--(int) noexcept
T * operator-=(ptrdiff_t v) noexcept
T * operator++() noexcept
T * operator=(T *v) noexcept
T * operator->() noexcept
T * operator+=(ptrdiff_t v) volatile noexcept
T * operator=(T *v) volatile noexcept
T * operator++() volatile noexcept
T * operator++(int) noexcept
T * exchange(T *v, std::memory_order mo=std::memory_order_relaxed) volatile noexcept
T * operator--(int) volatile noexcept
T * compare_exchange_weak(T &v1, T *v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) volatile noexcept
bool operator=(bool v) noexcept
bool operator=(bool v) volatile noexcept
bool exchange(bool v, std::memory_order mo=std::memory_order_relaxed) noexcept
bool compare_exchange_weak(bool &v1, bool v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) volatile noexcept
bool compare_exchange_strong(bool &v1, bool v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) volatile noexcept
bool compare_exchange_weak(bool &v1, bool v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) noexcept
bool exchange(bool v, std::memory_order mo=std::memory_order_relaxed) volatile noexcept
bool compare_exchange_strong(bool &v1, bool v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) noexcept
T operator++(int) noexcept
T operator^=(T v) noexcept
T operator+=(T v) noexcept
T operator&=(T v) volatile noexcept
T operator=(T v) noexcept
T operator--(int) noexcept
T exchange(T v, std::memory_order mo=std::memory_order_relaxed) volatile noexcept
T operator|=(T v) volatile noexcept
T compare_exchange_weak(T &v1, T v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) volatile noexcept
T fetch_xor(T v) noexcept
T operator=(T v) volatile noexcept
T fetch_and(T v) noexcept
T compare_exchange_weak(T &v1, T v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) noexcept
T operator--(int) volatile noexcept
T operator&=(T v) noexcept
T operator++() volatile noexcept
T operator--() volatile noexcept
T exchange(T v, std::memory_order mo=std::memory_order_relaxed) noexcept
T compare_exchange_strong(T &v1, T v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) noexcept
T compare_exchange_strong(T &v1, T v2, std::memory_order mo1=std::memory_order_relaxed, std::memory_order mo2=std::memory_order_relaxed) volatile noexcept
T operator^=(T v) volatile noexcept
T operator|=(T v) noexcept
T operator-=(T v) noexcept
T operator-=(T v) volatile noexcept
T operator+=(T v) volatile noexcept
T operator++(int) volatile noexcept