/**
 * Queue
 * Abstract data type representing Queues
 *
 * @author Chris Clifton
 *
 * @recitation mw4 Clifton
 *
 * @date 2/14/2011
 *
 */

interface Queue {
  
// Constants
  Person EMPTYRESULT = null;
  
  // Nested Classes
  class Full extends Exception {
    private int head, tail, size;
    
    public Full(int head, int tail, int size) {
      this.head = head;
      this.tail = tail;
      this.size = size;
    }
    
    public int getHead() {
      return head;
    }
    
    public int getTail() {
      return tail;
    }
    
    public int getSize() {
      return size;
    }
  }
  
// Methods
  void enqueue ( Person item ) throws Queue.Full; // Add item to end of queue
  Person dequeue() throws Empty; // Remove and return next item from queue
  boolean isEmpty();// True iff queue is empty
}
