SOURCE FILE:  QueueA.cpp 
// ********************************************************
// Implementation file QueueA.cpp for the ADT queue.
// Circular array-based implementation.
// The array has indexes to the front and back of the 
// queue. A counter tracks the number of items currently 
// in the queue.
// ********************************************************
#include "QueueA.h"  // header file
queueClass::queueClass(): 
             Front(0), Back(MAX_QUEUE-1), Count(0)
{
}  // end default constructor
bool queueClass::QueueIsEmpty() const
{
   return bool(Count == 0);
}  // end QueueIsEmpty
void queueClass::QueueInsert(queueItemType NewItem, 
                             bool& Success)
{
   Success = bool(Count < MAX_QUEUE);
   if (Success)
   {  // queue is not full; insert item
      Back = (Back+1) % MAX_QUEUE;
      Items[Back] = NewItem;
      ++Count;
   }  // end if
}  // end QueueInsert
void queueClass::QueueDelete(bool& Success)
{
   Success = bool(!QueueIsEmpty());
   if (Success)
   {  // queue is not empty; remove front
      Front = (Front+1) % MAX_QUEUE;
      --Count;
   }  // end if
}  // end QueueDelete
void queueClass::QueueDelete(queueItemType& QueueFront, 
                             bool& Success)
{
   Success = bool(!QueueIsEmpty());
   if (Success)
   {  // queue is not empty; retrieve and remove front
      QueueFront = Items[Front];
      Front = (Front+1) % MAX_QUEUE;
      --Count;
   }  // end if
}  // end QueueDelete
void queueClass::GetQueueFront(queueItemType& QueueFront,
                               bool& Success) const
{
   Success = bool(!QueueIsEmpty());
   if (Success)
      // queue is not empty; retrieve front
      QueueFront = Items[Front];
}  // end GetQueueFront
// End of implementation file