    01: /**
    02:     A first-in, first-out bounded collection of objects.
    03: */
    04: public class Queue
    05: {
    06:    /**
    07:        Constructs an empty queue.
    08:        @param capacity the maximum capacity of the queue
    09:    */
    10:    public Queue(int capacity)
    11:    {
    12:       elements = new Object[capacity];
    13:       head = 0;
    14:       tail = 0;
    15:       size = 0;
    16:    }
    17:
    18:    /**
    19:        Removes the object at the head.
    20:        @return the object that has been removed from the queue
    21:        @precondition !isEmpty()
    22:    */
    23:    public Object removeFirst()
    24:    {
    25:       if (debug) System.out.print("removeFirst");
    26:       Object r = elements[head];
    27:       if (debug) System.out.print(".");
    28:       head++;
    29:       if (debug) System.out.print(".");
    30:       size--;
    31:       if (head == elements.length)
    32:       {
    33:          if (debug) System.out.print(".");
    34:          head = 0;
    35:       }
    36:       if (debug)
    37:          System.out.println("head=" + head + ",tail=" + tail
    38:             + ",size=" + size);
    39:       return r;
    40:    }
    41:
    42:    /**
    43:        Appends an object at the tail.
    44:        @param aObject the object to be appended
    45:        @precondition !isFull();
    46:    */
    47:    public void add(Object anObject)
    48:    {
    49:       if (debug) System.out.print("add");
    50:       elements[tail] = anObject;
    51:       if (debug) System.out.print(".");
    52:       tail++;
    53:       if (debug) System.out.print(".");
    54:       size++;
    55:       if (tail == elements.length)
    56:       {
    57:          if (debug) System.out.print(".");
    58:          tail = 0;
    59:       }
    60:       if (debug)
    61:          System.out.println("head=" + head + ",tail=" + tail
    62:             + ",size=" + size);
    63:    }
    64:
    65:    public boolean isFull()
    66:    {
    67:       return size == elements.length;
    68:    }
    69:
    70:    public boolean isEmpty()
    71:    {
    72:       return size == 0;
    73:    }
    74:
    75:    public void setDebug(boolean newValue)
    76:    {
    77:       debug = newValue;
    78:    }
    79:
    80:    private Object[] elements;
    81:    private int head;
    82:    private int tail;
    83:    private int size;
    84:    private boolean debug;
    85: }