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);
}
}