26template <
typename InElementType, EQueueMode Mode = EQueueMode::SingleProducerSingleConsumer>
32 Head = Tail =
new TNode();
37 while (Tail !=
nullptr)
55 if (NewNode ==
nullptr)
62 OldHead = std::atomic_exchange_explicit(&Head, NewNode, std::memory_order_seq_cst);
63 std::atomic_exchange_explicit(&
OldHead->Next, NewNode, std::memory_order_seq_cst);
69 std::atomic_thread_fence(std::memory_order_seq_cst);
79 if (NewNode ==
nullptr)
86 OldHead = std::atomic_exchange_explicit(&Head, NewNode, std::memory_order_seq_cst);
87 std::atomic_exchange_explicit(&
OldHead->Next, NewNode, std::memory_order_seq_cst);
93 std::atomic_thread_fence(std::memory_order_seq_cst);
109 TNode*
Popped = Tail->Next;
129 TNode*
Popped = Tail->Next;
160 return (Tail->Next.load() ==
nullptr);
167 TNode() :
Next(nullptr)
177 std::atomic<TNode*>
Next;
182 std::atomic<TNode*> Head;
196template <
typename InElementType>
200template <
typename InElementType>
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TQueueG & operator=(const TQueueG &)=delete
bool IsEmpty()
Definition Queue.h:158
bool Enqueue(const InElementType &InElement)
Definition Queue.h:52
bool Pop()
Definition Queue.h:127
void Empty()
Definition Queue.h:145
TQueueG()
Definition Queue.h:30
bool Enqueue(const InElementType &&InElement)
Definition Queue.h:76
TQueueG(const TQueueG &)=delete
bool Dequeue(InElementType &OutElement)
Definition Queue.h:107
~TQueueG()
Definition Queue.h:35
@ Element
Definition Visu.h:18
Definition VVMEngineEnvironment.h:23
EQueueMode
Concurrent queue modes.
Definition Queue.h:14
@ MultipleProducersSingleConsumer
@ SingleProducerSingleConsumer