package rtg.api.util; import java.util.*; /** * * @author Zeno410 */ public class LimitedSet<Type> implements Set<Type>, Iterable<Type> { private HashSet<Type> members = new HashSet<Type>(); private ArrayList<Type> limiting; private int nextIndex; private int maxSize; private boolean full = false; public LimitedSet(int maxSize) { limiting = new ArrayList<Type> (maxSize); this.maxSize = maxSize; } public int size() { return members.size(); } public boolean isEmpty() { return members.isEmpty(); } public boolean contains(Object arg0) { return members.contains(arg0); } public Iterator<Type> iterator() { return members.iterator(); } public Object[] toArray() { return members.toArray(); } public <T> T[] toArray(T[] arg0) { return members.toArray(arg0); } public boolean add(Type arg0) { if (full){ members.remove(limiting.get(nextIndex)); limiting.set(nextIndex, arg0); } else { limiting.add(arg0); } nextIndex ++; if (nextIndex >= maxSize) { nextIndex = 0; full = true; } return members.add(arg0); } public boolean remove(Object arg0) { return members.remove(arg0); } public boolean containsAll(Collection<?> arg0) { return members.containsAll(arg0); } public boolean addAll(Collection<? extends Type> arg0) { for (Type added: arg0) { add(added); } return true; } public boolean retainAll(Collection<?> arg0) { return members.retainAll(arg0); } public boolean removeAll(Collection<?> arg0) { return members.removeAll(arg0); } public void clear() { members.clear(); } }