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