39 #ifndef vtkAtomicInt_h 40 #define vtkAtomicInt_h 46 #if defined(__APPLE__) 47 # include <libkern/OSAtomic.h> 50 #if (defined(_WIN32) && !defined(__MINGW32__)) 51 # define VTK_WINDOWS_ATOMIC 52 # if defined(_MSC_VER) 53 # pragma warning(disable:4324) // disable warning about the padding due to alignment 57 #if defined(VTK_WINDOWS_ATOMIC) || defined(__APPLE__) || defined(VTK_HAVE_SYNC_BUILTINS) 58 # define VTK_HAS_ATOMIC32 63 #if VTK_SIZEOF_VOID_P == 8 64 # if defined(VTK_WINDOWS_ATOMIC) || defined(__APPLE__) || defined(VTK_HAVE_SYNC_BUILTINS) 65 # define VTK_HAS_ATOMIC64 69 #if !defined(VTK_HAS_ATOMIC64) || !defined(VTK_HAS_ATOMIC32) 76 #if defined (VTK_WINDOWS_ATOMIC) 77 # define VTK__ALIGN32 __declspec(align(32)) 85 #if defined(VTK_HAS_ATOMIC32) && !defined(VTK_WINDOWS_ATOMIC) 95 #if defined(VTK_HAS_ATOMIC32) && !defined(VTK_WINDOWS_ATOMIC) 98 # if defined(__APPLE__) 99 return OSAtomicIncrement32Barrier(&this->Value);
103 # elif defined(VTK_HAVE_SYNC_BUILTINS) 104 return __sync_add_and_fetch(&this->Value, 1);
113 # if defined(__APPLE__) 114 return OSAtomicDecrement32Barrier(&this->Value);
118 # elif defined(VTK_HAVE_SYNC_BUILTINS) 119 return __sync_sub_and_fetch(&this->Value, 1);
128 # if defined(__APPLE__) 129 return OSAtomicAdd32Barrier(val, &this->Value);
133 # elif defined(VTK_HAVE_SYNC_BUILTINS) 134 return __sync_add_and_fetch(&this->Value, val);
143 # if defined(__APPLE__) 144 vtkTypeInt32 retval = 0;
145 OSAtomicCompareAndSwap32Barrier(retval, this->Value, &retval);
150 # elif defined(VTK_HAVE_SYNC_BUILTINS) 151 vtkTypeInt32 retval = 0;
152 __sync_val_compare_and_swap(&retval, retval, this->Value);
162 # if defined(__APPLE__) 163 OSAtomicCompareAndSwap32Barrier(this->Value, val, &this->Value);
167 # elif defined(VTK_HAVE_SYNC_BUILTINS) 168 __sync_val_compare_and_swap(&this->Value, this->Value, val);
173 #else // defined(VTK_HAS_ATOMIC32) && !defined(VTK_WINDOWS_ATOMIC) 180 vtkTypeInt32 operator++();
181 vtkTypeInt32 operator--();
182 vtkTypeInt32 operator+=(vtkTypeInt32
val);
183 vtkTypeInt32
load()
const;
184 void store(vtkTypeInt32 val);
186 #endif // defined(VTK_HAS_ATOMIC32) && !defined(VTK_WINDOWS_ATOMIC) 194 #if !defined(VTK_HAS_ATOMIC32) 199 #if defined (VTK_WINDOWS_ATOMIC) 200 # define VTK__ALIGN64 __declspec(align(64)) 202 # define VTK__ALIGN64 206 #if defined(VTK_HAS_ATOMIC64) && !defined(VTK_WINDOWS_ATOMIC) 216 #if defined(VTK_HAS_ATOMIC64) && !defined(VTK_WINDOWS_ATOMIC) 219 # if defined(__APPLE__) 220 return OSAtomicIncrement64Barrier(&this->Value);
224 # elif defined(VTK_HAVE_SYNC_BUILTINS) 225 return __sync_add_and_fetch(&this->Value, 1);
234 # if defined(__APPLE__) 235 return OSAtomicDecrement64Barrier(&this->Value);
239 # elif defined(VTK_HAVE_SYNC_BUILTINS) 240 return __sync_sub_and_fetch(&this->Value, 1);
249 # if defined(__APPLE__) 250 return OSAtomicAdd64Barrier(val, &this->Value);
254 # elif defined(VTK_HAVE_SYNC_BUILTINS) 255 return __sync_add_and_fetch(&this->Value, val);
264 # if defined(__APPLE__) 265 vtkTypeInt64 retval = 0;
266 OSAtomicCompareAndSwap64Barrier(retval, this->Value, &retval);
271 # elif defined(VTK_HAVE_SYNC_BUILTINS) 272 vtkTypeInt64 retval = 0;
273 __sync_val_compare_and_swap(&retval, retval, this->Value);
283 # if defined(__APPLE__) 284 OSAtomicCompareAndSwap64Barrier(this->Value, val, &this->Value);
288 # elif defined(VTK_HAVE_SYNC_BUILTINS) 289 __sync_val_compare_and_swap(&this->Value, this->Value, val);
294 #else // defined(VTK_HAS_ATOMIC64) && !defined(VTK_WINDOWS_ATOMIC) 301 vtkTypeInt64 operator++();
302 vtkTypeInt64 operator--();
303 vtkTypeInt64 operator+=(vtkTypeInt64
val);
304 vtkTypeInt64
load()
const;
305 void store(vtkTypeInt64 val);
307 #endif // defined(VTK_HAS_ATOMIC64) && !defined(VTK_WINDOWS_ATOMIC) 315 #if !defined(VTK_HAS_ATOMIC64) 321 template <
typename T>
347 return this->Superclass::operator++();
355 return this->operator++() - 1;
363 return this->Superclass::operator--();
371 return this->operator--() + 1;
379 return this->operator+=(-val);
vtkTypeInt64 load() const
vtkTypeInt32 load() const
#define VTKCOMMONCORE_EXPORT
vtkTypeInt64 operator+=(vtkTypeInt64 val)
vtkTypeInt64 operator--()
void store(vtkTypeInt32 val)
vtkTypeInt32 operator+=(vtkTypeInt32 val)
VTK__ALIGN64 vtkTypeInt64 Value
Critical section locking class.
void store(vtkTypeInt64 val)
vtkTypeInt64 operator++()
VTK__ALIGN32 vtkTypeInt32 Value
vtkTypeInt32 operator--()
Provides support for atomic integers.
vtkTypeInt32 operator++()