package queues; import clist.*; import clist.visitor.*; import java.util.Enumeration; /** * A queue implemented using CList. * * Version 1. * * @author Alan L. Cox * @since 03/15/01 */ public class CListQueue implements IQueue { private CList _objects = new CList(); /** * Adds an object to the CListQueue. * @param object the object to enqueue * This enqueue method is O(1) since it has one statement. */ public void enqueue(Object object) { _objects.insertFrontCounterClockwise(object); } /** * Removes the first object of the CListQueue. * @return the dequeued object * This dequeue method is O(1) since it has one statement. */ public Object dequeue() { return _objects.removeFrontClockwise(); } /** * Enumerates the queue in clockwise order. * @return an Enumeration of the queue in clockwise order. * This dequeue method is O(1) since it contains single statements. */ public Enumeration enumeration() { /** * We can't use an anonymous inner class to implement this * Enumeration because of the cosntructor. */ class CListEnumeration implements Enumeration { private CList _next; private boolean last = false; private boolean done = false; private CList _stop; CListEnumeration(CList clist) { _next = clist; _stop = clist; } public boolean hasMoreElements() { if(((Boolean)_next.executeClockwise(IsEmpty.Singleton, null)).booleanValue()) return false; else { if (done == true) return false; CList tail = _next.getRestClockwise(); if (tail.equals(_stop)) { last = true; return true; } else return true; } } public Object nextElement() { if(((Boolean)_next.executeClockwise(IsEmpty.Singleton, null)).booleanValue()) return null; else { if (done == true) return null; if (last == true) { done = true; } Object object = _next.getFirstClockwise(); _next = _next.getRestClockwise(); return object; } } } return new CListEnumeration(_objects); } }