MCPcopy Create free account
hub / github.com/9chu/LuaSTGPlus / CirularQueue

Class CirularQueue

LuaSTGPlus/CirularQueue.hpp:7–61  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5{
6 template <typename T, size_t MaxSize>
7 class CirularQueue
8 {
9 private:
10 std::array<T, MaxSize> m_Data;
11 size_t m_Front = 0;
12 size_t m_Rear = 0;
13 size_t m_Count = 0;
14 public:
15 T& operator[](size_t idx)
16 {
17 LASSERT(idx < m_Count);
18 return m_Data[(idx + m_Front) % MaxSize];
19 }
20 bool IsEmpty() { return m_Front == m_Rear; }
21 bool IsFull() { return (m_Front == (m_Rear + 1) % MaxSize); }
22 size_t Size() { return m_Count; }
23 size_t Max() { return MaxSize - 1; }
24 bool Push(T val)
25 {
26 if (IsFull())
27 return false;
28 else
29 {
30 m_Data[m_Rear] = val;
31 m_Rear = (m_Rear + 1) % MaxSize;
32 ++m_Count;
33 return true;
34 }
35 }
36 bool Pop(T& out)
37 {
38 if (IsEmpty())
39 return false;
40 else
41 {
42 out = m_Data[m_Front];
43 m_Front = (m_Front + 1) % MaxSize;
44 --m_Count;
45 return true;
46 }
47 }
48 T& Front()
49 {
50 LASSERT(!IsEmpty());
51 return m_Data[m_Front];
52 }
53 T& Back()
54 {
55 LASSERT(!IsEmpty());
56 if (m_Rear == 0)
57 return m_Data[MaxSize - 1];
58 else
59 return m_Data[m_Rear - 1];
60 }
61 };
62}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected