11 #ifndef __SYS_AtomicInt__
12 #define __SYS_AtomicInt__
84 std::atomic<T> myValue;
93 explicit operator T()
const;
99 #if defined(AMD64) || defined(ARM64)
105 template <
typename T>
108 template <typename T>
112 return myValue.exchange(val);
115 template <
typename T>
119 return myValue.fetch_add(val);
122 template <
typename T>
126 return (myValue += val);
129 template <
typename T>
133 return myValue.fetch_add(val, order) +
val;
136 template <
typename T>
140 T me = relaxedLoad();
147 while (!compareExchangeWeak(me, val));
152 template <
typename T>
156 T me = relaxedLoad();
163 while (!compareExchangeWeak(me, val));
168 template <
typename T>
172 compareExchangeStrong(expected, desired);
176 template <
typename T>
184 return myValue.compare_exchange_strong(
185 expected, desired, success, failure);
188 template <
typename T>
196 return myValue.compare_exchange_weak(
197 expected, desired, success, failure);
206 template <
typename T>
210 myValue.store(val, order);
213 template <
typename T>
217 return myValue.load(order);
220 template <
typename T>
224 return myValue.load(std::memory_order_relaxed);
227 template <
typename T>
231 myValue.store(val, std::memory_order_relaxed);
#define SYS_DECLARE_LEGACY_TR_TEMPLATE(...)
Version for class template.
GLsizei const GLfloat * value
constexpr SYS_MemoryOrder SYS_MEMORY_ORDER_SEQ_CST
SYS_FORCE_INLINE void relaxedStore(T val)
SYS_AtomicInt< int32 > SYS_AtomicInt32
void store(T val, SYS_MemoryOrder order=SYS_MEMORY_ORDER_SEQ_CST)
SYS_AtomicInt(SYS_EmptyConstructor)
bool compareExchangeStrong(T &expected, T desired, SYS_MemoryOrder success=SYS_MEMORY_ORDER_SEQ_CST, SYS_MemoryOrder failure=SYS_MEMORY_ORDER_SEQ_CST)
T load(SYS_MemoryOrder order=SYS_MEMORY_ORDER_SEQ_CST) const
bool compareExchangeWeak(T &expected, T desired, SYS_MemoryOrder success=SYS_MEMORY_ORDER_SEQ_CST, SYS_MemoryOrder failure=SYS_MEMORY_ORDER_SEQ_CST)
#define SYS_ATOMIC_INLINE
T compare_swap(T expected, T desired)
SYS_AtomicInt< int64 > SYS_AtomicInt64
GLdouble GLdouble GLint GLint order
SYS_FORCE_INLINE T relaxedLoad() const
SYS_AtomicInt< int32 > SYS_AtomicCounter
VULKAN_HPP_CONSTEXPR_14 VULKAN_HPP_INLINE T exchange(T &obj, U &&newValue)
T add(T val)
Atomically adds val to myValue, returning the new value of myValue.
std::memory_order SYS_MemoryOrder