9#include "Misc/Optional.h"
16template<
typename T,
typename AllocatorType = FMemory>
26 FNode* Sentinel = ::new(AllocatorType::Malloc(
sizeof(FNode),
alignof(FNode))) FNode;
27 Head.store(Sentinel, std::memory_order_relaxed);
33 FNode*
Next = Tail->Next.load(std::memory_order_relaxed);
36 AllocatorType::Free(Tail);
38 while (
Next !=
nullptr)
41 Next = Tail->Next.load(std::memory_order_relaxed);
44 AllocatorType::Free(Tail);
51 FNode*
New = ::new(AllocatorType::Malloc(
sizeof(FNode),
alignof(FNode))) FNode;
54 FNode* Prev = Head.exchange(
New, std::memory_order_acq_rel);
55 Prev->Next.store(
New, std::memory_order_release);
60 FNode*
Next = Tail->Next.load(std::memory_order_acquire);
71 AllocatorType::Free(Tail);
94 FNode*
Next = Tail->Next.load(std::memory_order_acquire);
106 return Tail->Next.load(std::memory_order_acquire) ==
nullptr;
112 std::atomic<FNode*>
Next{
nullptr };
117 std::atomic<FNode*> Head;
FORCEINLINE constexpr void DestructItem(ElementType *Element)
Definition MemoryOps.h:56
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T * New(FMemStackBase &Mem, int32 Count=1, int32 Align=DEFAULT_ALIGNMENT)
Definition MemStack.h:259
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTempIfPossible(T &&Obj) noexcept
Definition UnrealTemplate.h:538
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition MpscQueue.h:18
bool IsEmpty() const
Definition MpscQueue.h:104
~TMpscQueue()
Definition MpscQueue.h:31
TOptional< ElementType > Dequeue()
Definition MpscQueue.h:58
UE_NONCOPYABLE(TMpscQueue)
T ElementType
Definition MpscQueue.h:20
bool Dequeue(ElementType &OutElem)
Definition MpscQueue.h:77
ElementType * Peek() const
Definition MpscQueue.h:92
TMpscQueue()
Definition MpscQueue.h:24
void Enqueue(ArgTypes &&... Args)
Definition MpscQueue.h:49
Definition Optional.h:131
Definition TypeCompatibleBytes.h:24