19template <
typename ElementType>
22template <
typename ElementType,
typename DiffType>
25template <
typename ElementType>
28template <
typename ElementType>
68 return *(
const T*)&Result;
75 return *(
const T*)&Result;
98 return *(
const T*)&Result;
101 template <
typename T>
105 return *(
const T*)&Result;
108 template <
typename T>
112 return *(T*
const*)&Result;
115 template <
typename T,
typename DiffType>
119 return *(
const T*)&Result;
122 template <
typename T,
typename DiffType>
126 return *(T*
const*)&Result;
129 template <
typename T>
133 return *(
const T*)&Result;
136 template <
typename T>
140 return *(T*
const*)&Result;
143 template <
typename T,
typename DiffType>
147 return *(
const T*)&Result;
150 template <
typename T,
typename DiffType>
154 return *(T*
const*)&Result;
157 template <
typename T>
161 return *(
const T*)&Result;
164 template <
typename T>
168 return *(
const T*)&Result;
171 template <
typename T>
175 return *(
const T*)&Result;
178 template <
typename T>
182 return *(
const T*)&Result;
185 template <
typename T,
bool bIsVo
idPo
inter,
bool bIsIntegral,
bool bCanUsePlatformAtomics>
191 template <
typename T>
194 static_assert(
sizeof(T) == 0,
"TAtomic of this size are not currently supported");
198 template <
typename T>
204 template <
typename T>
229 return Element.load(ToStd(Order));
279 return Element.compare_exchange_strong(Expected,
Value);
295 std::memory_order
Map[(int)
EMemoryOrder::Count] = { std::memory_order_relaxed, std::memory_order_seq_cst };
296 return Map[(int)Order];
306template <
typename T,
typename DiffType>
317 return this->
Element.fetch_add(1) + 1;
327 return this->
Element.fetch_add(1);
349 return this->
Element.fetch_sub(1) - 1;
359 return this->
Element.fetch_sub(1);
381 return this->
Element.fetch_add(1);
391 return this->
Element.fetch_sub(1);
403 return this->
Element.fetch_add(Value);
415 return this->
Element.fetch_sub(Value);
490 return this->
Element.fetch_and(Value);
502 return this->
Element.fetch_or(Value);
514 return this->
Element.fetch_xor(Value);
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
EMemoryOrder
Definition Atomic.h:32
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
typename TSignedIntType< NumBytes >::Type TSignedIntType_T
Definition IntType.h:25
UE_REWRITE constexpr void Exchange(T &A, T &B)
Definition UnrealTemplate.h:627
uint32 Size
Definition VulkanMemory.cpp:4034
Definition Core.Build.cs:8
constexpr TAtomic(T Arg)
Definition Atomic.h:556
T ElementType
Definition Atomic.h:542
FORCEINLINE T operator=(T Value)
Definition Atomic.h:578
FORCEINLINE TAtomic()=default
Definition OverriddenPropertySet.cpp:45
typename TAtomicBaseType< T, bIsVoidPointer, bIsIntegral, bCanUsePlatformAtomics >::Type TAtomicBaseType_T
Definition Atomic.h:211
FORCEINLINE T IncrementExchange(volatile T *Element)
Definition Atomic.h:102
FORCEINLINE T CompareExchange(volatile T *Element, T ExpectedValue, T NewValue)
Definition Atomic.h:158
FORCEINLINE T XorExchange(volatile T *Element, T XorValue)
Definition Atomic.h:179
FORCEINLINE void Store(const volatile T *Element, T Value)
Definition Atomic.h:89
TSignedIntType_T< sizeof(T)> TUnderlyingIntegerType_T
Definition Atomic.h:51
FORCEINLINE T OrExchange(volatile T *Element, T OrValue)
Definition Atomic.h:172
FORCEINLINE T SubExchange(volatile T *Element, DiffType Diff)
Definition Atomic.h:144
FORCEINLINE T AddExchange(volatile T *Element, DiffType Diff)
Definition Atomic.h:116
FORCEINLINE T LoadRelaxed(const volatile T *Element)
Definition Atomic.h:60
FORCEINLINE T DecrementExchange(volatile T *Element)
Definition Atomic.h:130
FORCEINLINE void StoreRelaxed(const volatile T *Element, T Value)
Definition Atomic.h:79
FORCEINLINE T AndExchange(volatile T *Element, T AndValue)
Definition Atomic.h:165
FORCEINLINE T Exchange(volatile T *Element, T Value)
Definition Atomic.h:95
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
FORCEINLINE T operator-=(DiffType Value)
Definition Atomic.h:369
FORCEINLINE T SubExchange(DiffType Value)
Definition Atomic.h:413
FORCEINLINE T AddExchange(DiffType Value)
Definition Atomic.h:401
FORCEINLINE T operator++(int)
Definition Atomic.h:325
FORCEINLINE T operator+=(DiffType Value)
Definition Atomic.h:337
FORCEINLINE T DecrementExchange()
Definition Atomic.h:389
constexpr TAtomicBase_Arithmetic(T Value)
Definition Atomic.h:421
FORCEINLINE T IncrementExchange()
Definition Atomic.h:379
FORCEINLINE T operator--(int)
Definition Atomic.h:357
TAtomicBase_Arithmetic()=default
FORCEINLINE T operator++()
Definition Atomic.h:315
FORCEINLINE T operator--()
Definition Atomic.h:347
FORCEINLINE void Store(T Value, EMemoryOrder Order=EMemoryOrder::SequentiallyConsistent)
Definition Atomic.h:238
FORCEINLINE T Load(EMemoryOrder Order=EMemoryOrder::SequentiallyConsistent) const
Definition Atomic.h:227
FORCEINLINE T Exchange(T Value)
Definition Atomic.h:250
constexpr TAtomicBase_Basic(T Value)
Definition Atomic.h:285
TAtomicBase_Basic()=default
FORCEINLINE bool CompareExchange(T &Expected, T Value)
Definition Atomic.h:277
std::atomic< T > Element
Definition Atomic.h:290
FORCEINLINE T XorExchange(const T Value)
Definition Atomic.h:512
FORCEINLINE T operator&=(const T Value)
Definition Atomic.h:452
FORCEINLINE T AndExchange(const T Value)
Definition Atomic.h:488
FORCEINLINE T operator|=(const T Value)
Definition Atomic.h:464
FORCEINLINE T operator^=(const T Value)
Definition Atomic.h:476
FORCEINLINE T OrExchange(const T Value)
Definition Atomic.h:500
TAtomicBase_Integral()=default
constexpr TAtomicBase_Integral(T Value)
Definition Atomic.h:521
constexpr TAtomicBase_Pointer(T Value)
Definition Atomic.h:434
TAtomicBase_Pointer()=default
Definition IsIntegral.h:12
Definition IsTrivial.h:15
@ Value
Definition Atomic.h:47
static constexpr bool Value
Definition Atomic.h:53