46template<
typename T, EQueueMode Mode = EQueueMode::Spsc>
55 Head = Tail =
new TNode();
61 while (Tail !=
nullptr)
64 Tail = Tail->NextNode;
82 TNode*
Popped = Tail->NextNode;
125 TNode* NewNode =
new TNode(Item);
127 if (NewNode ==
nullptr)
136 OldHead = (TNode*)FPlatformAtomics::InterlockedExchangePtr((
void**)&Head, NewNode);
138 FPlatformAtomics::InterlockedExchangePtr((
void**)&
OldHead->NextNode, NewNode);
167 TNode* NewNode =
new TNode(
MoveTemp(Item));
169 if (NewNode ==
nullptr)
178 OldHead = (TNode*)FPlatformAtomics::InterlockedExchangePtr((
void**)&Head, NewNode);
180 FPlatformAtomics::InterlockedExchangePtr((
void**)&
OldHead->NextNode, NewNode);
208 return (Tail->NextNode ==
nullptr);
221 if (Tail->NextNode ==
nullptr)
226 OutItem = Tail->NextNode->Item;
241 if (Tail->NextNode ==
nullptr)
246 return &Tail->NextNode->Item;
263 TNode*
Popped = Tail->NextNode;
287 using TNodeVolatilePtr = std::conditional_t<Mode == EQueueMode::SingleThreaded, TNode*, TNode* volatile>;
292 TNodeVolatilePtr NextNode =
nullptr;
#define TSAN_AFTER(Addr)
Definition CoreMiscDefines.h:146
#define TSAN_BEFORE(Addr)
Definition CoreMiscDefines.h:145
EQueueMode
Definition Queue.h:17
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
bool Pop()
Definition Queue.h:261
bool Peek(FElementType &OutItem) const
Definition Queue.h:219
UE_FORCEINLINE_HINT const FElementType * Peek() const
Definition Queue.h:249
TQueue()
Definition Queue.h:53
bool IsEmpty() const
Definition Queue.h:206
bool Enqueue(FElementType &&Item)
Definition Queue.h:165
~TQueue()
Definition Queue.h:59
T FElementType
Definition Queue.h:50
bool Enqueue(const FElementType &Item)
Definition Queue.h:123
bool Dequeue(FElementType &OutItem)
Definition Queue.h:80
void Empty()
Definition Queue.h:110
FElementType * Peek()
Definition Queue.h:239
static UE_FORCEINLINE_HINT void MemoryBarrier()
Definition AndroidPlatformMisc.h:249