6 #ifndef EASTL_ATOMIC_INTERNAL_STANDALONE_H
7 #define EASTL_ATOMIC_INTERNAL_STANDALONE_H
9 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
23 EASTL_FORCE_INLINE
bool atomic_compare_exchange_strong(
eastl::atomic<T>* atomicObj,
27 return atomicObj->compare_exchange_strong(*expected, desired);
30 template <
typename T,
typename OrderSuccess,
typename OrderFailure>
31 EASTL_FORCE_INLINE
bool atomic_compare_exchange_strong_explicit(
eastl::atomic<T>* atomicObj,
34 OrderSuccess orderSuccess, OrderFailure orderFailure) EA_NOEXCEPT
36 return atomicObj->compare_exchange_strong(*expected, desired, orderSuccess, orderFailure);
45 EASTL_FORCE_INLINE
bool atomic_compare_exchange_weak(
eastl::atomic<T>* atomicObj,
49 return atomicObj->compare_exchange_weak(*expected, desired);
52 template <
typename T,
typename OrderSuccess,
typename OrderFailure>
53 EASTL_FORCE_INLINE
bool atomic_compare_exchange_weak_explicit(
eastl::atomic<T>* atomicObj,
56 OrderSuccess orderSuccess, OrderFailure orderFailure) EA_NOEXCEPT
58 return atomicObj->compare_exchange_weak(*expected, desired, orderSuccess, orderFailure);
70 return atomicObj->fetch_xor(arg);
73 template <
typename T,
typename Order>
76 Order order) EA_NOEXCEPT
78 return atomicObj->fetch_xor(arg, order);
90 return atomicObj->xor_fetch(arg);
93 template <
typename T,
typename Order>
96 Order order) EA_NOEXCEPT
98 return atomicObj->xor_fetch(arg, order);
106 template <
typename T>
110 return atomicObj->fetch_or(arg);
113 template <
typename T,
typename Order>
116 Order order) EA_NOEXCEPT
118 return atomicObj->fetch_or(arg, order);
126 template <
typename T>
130 return atomicObj->or_fetch(arg);
133 template <
typename T,
typename Order>
136 Order order) EA_NOEXCEPT
138 return atomicObj->or_fetch(arg, order);
146 template <
typename T>
150 return atomicObj->fetch_and(arg);
153 template <
typename T,
typename Order>
156 Order order) EA_NOEXCEPT
158 return atomicObj->fetch_and(arg, order);
166 template <
typename T>
170 return atomicObj->and_fetch(arg);
173 template <
typename T,
typename Order>
176 Order order) EA_NOEXCEPT
178 return atomicObj->and_fetch(arg, order);
186 template <
typename T>
190 return atomicObj->fetch_sub(arg);
193 template <
typename T,
typename Order>
196 Order order) EA_NOEXCEPT
198 return atomicObj->fetch_sub(arg, order);
206 template <
typename T>
210 return atomicObj->sub_fetch(arg);
213 template <
typename T,
typename Order>
216 Order order) EA_NOEXCEPT
218 return atomicObj->sub_fetch(arg, order);
226 template <
typename T>
230 return atomicObj->fetch_add(arg);
233 template <
typename T,
typename Order>
236 Order order) EA_NOEXCEPT
238 return atomicObj->fetch_add(arg, order);
246 template <
typename T>
250 return atomicObj->add_fetch(arg);
253 template <
typename T,
typename Order>
256 Order order) EA_NOEXCEPT
258 return atomicObj->add_fetch(arg, order);
266 template <
typename T>
270 return atomicObj->exchange(desired);
273 template <
typename T,
typename Order>
276 Order order) EA_NOEXCEPT
278 return atomicObj->exchange(desired, order);
286 template <
typename T>
289 return atomicObj->load();
292 template <
typename T,
typename Order>
295 return atomicObj->load(order);
303 template <
typename T,
typename Predicate>
315 EASTL_ATOMIC_CPU_PAUSE();
319 template <
typename T,
typename Predicate,
typename Order>
331 EASTL_ATOMIC_CPU_PAUSE();
340 template <
typename T>
343 atomicObj->store(desired);
346 template <
typename T,
typename Order>
349 atomicObj->store(desired, order);
357 template <
typename Order>
358 EASTL_FORCE_INLINE
void atomic_thread_fence(Order) EA_NOEXCEPT
360 EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(Order);
365 EASTL_ATOMIC_THREAD_FENCE_RELAXED();
370 EASTL_ATOMIC_THREAD_FENCE_ACQUIRE();
375 EASTL_ATOMIC_THREAD_FENCE_RELEASE();
380 EASTL_ATOMIC_THREAD_FENCE_ACQ_REL();
385 EASTL_ATOMIC_THREAD_FENCE_SEQ_CST();
393 template <
typename Order>
394 EASTL_FORCE_INLINE
void atomic_signal_fence(Order) EA_NOEXCEPT
396 EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(Order);
401 EASTL_ATOMIC_SIGNAL_FENCE_RELAXED();
406 EASTL_ATOMIC_SIGNAL_FENCE_ACQUIRE();
411 EASTL_ATOMIC_SIGNAL_FENCE_RELEASE();
416 EASTL_ATOMIC_SIGNAL_FENCE_ACQ_REL();
421 EASTL_ATOMIC_SIGNAL_FENCE_SEQ_CST();
429 EASTL_FORCE_INLINE
void compiler_barrier() EA_NOEXCEPT
431 EASTL_ATOMIC_COMPILER_BARRIER();
439 template <
typename T>
440 EASTL_FORCE_INLINE
void compiler_barrier_data_dependency(
const T& val) EA_NOEXCEPT
442 EASTL_ATOMIC_COMPILER_BARRIER_DATA_DEPENDENCY(val, T);
450 EASTL_FORCE_INLINE
void cpu_pause() EA_NOEXCEPT
452 EASTL_ATOMIC_CPU_PAUSE();
460 template <
typename T>
461 EASTL_FORCE_INLINE
bool atomic_is_lock_free(
const eastl::atomic<T>* atomicObj) EA_NOEXCEPT
463 return atomicObj->is_lock_free();
EA Standard Template Library.
Definition: algorithm.h:288
Definition: atomic_memory_order.h:26
Definition: atomic_memory_order.h:24
Definition: atomic_memory_order.h:22
Definition: atomic_memory_order.h:25
Definition: atomic_memory_order.h:27