jmud-0.11/
jmud-0.11/bin/
jmud-0.11/doc/
jmud-0.11/rec/
jmud-0.11/rec/mun/
jmud-0.11/rec/mun/grecia/
jmud-0.11/rec/mun/gunnar/
jmud-0.11/rec/qua/
jmud-0.11/src/bool/
jmud-0.11/src/clone/
jmud-0.11/src/integer/
jmud-0.11/src/misc/
jmud-0.11/src/string/
jmud-0.11/src/util/bit/
jmud-0.11/src/util/color/
jmud-0.11/src/util/file/
jmud-0.11/src/util/jgp/adaptor/
jmud-0.11/src/util/jgp/algorithm/
jmud-0.11/src/util/jgp/container/
jmud-0.11/src/util/jgp/functor/
jmud-0.11/src/util/jgp/interfaces/
jmud-0.11/src/util/jgp/predicate/
jmud-0.11/src/util/log/
jmud-0.11/src/util/state/
jmud-0.11/trash/
package util.nice;

import java.util.NoSuchElementException;

public class NiceQueue extends NiceList {

  private NiceListLink tail = null;

  public NiceQueue() {
  }

  private void add(NiceListLink aLink) {
    if (tail != null)
      tail.setNext(aLink);
    tail = aLink;
    if (head == null)
      head = tail;
  }

  public void insert(Niceable info) {
    add(new NiceListLink(info, null));
  }

  NiceListLink getTail() {
    return tail;
  }

  void setTail(NiceListLink t) {
    tail = t;
  }

  private NiceListLink findLastLink() {
    if (head == null)
      return null;

    NiceListLink curr = head;

    while (curr.getNext() != null)
      curr = curr.getNext();

    return curr;
  }

  public void remove(Niceable info) throws NoSuchElementException {
    super.remove(info);

    if (head == null)
      tail = null;
    else if (tail.getInfo() == info) 
      tail = findLastLink();
  }

  public Niceable remove() throws NoSuchElementException {
    if (head == null)
      throw new NoSuchElementException();

    Niceable info = head.getInfo();
    head = head.getNext();

    if (head == null)
      tail = null;

    return info;
  }

  public Object clone() {

    NiceQueue cloneQueue = new NiceQueue();
    NiceEnumeration myElements = elements();

    if (myElements.hasMoreElements()) {

      NiceListLink prevLink = new NiceListLink(myElements.nextElement(), null);
      cloneQueue.add(prevLink);

      while (myElements.hasMoreElements()) {
	prevLink.setNext(new NiceListLink(myElements.nextElement(), null));
	prevLink = prevLink.getNext();
      }

    }

    return cloneQueue;
  }

  public NiceIterator getIterator() {
    return new NiceQueueIterator(this);
  }
}