flat queue
parent
a772fb42d5
commit
e50d6ab469
|
@ -21,7 +21,48 @@ namespace BLT {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class flat_queue {
|
class flat_queue {
|
||||||
|
private:
|
||||||
|
int size = 16;
|
||||||
|
int insertIndex = 0;
|
||||||
|
int headIndex = 0;
|
||||||
|
T* data = new T[size];
|
||||||
|
|
||||||
|
void expand(int newSize){
|
||||||
|
auto tempData = new T[newSize];
|
||||||
|
for (int i = 0; i < size - headIndex; i++)
|
||||||
|
tempData[i] = data[i + headIndex];
|
||||||
|
delete[] data;
|
||||||
|
insertIndex = size - headIndex;
|
||||||
|
headIndex = 0;
|
||||||
|
data = tempData;
|
||||||
|
size = newSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
void push(const T& t) {
|
||||||
|
if (insertIndex >= size){
|
||||||
|
expand(size * 2);
|
||||||
|
}
|
||||||
|
data[insertIndex++] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] const T& front() const {
|
||||||
|
return data[headIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
void pop() {
|
||||||
|
headIndex++;
|
||||||
|
// queue is empty. Clear old data.
|
||||||
|
if (headIndex >= size){
|
||||||
|
delete[] data;
|
||||||
|
data = new T[size];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~flat_queue() {
|
||||||
|
delete[](data);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -30,7 +71,7 @@ namespace BLT {
|
||||||
node<T>* head;
|
node<T>* head;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void insert(const T& t) {
|
void push(const T& t) {
|
||||||
if (head == nullptr)
|
if (head == nullptr)
|
||||||
head = new node<T>(t, nullptr);
|
head = new node<T>(t, nullptr);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue