//---------------------------------------------------------------------------- // // FILE : queue.C // AUTHOR : Eugene Wallingford // CREATION DATE : April 1, 1997 // //---------------------------------------------------------------------------- // // MODIFIED BY : // DATE : // DESCRIPTION : // //---------------------------------------------------------------------------- #include "queue.h" //------------------------------------------------------------------------ // CLASS : QueueNode // DESCRIPTION : Constructor //------------------------------------------------------------------------ template QueueNode::QueueNode(QE element, QueueNode < QE > * successor) { data = element; next = successor; } //------------------------------------------------------------------------ // CLASS : Queue // DESCRIPTION : Constructor and Destructor //------------------------------------------------------------------------ template Queue::Queue(int maxSize) { QE initial_value; QueueNode * temp; temp = new QueueNode (initial_value, 0); lastFree = temp; lastFilled = temp; temp->next = temp; maxSize--; while (maxSize > 0) { temp = new QueueNode (initial_value, lastFilled->next); lastFilled->next = temp; lastFilled = temp; maxSize--; } lastFilled = lastFree; } template Queue::~Queue() { QueueNode * start = lastFilled->next; lastFilled->next = 0; while (start != 0) { lastFilled = start; start = start->next; delete lastFilled; } lastFilled = 0; lastFree = 0; } //------------------------------------------------------------------------ // CLASS : Queue // DESCRIPTION : Query Messages //------------------------------------------------------------------------ template int Queue::isEmpty() { // return true if the queue is empty, that is, // if front is the same as rear return lastFilled == lastFree; } template int Queue::isFull() { // return true if the queue is full, that is, // if there is only one free slot return lastFilled->next == lastFree; } //------------------------------------------------------------------------ // CLASS : Queue // DESCRIPTION : Manipulation Messages //------------------------------------------------------------------------ template < class QE > QE Queue < QE >::dequeue() { // advance front of queue, return value of element at the front lastFree = lastFree->next; return lastFree->data; } template QE Queue::front() { // return value of element at the front return lastFree->next->data; } template void Queue::enqueue(QE e) { if (lastFilled->next == lastFree) { QueueNode * temp = new QueueNode(e, lastFilled->next); lastFilled->next = temp; lastFilled = temp; } else { lastFilled = lastFilled->next; lastFilled->data = e; } } // END OF FILE