Hymn to Beauty
C++ 3D Engine
Queue.hpp
Go to the documentation of this file.
1#pragma once
2
3namespace Utility {
5template <typename T> class Queue {
6 public:
8 Queue() = default;
9
11 ~Queue();
12
14
17 void Push(const T& val);
18
20
23 T* Front();
24
26
29 T* Back();
30
32 void Pop();
33
35
38 bool Empty() const;
39
41
44 T* Iterate();
45
47
50 unsigned int Size() const;
51
52 private:
53 struct Node {
54 Node() = default;
55 T val;
56 Node* forward = nullptr;
57 Node* backward = nullptr;
58 };
59
60 Node* front = nullptr;
61 Node* back = nullptr;
62 Node* iterator = nullptr;
63 unsigned int count = 0;
64};
65
66template <typename T> Queue<T>::~Queue() {
67 while (front) {
68 Node* node = front;
69 front = node->backward;
70 delete node;
71 }
72}
73
74template <typename T> void Queue<T>::Push(const T& val) {
75 Node* node = new Node();
76 node->val = val;
77 if (Empty()) {
78 front = node;
79 back = node;
80 } else {
81 back->backward = node;
82 node->forward = back;
83 back = node;
84 }
85 ++count;
86}
87
88template <typename T> T* Queue<T>::Front() {
89 return front ? &front->val : nullptr;
90}
91
92template <typename T> T* Queue<T>::Back() {
93 return back ? &back->val : nullptr;
94}
95
96template <typename T> void Queue<T>::Pop() {
97 if (!Empty()) {
98 Node* node = front;
99 front = node->backward;
100 if (front)
101 front->forward = nullptr;
102 else
103 back = nullptr;
104 delete node;
105 --count;
106 }
107}
108
109template <typename T> bool Queue<T>::Empty() const {
110 return front == nullptr;
111}
112
113template <typename T> T* Queue<T>::Iterate() {
114 if (!iterator)
115 iterator = front;
116 else
117 iterator = iterator->backward;
118 return iterator ? &iterator->val : nullptr;
119}
120
121template <typename T> unsigned int Queue<T>::Size() const {
122 return count;
123}
124} // namespace Utility
Queue container class.
Definition: Queue.hpp:5
T * Front()
Get value at front of queue.
Definition: Queue.hpp:88
unsigned int Size() const
Get the number of elements in queue.
Definition: Queue.hpp:121
void Pop()
Remove value at front of queue.
Definition: Queue.hpp:96
T * Back()
Get value at back of queue.
Definition: Queue.hpp:92
Queue()=default
Constructor.
void Push(const T &val)
Push value at back of queue.
Definition: Queue.hpp:74
bool Empty() const
Check if queue is empty.
Definition: Queue.hpp:109
~Queue()
Destrcutor.
Definition: Queue.hpp:66
T * Iterate()
Iterate over all values in queue.
Definition: Queue.hpp:113
Definition: ResourceView.hpp:12