// Queue.java
// demonstrates queue
// Was originally implemented by Lafore. Modfified by Sriram Pemmaraju
// to make it generic and also change the names of some of the methods.
////////////////////////////////////////////////////////////////
class GenericQueue<E>
   {
   private int maxSize;
   private E [] queArray;
   private int front;
   private int rear;
   private int nItems;
//--------------------------------------------------------------
   public GenericQueue(int s)          // constructor
      {
      maxSize = s;
      queArray = (E []) new Object[maxSize];
      front = 0;
      rear = -1;
      nItems = 0;
      }
//--------------------------------------------------------------
   public void enqueue(E j)   // put item at rear of queue
      {
      if(rear == maxSize-1)         // deal with wraparound
         rear = -1;
      queArray[++rear] = j;         // increment rear and insert
      nItems++;                     // one more item
      }
//--------------------------------------------------------------
   public E dequeue()         // take item from front of queue
      {
      E temp = queArray[front++]; // get value and incr front
      if(front == maxSize)           // deal with wraparound
         front = 0;
      nItems--;                      // one less item
      return temp;
      }
//--------------------------------------------------------------
   public E peekFront()      // peek at front of queue
      {
      return queArray[front];
      }
//--------------------------------------------------------------
   public boolean isEmpty()    // true if queue is empty
      {
      return (nItems==0);
      }
//--------------------------------------------------------------
   public boolean isFull()     // true if queue is full
      {
      return (nItems==maxSize);
      }
//--------------------------------------------------------------
   public int size()           // number of items in queue
      {
      return nItems;
      }
//--------------------------------------------------------------
   }  // end class GenericQueue
