12 #ifndef _OsAtomics_H_ // [ 15 #ifdef HAVE_C_ATOMICS // [ 16 # include <cstdatomic> 24 #define OsAtomicLight OsAtomic 26 #elif defined(ANDROID) // HAVE_C_ATOMICS ][ ANDROID 33 #warning ARM version of OsAtomics need to be fixed to support ARM features. 54 {
OsLock lock(mMutex); mVal = val;}
57 {
OsLock lock(mMutex);
return mVal;}
70 {
OsLock lock(mMutex); T temp = mVal; mVal += val;
return temp;}
73 {
OsLock lock(mMutex); T temp = mVal; mVal -= val;
return temp;}
76 {
OsLock lock(mMutex); T temp = mVal; mVal &= val;
return temp;}
79 {
OsLock lock(mMutex); T temp = mVal; mVal |= val;
return temp;}
82 {
OsLock lock(mMutex); T temp = mVal; mVal ^= val;
return temp;}
89 {
store(val);
return val;}
104 {
OsLock lock(mMutex); mVal += val;
return mVal;}
107 {
OsLock lock(mMutex); mVal -= val;
return mVal;}
110 {
OsLock lock(mMutex); mVal &= val;
return mVal;}
113 {
OsLock lock(mMutex); mVal |= val;
return mVal;}
116 {
OsLock lock(mMutex); mVal ^= val;
return mVal;}
120 mutable OsMutex mMutex;
142 {
OsLock lock(mMutex); mVal = val;}
145 {
OsLock lock(mMutex);
return mVal;}
148 {
store(val);
return val;}
150 operator bool()
const 162 mutable OsMutex mMutex;
176 {
OsLock lock(mMutex); mVal = val;}
179 {
OsLock lock(mMutex);
return mVal;}
181 operator void*()
const 192 {
OsLock lock(mMutex);
void* temp = mVal; mVal = (
int8_t*)mVal + val;
return temp;}
195 {
OsLock lock(mMutex);
void* temp = mVal; mVal = (
int8_t*)mVal - val;
return temp;}
202 {
store(val);
return val;}
205 {
OsLock lock(mMutex); mVal = (
int8_t*)mVal + val;
return mVal;}
208 {
OsLock lock(mMutex); mVal = (
int8_t*)mVal - val;
return mVal;}
212 mutable OsMutex mMutex;
233 {
return (T*)OsAtomicVoidPtr::operator
void*();}
268 #if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__amd64__) || defined (__arm__)// [ 288 OsAtomicLight<T>() {};
290 explicit OsAtomicLight<T>(T val) : mVal(val) {};
293 {
store(val);
return val;}
299 OsAtomicLight<T>(
const OsAtomicLight<T>&);
300 OsAtomicLight<T>&
operator=(
const OsAtomicLight<T>&);
320 operator const T*()
const 334 {
store(val);
return val;}
344 #else // X86/X86_64/ARM ][ 346 #define OsAtomicLight OsAtomic 347 #define OsAtomicLightPtr OsAtomicPtr 349 #endif // !X86/X86_64/ARM 351 #endif // HAVE_C_ATOMICS ] 359 #endif // _OsAtomics_H_ ] void store(void *val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:175
T operator++()
Definition: OsAtomics.h:97
bool is_lock_free() const
Definition: OsAtomics.h:50
T load(::memory_order=::memory_order_seq_cst) const
Definition: OsAtomics.h:56
T fetch_xor(T val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:81
void * load(::memory_order=::memory_order_seq_cst) const
Definition: OsAtomics.h:178
bool load(::memory_order=::memory_order_seq_cst) const
Definition: OsAtomics.h:144
OsAtomicPtr(T *val)
Definition: OsAtomics.h:250
T fetch_or(T val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:78
Lock class for mutual exclusion in a critical section.
Definition: OsLock.h:52
T * fetch_sub(ptrdiff_t val,::memory_order mo=::memory_order_seq_cst)
Definition: OsAtomics.h:245
Include this file if you want use C99 integer types with specified width and corresponding set of mac...
OsAtomicLight< bool > OsAtomicLightBool
Definition: OsAtomics.h:357
OsAtomicBool()
Definition: OsAtomics.h:137
Definition: OsAtomics.h:42
T operator&=(T val)
Definition: OsAtomics.h:109
T * operator-=(ptrdiff_t val)
Definition: OsAtomics.h:258
T operator--(int)
Definition: OsAtomics.h:94
T * load(::memory_order mo=::memory_order_seq_cst) const
Definition: OsAtomics.h:229
OsAtomic< unsigned long > OsAtomicULong
Definition: OsAtomics.h:130
void * operator=(void *val)
Definition: OsAtomics.h:201
void fence(::memory_order) const
Definition: OsAtomics.h:157
memory_order
Definition: OsAtomics.h:41
#define OsAtomicLight
Definition: OsAtomics.h:346
T operator-=(T val)
Definition: OsAtomics.h:106
OsAtomic< long > OsAtomicLong
Definition: OsAtomics.h:129
Definition: OsAtomics.h:169
bool is_lock_free() const
Definition: OsAtomics.h:172
OsAtomicLight< long > OsAtomicLightLong
Definition: OsAtomics.h:355
void * fetch_sub(ptrdiff_t val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:194
OsAtomicPtr()
Definition: OsAtomics.h:248
Definition: OsAtomics.h:42
OsAtomicLight< int > OsAtomicLightInt
Definition: OsAtomics.h:353
void fence(::memory_order mo) const
Definition: OsAtomics.h:239
T operator^=(T val)
Definition: OsAtomics.h:115
OsAtomicLight< unsigned int > OsAtomicLightUInt
Definition: OsAtomics.h:354
OsAtomic< unsigned int > OsAtomicUInt
Definition: OsAtomics.h:128
Definition: OsAtomics.h:47
void * fetch_add(ptrdiff_t val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:191
OsAtomicVoidPtr(void *val)
Definition: OsAtomics.h:199
T fetch_sub(T val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:72
void store(bool val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:141
void * operator-=(ptrdiff_t val)
Definition: OsAtomics.h:207
signed char int8_t
Definition: stdint.h:75
Definition: OsAtomics.h:220
T operator|=(T val)
Definition: OsAtomics.h:112
#define OsAtomicLightPtr
Definition: OsAtomics.h:347
void store(T val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:53
OsAtomicBool(bool val)
Definition: OsAtomics.h:139
void store(T *val,::memory_order mo=::memory_order_seq_cst)
Definition: OsAtomics.h:226
OsAtomicLight< unsigned long > OsAtomicLightULong
Definition: OsAtomics.h:356
T operator=(T val)
Definition: OsAtomics.h:88
T * fetch_add(ptrdiff_t val,::memory_order mo=::memory_order_seq_cst)
Definition: OsAtomics.h:242
Definition: OsAtomics.h:43
T * operator=(T *val)
Definition: OsAtomics.h:252
Definition: OsAtomics.h:43
bool is_lock_free() const
Definition: OsAtomics.h:134
bool is_lock_free() const
Definition: OsAtomics.h:223
void * operator+=(ptrdiff_t val)
Definition: OsAtomics.h:204
T * operator+=(ptrdiff_t val)
Definition: OsAtomics.h:255
T operator--()
Definition: OsAtomics.h:100
Definition: OsAtomics.h:43
bool operator=(bool val)
Definition: OsAtomics.h:147
Definition: OsAtomics.h:132
void fence(::memory_order) const
Definition: OsAtomics.h:66
T operator+=(T val)
Definition: OsAtomics.h:103
T operator++(int)
Definition: OsAtomics.h:91
T fetch_add(T val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:69
T fetch_and(T val,::memory_order=::memory_order_seq_cst)
Definition: OsAtomics.h:75
OsAtomic< int > OsAtomicInt
Definition: OsAtomics.h:127
OsAtomicVoidPtr()
Definition: OsAtomics.h:197
Definition: OsAtomics.h:42
void fence(::memory_order) const
Definition: OsAtomics.h:188