Go to the documentation of this file. 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);}
138 T
exchange(T v, std::memory_order mo=std::memory_order_relaxed) noexcept
139 {
return _m.exchange(v, mo);}
141 T
exchange(T v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
142 {
return _m.exchange(v, mo);}
161 {_m.store(v, std::memory_order_relaxed);
return v;}
164 {_m.store(v, std::memory_order_relaxed);
return v;}
166 operator T*() noexcept
167 {
return _m.load(std::memory_order_relaxed);}
169 operator T*()
volatile noexcept
170 {
return _m.load(std::memory_order_relaxed);}
175 {
return _m.fetch_add(1, std::memory_order_relaxed);}
178 {
return _m.fetch_add(1, std::memory_order_relaxed);}
181 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
184 {
return _m.fetch_sub(1, std::memory_order_relaxed);}
189 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
192 {
return _m.fetch_add(1, std::memory_order_relaxed)+1;}
195 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
198 {
return _m.fetch_sub(1, std::memory_order_relaxed)-1;}
201 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
204 {
return _m.fetch_add(v, std::memory_order_relaxed)+v;}
207 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
210 {
return _m.fetch_sub(v, std::memory_order_relaxed)-v;}
215 std::memory_order mo1=std::memory_order_relaxed,
216 std::memory_order mo2=std::memory_order_relaxed)
218 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
221 std::memory_order mo1=std::memory_order_relaxed,
222 std::memory_order mo2=std::memory_order_relaxed)
224 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
227 std::memory_order mo1=std::memory_order_relaxed,
228 std::memory_order mo2=std::memory_order_relaxed)
230 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
233 std::memory_order mo1=std::memory_order_relaxed,
234 std::memory_order mo2=std::memory_order_relaxed)
236 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
238 T*
exchange(T* v, std::memory_order mo=std::memory_order_relaxed) noexcept
239 {
return _m.exchange(v, mo);}
241 T*
exchange(T* v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
242 {
return _m.exchange(v, mo);}
261 {
_m.store(v, std::memory_order_relaxed);
return v;}
264 {
_m.store(v, std::memory_order_relaxed);
return v;}
266 operator bool() noexcept
267 {
return _m.load(std::memory_order_relaxed);}
269 operator bool() volatile noexcept
270 {
return _m.load(std::memory_order_relaxed);}
275 std::memory_order mo1=std::memory_order_relaxed,
276 std::memory_order mo2=std::memory_order_relaxed)
278 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
281 std::memory_order mo1=std::memory_order_relaxed,
282 std::memory_order mo2=std::memory_order_relaxed)
284 {
return _m.compare_exchange_strong(v1, v2, mo1, mo2);}
287 std::memory_order mo1=std::memory_order_relaxed,
288 std::memory_order mo2=std::memory_order_relaxed)
290 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
293 std::memory_order mo1=std::memory_order_relaxed,
294 std::memory_order mo2=std::memory_order_relaxed)
296 {
return _m.compare_exchange_weak(v1, v2, mo1, mo2);}
298 bool exchange(
bool v, std::memory_order mo=std::memory_order_relaxed) noexcept
299 {
return _m.exchange(v, mo);}
301 bool exchange(
bool v, std::memory_order mo=std::memory_order_relaxed)
volatile noexcept
302 {
return _m.exchange(v, mo);}
310 std::atomic<bool>
_m;
T * exchange(T *v, std::memory_order mo=std::memory_order_relaxed) noexcept
Definition: XrdSysRAtomic.hh:238
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
Definition: XrdSysRAtomic.hh:286
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
Definition: XrdSysRAtomic.hh:132
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
Definition: XrdSysRAtomic.hh:280
RAtomic(T v)
Definition: XrdSysRAtomic.hh:146
XrdSys::RAtomic< int > RAtomic_int
Definition: XrdSysRAtomic.hh:322
std::atomic< T * > _m
Definition: XrdSysRAtomic.hh:250
T fetch_or(T v) noexcept
Definition: XrdSysRAtomic.hh:106
T * operator=(T *v) noexcept
Definition: XrdSysRAtomic.hh:160
T * operator--(int) noexcept
Definition: XrdSysRAtomic.hh:180
XrdSys::RAtomic< uint64_t > RAtomic_uint64_t
Definition: XrdSysRAtomic.hh:336
XrdSys::RAtomic< long > RAtomic_long
Definition: XrdSysRAtomic.hh:324
T * operator=(T *v) volatile noexcept
Definition: XrdSysRAtomic.hh:163
T * operator+=(ptrdiff_t v) volatile noexcept
Definition: XrdSysRAtomic.hh:203
T * operator--(int) volatile noexcept
Definition: XrdSysRAtomic.hh:183
XrdSys::RAtomic< wchar_t > RAtomic_wchar_t
Definition: XrdSysRAtomic.hh:328
T * operator++(int) volatile noexcept
Definition: XrdSysRAtomic.hh:177
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
Definition: XrdSysRAtomic.hh:114
XrdSys::RAtomic< int16_t > RAtomic_int16_t
Definition: XrdSysRAtomic.hh:331
std::atomic< T > _m
Definition: XrdSysRAtomic.hh:150
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
Definition: XrdSysRAtomic.hh:274
T operator&=(T v) noexcept
Definition: XrdSysRAtomic.hh:83
XrdSys::RAtomic< int32_t > RAtomic_int32_t
Definition: XrdSysRAtomic.hh:333
T operator+=(T v) noexcept
Definition: XrdSysRAtomic.hh:71
T operator|=(T v) volatile noexcept
Definition: XrdSysRAtomic.hh:92
T * operator-=(ptrdiff_t v) noexcept
Definition: XrdSysRAtomic.hh:206
T operator++() volatile noexcept
Definition: XrdSysRAtomic.hh:62
T operator--() volatile noexcept
Definition: XrdSysRAtomic.hh:68
T * operator--() noexcept
Definition: XrdSysRAtomic.hh:194
RAtomic()
Definition: XrdSysRAtomic.hh:244
T operator^=(T v) volatile noexcept
Definition: XrdSysRAtomic.hh:98
RAtomic()
Definition: XrdSysRAtomic.hh:144
T operator=(T v) noexcept
Definition: XrdSysRAtomic.hh:31
Definition: XrdClPollerBuiltIn.hh:28
Definition: XrdSysRAtomic.hh:255
XrdSys::RAtomic< uint16_t > RAtomic_uint16_t
Definition: XrdSysRAtomic.hh:332
T fetch_xor(T v) noexcept
Definition: XrdSysRAtomic.hh:109
T operator++(int) noexcept
Definition: XrdSysRAtomic.hh:45
XrdSys::RAtomic< unsigned short > RAtomic_ushort
Definition: XrdSysRAtomic.hh:321
T * exchange(T *v, std::memory_order mo=std::memory_order_relaxed) volatile noexcept
Definition: XrdSysRAtomic.hh:241
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
Definition: XrdSysRAtomic.hh:232
T operator-=(T v) noexcept
Definition: XrdSysRAtomic.hh:77
T operator-=(T v) volatile noexcept
Definition: XrdSysRAtomic.hh:80
XrdSys::RAtomic< unsigned char > RAtomic_uchar
Definition: XrdSysRAtomic.hh:319
std::atomic< bool > _m
Definition: XrdSysRAtomic.hh:310
RAtomic()
Definition: XrdSysRAtomic.hh:304
XrdSys::RAtomic< int8_t > RAtomic_int8_t
Definition: XrdSysRAtomic.hh:329
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
Definition: XrdSysRAtomic.hh:226
T * operator--() volatile noexcept
Definition: XrdSysRAtomic.hh:197
RAtomic(T *v)
Definition: XrdSysRAtomic.hh:246
T operator++() noexcept
Definition: XrdSysRAtomic.hh:59
XrdSys::RAtomic< long long > RAtomic_llong
Definition: XrdSysRAtomic.hh:326
T * operator+=(ptrdiff_t v) noexcept
Definition: XrdSysRAtomic.hh:200
XrdSys::RAtomic< int64_t > RAtomic_int64_t
Definition: XrdSysRAtomic.hh:335
bool exchange(bool v, std::memory_order mo=std::memory_order_relaxed) volatile noexcept
Definition: XrdSysRAtomic.hh:301
bool operator=(bool v) volatile noexcept
Definition: XrdSysRAtomic.hh:263
RAtomic(bool v)
Definition: XrdSysRAtomic.hh:306
T exchange(T v, std::memory_order mo=std::memory_order_relaxed) volatile noexcept
Definition: XrdSysRAtomic.hh:141
T exchange(T v, std::memory_order mo=std::memory_order_relaxed) noexcept
Definition: XrdSysRAtomic.hh:138
T operator&=(T v) volatile noexcept
Definition: XrdSysRAtomic.hh:86
T operator|=(T v) noexcept
Definition: XrdSysRAtomic.hh:89
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
Definition: XrdSysRAtomic.hh:292
T * operator++(int) noexcept
Definition: XrdSysRAtomic.hh:174
XrdSys::RAtomic< unsigned long long > RAtomic_ullong
Definition: XrdSysRAtomic.hh:327
T operator++(int) volatile noexcept
Definition: XrdSysRAtomic.hh:48
XrdSys::RAtomic< bool > RAtomic_bool
Definition: XrdSysRAtomic.hh:316
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
Definition: XrdSysRAtomic.hh:120
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
Definition: XrdSysRAtomic.hh:220
XrdSys::RAtomic< uint8_t > RAtomic_uint8_t
Definition: XrdSysRAtomic.hh:330
T * operator++() volatile noexcept
Definition: XrdSysRAtomic.hh:191
XrdSys::RAtomic< unsigned long > RAtomic_ulong
Definition: XrdSysRAtomic.hh:325
XrdSys::RAtomic< signed char > RAtomic_schar
Definition: XrdSysRAtomic.hh:318
T operator--(int) volatile noexcept
Definition: XrdSysRAtomic.hh:54
bool exchange(bool v, std::memory_order mo=std::memory_order_relaxed) noexcept
Definition: XrdSysRAtomic.hh:298
XrdSys::RAtomic< uint32_t > RAtomic_uint32_t
Definition: XrdSysRAtomic.hh:334
XrdSys::RAtomic< short > RAtomic_short
Definition: XrdSysRAtomic.hh:320
T * operator++() noexcept
Definition: XrdSysRAtomic.hh:188
bool operator=(bool v) noexcept
Definition: XrdSysRAtomic.hh:260
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
Definition: XrdSysRAtomic.hh:126
T operator^=(T v) noexcept
Definition: XrdSysRAtomic.hh:95
T operator+=(T v) volatile noexcept
Definition: XrdSysRAtomic.hh:74
T * operator-=(ptrdiff_t v) volatile noexcept
Definition: XrdSysRAtomic.hh:209
Definition: XrdSysRAtomic.hh:26
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
Definition: XrdSysRAtomic.hh:214
T fetch_and(T v) noexcept
Definition: XrdSysRAtomic.hh:103
XrdSys::RAtomic< unsigned int > RAtomic_uint
Definition: XrdSysRAtomic.hh:323
T operator--() noexcept
Definition: XrdSysRAtomic.hh:65
T operator--(int) noexcept
Definition: XrdSysRAtomic.hh:51
XrdSys::RAtomic< char > RAtomic_char
Definition: XrdSysRAtomic.hh:317
T operator=(T v) volatile noexcept
Definition: XrdSysRAtomic.hh:34