20 #ifndef ESSENTIA_ATOMIC_H
21 #define ESSENTIA_ATOMIC_H
24 #if defined(__EMSCRIPTEN__)
32 inline Atomic(
const int &i = 0) : _a(i) {}
34 inline operator int ()
const {
return _a; }
36 inline void add(
const int& i) {
41 inline void operator-=(
const int &i) { add(-i); }
42 inline void operator+=(
const int &i) { add(i); }
44 inline void operator++() { add(1); }
45 inline void operator--() { add(-1); }
52 #elif __cplusplus >= 201103L
58 typedef std::atomic<int> Atomic;
62 #elif defined(OS_WIN32)
74 inline Atomic(
const int &i = 0) : i_(i) {}
76 inline operator int()
const {
return i_; }
79 InterlockedExchangeAdd(&i_, -i);
83 InterlockedExchangeAdd(&i_, i);
86 inline void operator++() {
87 InterlockedIncrement(&i_);
90 inline void operator--() {
91 InterlockedDecrement(&i_);
100 #include <libkern/OSAtomic.h>
108 inline Atomic(
const int &i = 0) : i_(i) {}
110 inline operator int()
const {
return i_; }
113 OSAtomicAdd32Barrier(-i, &i_);
117 OSAtomicAdd32Barrier(i, &i_);
120 inline void operator++() {
121 OSAtomicIncrement32Barrier(&i_);
124 inline void operator--() {
125 OSAtomicDecrement32Barrier(&i_);
132 #elif defined(OS_LINUX)
134 #include <ext/atomicity.h>
142 inline Atomic(
const int &i = 0) : _a(i) {}
144 inline operator int ()
const {
return _a; }
146 inline void add(
const int& i) {
148 #if GCC_VERSION >= 40000
149 __gnu_cxx::__atomic_add(&_a,i);
151 __atomic_add(&_a, i);
155 inline void operator-=(
const int &i) { add(-i); }
156 inline void operator+=(
const int &i) { add(i); }
158 inline void operator++() { add(1); }
159 inline void operator--() { add(-1); }
Array1D< T > & operator-=(Array1D< T > &A, const Array1D< T > &B)
Definition: tnt_array1d_utils.h:174
Array1D< T > & operator+=(Array1D< T > &A, const Array1D< T > &B)
Definition: tnt_array1d_utils.h:156
Definition: algorithm.h:28