1 #ifndef ATOMICS_H 2 #define ATOMICS_H 3 4 /* hacky atomics */ 5 #if defined (MULTITHREAD) 6 #ifndef __cplusplus 7 #if !defined(__STDC_NO_ATOMICS__) && !defined(_MSC_VER) 8 #include <stdatomic.h> 9 #else 10 #define _Atomic(X) volatile X /* doesn't do anything, but makes me feel better... although if you are trying to do multithreading glhf */ 11 #define atomic_compare_exchange_strong(object, expected, desired) (*(object) == *(expected) ? (*(object) = (desired)) : (*(expected) = (desired))) 12 #endif 13 #else 14 #include <atomic> 15 #define _Atomic(X) std::atomic<X> 16 #endif 17 #else 18 #define _Atomic(X) X 19 #define atomic_compare_exchange_strong(object, expected, desired) (*(object) == *(expected) ? (*(object) = (desired)) : (*(expected) = (desired))) 20 #endif 21 22 #endif 23