1 package edu.berkeley.sbp.util;
4 public /*final*/ class FastSet<T> implements Iterator<T>, Iterable<T> {
6 public static final int INITIAL_SIZE = 128;
8 private Object[] array;
13 public Iterator<T> iterator() { i=0; return this; }
14 public void remove() { throw new Error(); }
15 public boolean hasNext() { return only==null ? i<size : i<1; }
16 public T next() { return only==null ? (T)array[i++] : (i++)==0 ? only : null; }
18 if (i==0 && only!=null) return only;
19 if (array==null) return null;
24 public FastSet(T t) { only = t; }
25 public FastSet(Set<T> s) {
26 if (s.size()==1) { only = s.iterator().next(); return; }
27 array = new Object[s.size()];
28 for(T t : s) array[size++] = t;
31 public int size() { return only==null ? size : 1; }
33 Object[] array2 = array==null ? new Object[INITIAL_SIZE] : new Object[array.length * 2];
34 if (array != null) System.arraycopy(array, 0, array2, 0, array.length);
41 public void add(T t, boolean check) {
42 if (check) for(Object o : this) if (o.equals(t)) return;
45 public void add(T t) {
47 if (only!=null) { only = t; return; }
49 } else if (size>=array.length-1) {
55 public boolean contains(T t) {
56 if (t==only) return true;
57 if (array==null) return false;
58 for(Object o : array) if (o==t) return true;