package com.limegroup.gnutella.util; import java.util.Iterator; import java.util.LinkedList; /** * a round-robin queue. basically two lists that flip back and forth. */ public class RoundRobinQueue { LinkedList _current; /** * do not create the terminating elements */ public RoundRobinQueue() { _current = new LinkedList(); } /** * enqueues the specified object in the round-robin queue. * @param value the object to add to the queue */ public synchronized void enqueue(Object value) { _current.addLast(value); } /** * @return the next object in the round robin queue */ public synchronized Object next() { Object ret = _current.removeFirst(); _current.addLast(ret); return ret; } /** * removes the next occurence of the specified object * @param o the object to remove from the queue. */ public synchronized void remove (Object o) { _current.remove(o); } /** * removes all occurences of the given object in the list. * @param o the object to remove. */ public synchronized void removeAllOccurences(Object o) { Iterator iterator = _current.iterator(); while(iterator.hasNext()) if (iterator.next().equals(o)) iterator.remove(); } public synchronized int size() { return _current.size(); } }