package util; import icecaptools.IcecapCompileMe; public class ReferenceList { private int[] refs; private short top; public ReferenceList() { refs = new int[2]; top = 0; } @IcecapCompileMe public void add(int ref) { if (top < refs.length) { refs[top] = ref; top++; } else { int[] newRefs = new int[refs.length << 1]; for (short i = 0; i < top; i++) { newRefs[i] = refs[i]; } refs = newRefs; add(ref); } } public void clear() { top = 0; } public boolean isEmpty() { return top == 0; } public int removeLast() { top--; return refs[top]; } private static class ReferenceIteratorImpl implements ReferenceIterator { private int[] refs; private short top; private short index; ReferenceIteratorImpl(int[] refs, short top) { this.refs = refs; this.top = top; this.index = 0; } @Override public boolean hasNext() { return index < top; } @Override public int next() { int n = refs[index]; index++; return n; } } public ReferenceIterator iterator() { return new ReferenceIteratorImpl(refs, top); } public int getLast() { return refs[top - 1]; } }