#include "SimulatorSPSCQueue.hpp" template SimulatorSPSCQueue::SimulatorSPSCQueue(uint32_t size) { this->size = size; this->data = new T[this->size + 1]; this->rd_index = 0; this->wr_index = 0; } template SimulatorSPSCQueue::~SimulatorSPSCQueue() { free(this->data); } template bool SimulatorSPSCQueue::isFull() { return ((this->wr_index + 1) % this->size) == this->rd_index; } template bool SimulatorSPSCQueue::isEmpty() { return this->rd_index == this->wr_index; } template bool SimulatorSPSCQueue::push(T obj) { bool retval = false; if (!this->isFull()) { retval = true; this->data[this->wr_index] = obj; this->wr_index = this->incrementIndex(this->wr_index); } return retval; } template std::optional SimulatorSPSCQueue::pop() { std::optional retval; retval = this->peek(); this->rd_index = this->incrementIndex(this->rd_index); return retval; } template std::optional SimulatorSPSCQueue::peek() { if (this->isEmpty()) { return std::nullopt; } return this->data[this->rd_index]; } template uint32_t SimulatorSPSCQueue::incrementIndex(uint32_t index) { return (index + 1) % this->size; }