69 : Data(RoundUpToPowerOfTwo(capacity))
70 , LastIndex(Data.size() - 1)
79 Data[Tail] = std::move(item);
80 Tail = (Tail + 1) & LastIndex;
97 Head = (Head + 1) & LastIndex;
105 return (Data.size() + Tail - Head) & LastIndex;
117 static size_t RoundUpToPowerOfTwo(
size_t value) {
119 while (power < value) {
125 void EnsureCapacity() {
126 if (
Size() == Data.size() - 1) [[unlikely]] {
127 std::vector<T> newData(Data.size() * 2);
129 for (
size_t i = 0; i < size; ++i) {
130 newData[i] = std::move(Data[(Head + i) & LastIndex]);
132 Data = std::move(newData);
135 LastIndex = Data.size() - 1;
142 size_t LastIndex = 0;
size_t Size() const
Get current number of elements in the queue.
Definition queue.hpp:104
T & Front()
Get reference to the front element.
Definition queue.hpp:88
void Push(T &&item)
Add element to the back of the queue.
Definition queue.hpp:77
TUnboundedVectorQueue(size_t capacity=16)
Construct queue with initial capacity.
Definition queue.hpp:68
void Pop()
Remove the front element from the queue.
Definition queue.hpp:96
bool Empty() const
Check if the queue is empty.
Definition queue.hpp:112