6 #ifndef EASTL_ATOMIC_INTERNA_ATOMIC_FLAG_H
7 #define EASTL_ATOMIC_INTERNA_ATOMIC_FLAG_H
9 #if defined(EA_PRAGMA_ONCE_SUPPORTED)
14 #include "atomic_push_compiler_options.h"
44 template <
typename Order>
45 void clear(Order )
volatile EA_NOEXCEPT
47 EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(Order);
50 template <
typename Order>
51 void clear(Order ) EA_NOEXCEPT
53 EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(Order);
58 mFlag.store(
false, eastl::memory_order_relaxed);
63 mFlag.store(
false, eastl::memory_order_release);
68 mFlag.store(
false, eastl::memory_order_seq_cst);
71 void clear() EA_NOEXCEPT
73 mFlag.store(
false, eastl::memory_order_seq_cst);
78 template <
typename Order>
79 bool test_and_set(Order )
volatile EA_NOEXCEPT
81 EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(Order);
85 template <
typename Order>
86 bool test_and_set(Order ) EA_NOEXCEPT
88 EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(Order);
94 return mFlag.exchange(
true, eastl::memory_order_relaxed);
99 return mFlag.exchange(
true, eastl::memory_order_acquire);
104 return mFlag.exchange(
true, eastl::memory_order_release);
109 return mFlag.exchange(
true, eastl::memory_order_acq_rel);
114 return mFlag.exchange(
true, eastl::memory_order_seq_cst);
117 bool test_and_set() EA_NOEXCEPT
119 return mFlag.exchange(
true, eastl::memory_order_seq_cst);
124 template <
typename Order>
125 bool test(Order )
const volatile EA_NOEXCEPT
127 EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(Order);
131 template <
typename Order>
132 bool test(Order )
const EA_NOEXCEPT
134 EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(Order);
140 return mFlag.load(eastl::memory_order_relaxed);
145 return mFlag.load(eastl::memory_order_acquire);
150 return mFlag.load(eastl::memory_order_seq_cst);
153 bool test()
const EA_NOEXCEPT
155 return mFlag.load(eastl::memory_order_seq_cst);
167 #include "atomic_pop_compiler_options.h"
Definition: atomic_flag.h:22
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