/*
 * โครงสร้างข้อมูล : ฉบับวาจาวา
 * http://www.cp.eng.chula.ac.th/~somchai/books
 */
package dataStructures;

import java.util.NoSuchElementException;

/**
 * คลาสที่สร้างแถวคอยด้วยอาเรย์
 * @author สมชาย ประสิทธิ์จูตระกูล
 */
public class ArrayQueue implements Queue {
  private Object[] elementData;
  private int size;
  private int front;

  public ArrayQueue(int cap) {
    elementData = new Object[cap];
    size = front = 0;
  }
  public boolean isEmpty() {
    return size == 0;
  }
  public int size() {
    return size;
  }
  public void enqueue(Object e) {
    if (size == elementData.length) {
      Object[] a = new Object[2 * elementData.length];
      for (int i = 0, j = front; i < size;
           i++, j = (j+1)%elementData.length)
        a[i] = elementData[j];
      front = 0; elementData = a;
    }
    int b = (front + size) % elementData.length;
    elementData[b] = e; size++;
  }
  public Object peek() {
    if (isEmpty()) throw new NoSuchElementException();
    return elementData[front];
  }
  public Object dequeue() {
    Object e = peek();
    elementData[front] = null;
    front = (front + 1) % elementData.length;
    size--;
    return e;
  }
}