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() const noexcept
41 {
return _m.load(std::memory_order_relaxed);}
43 operator T() volatile noexcept
44 {
return _m.load(std::memory_order_relaxed);}
46 operator T() const volatile noexcept
47 {
return _m.load(std::memory_order_relaxed);}
53 _m.store(other._m.load(std::memory_order_relaxed), std::memory_order_relaxed);
60 _m.store(other._m.load(std::memory_order_relaxed), std::memory_order_relaxed);
68 {
return _m.fetch_add(1, std::memory_order_relaxed);}
71 {
return _m.fetch_add(1, std::memory_order_relaxed);}
74 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
77 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
82 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
85 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
88 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
91 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
94 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
97 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
100 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
103 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
106 {
return _m.fetch_and(v, std::memory_order_relaxed) & v;}
109 {
return _m.fetch_and(v, std::memory_order_relaxed) & v;}
112 {
return _m.fetch_or (v, std::memory_order_relaxed) | v;}
115 {
return _m.fetch_or (v, std::memory_order_relaxed) | v;}
118 {
return _m.fetch_xor(v, std::memory_order_relaxed) ^ v;}
121 {
return _m.fetch_xor(v, std::memory_order_relaxed) ^ v;}
126 {
return _m.fetch_and(v, std::memory_order_relaxed);}
129 {
return _m.fetch_or (v, std::memory_order_relaxed);}
132 {
return _m.fetch_xor(v, std::memory_order_relaxed);}
137 std::memory_order mo1=std::memory_order_relaxed,
138 std::memory_order mo2=std::memory_order_relaxed)
140 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
143 std::memory_order mo1=std::memory_order_relaxed,
144 std::memory_order mo2=std::memory_order_relaxed)
146 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
149 std::memory_order mo1=std::memory_order_relaxed,
150 std::memory_order mo2=std::memory_order_relaxed)
152 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
155 std::memory_order mo1=std::memory_order_relaxed,
156 std::memory_order mo2=std::memory_order_relaxed)
158 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
160T
exchange(T v, std::memory_order mo=std::memory_order_relaxed)
noexcept
161 {
return _m.exchange(v, mo);}
163T
exchange(T v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
164 {
return _m.exchange(v, mo);}
183 {_m.store(v, std::memory_order_relaxed);
return v;}
186 {_m.store(v, std::memory_order_relaxed);
return v;}
188 operator T*()
noexcept
189 {
return _m.load(std::memory_order_relaxed);}
191 operator T*()
volatile noexcept
192 {
return _m.load(std::memory_order_relaxed);}
195 {
return _m.load(std::memory_order_relaxed);}
200 {
return _m.fetch_add(1, std::memory_order_relaxed);}
203 {
return _m.fetch_add(1, std::memory_order_relaxed);}
206 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
209 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
214 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
217 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
220 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
223 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
226 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
229 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
232 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
235 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
240 std::memory_order mo1=std::memory_order_relaxed,
241 std::memory_order mo2=std::memory_order_relaxed)
243 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
246 std::memory_order mo1=std::memory_order_relaxed,
247 std::memory_order mo2=std::memory_order_relaxed)
249 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
252 std::memory_order mo1=std::memory_order_relaxed,
253 std::memory_order mo2=std::memory_order_relaxed)
255 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
258 std::memory_order mo1=std::memory_order_relaxed,
259 std::memory_order mo2=std::memory_order_relaxed)
261 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
263T*
exchange(T* v, std::memory_order mo=std::memory_order_relaxed)
noexcept
264 {
return _m.exchange(v, mo);}
266T*
exchange(T* v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
267 {
return _m.exchange(v, mo);}
286 {_m.store(v, std::memory_order_relaxed);
return v;}
289 {_m.store(v, std::memory_order_relaxed);
return v;}
291 operator bool() noexcept
292 {
return _m.load(std::memory_order_relaxed);}
294 operator bool() volatile noexcept
295 {
return _m.load(std::memory_order_relaxed);}
300 std::memory_order mo1=std::memory_order_relaxed,
301 std::memory_order mo2=std::memory_order_relaxed)
303 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
306 std::memory_order mo1=std::memory_order_relaxed,
307 std::memory_order mo2=std::memory_order_relaxed)
309 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
312 std::memory_order mo1=std::memory_order_relaxed,
313 std::memory_order mo2=std::memory_order_relaxed)
315 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
318 std::memory_order mo1=std::memory_order_relaxed,
319 std::memory_order mo2=std::memory_order_relaxed)
321 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
323bool exchange(
bool v, std::memory_order mo=std::memory_order_relaxed)
noexcept
324 {
return _m.exchange(v, mo);}
326bool exchange(
bool v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
327 {
return _m.exchange(v, mo);}
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
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
RAtomic & operator=(const RAtomic &other) noexcept
T operator-=(T v) noexcept
T operator-=(T v) volatile noexcept
T operator+=(T v) volatile noexcept
RAtomic & operator=(const RAtomic &other) volatile noexcept
T operator++(int) volatile noexcept