diff --git a/include/queue/queue.tpp b/include/queue/queue.tpp index b7f341c..2a71b9f 100644 --- a/include/queue/queue.tpp +++ b/include/queue/queue.tpp @@ -18,19 +18,36 @@ void Queue::clear() { template void Queue::push(Data data) { + if (size() >= QUEUE_SIZE - 1) { + throw std::overflow_error("Queue is full"); + } + buffer[ep] = data; + ep = (ep + 1) % QUEUE_SIZE; } template Data Queue::pull() { - return buffer[sp]; + if (size() == 0) { + throw std::underflow_error("Queue is empty"); + } + Data data = buffer[sp]; + sp = (sp + 1) % QUEUE_SIZE; + return data; } template Data Queue::top() { + if (size() == 0) { + throw std::underflow_error("Queue is empty (top)"); + } return buffer[sp]; } template int Queue::size() { - return 0; + if (ep >= sp) { + return ep - sp; + } else { + return QUEUE_SIZE - sp + ep; + } } \ No newline at end of file