| package p; |
| |
| class A { |
| int size = 0; |
| Comparable[] elems = new Comparable[10]; |
| public java.util.Iterator iterator() { |
| return new Iterator(this); |
| } |
| public A add(Comparable e) { |
| if (size + 1 == elems.length) { |
| Comparable[] newElems = new Comparable[2 * size]; |
| System.arraycopy(elems, 0, newElems, 0, size); |
| elems = newElems; |
| } |
| elems[size++] = e; |
| return this; |
| } |
| public A addAll(A v1) { |
| java.util.Iterator i = v1.iterator(); |
| for (; i.hasNext(); add((Comparable) i.next())); |
| return this; |
| } |
| public void sort() { /* insertion sort */ |
| for (int i = 1; i < size; i++) { |
| Comparable e1 = elems[i]; |
| int j = i; |
| while ((j > 0) && (elems[j - 1].compareTo(e1) > 0)) { |
| elems[j] = elems[j - 1]; |
| j--; |
| } |
| elems[j] = e1; |
| } |
| } |
| } |
| class Iterator implements java.util.Iterator { |
| private int count = 0; |
| private A v2; |
| Iterator(A v3) { |
| v2 = v3; |
| } |
| public boolean hasNext() { |
| return count < v2.size; |
| } |
| public Object next() { |
| return v2.elems[count++]; |
| } |
| public void remove() { |
| throw new UnsupportedOperationException(); |
| } |
| } |
| class Client { |
| public static void main(String[] args) { |
| A v4 = createList(); |
| populate(v4); |
| update(v4); |
| sortList(v4); |
| print(v4); |
| } |
| static A createList() { |
| return new A(); |
| } |
| static void populate(A v5) { |
| v5.add("foo").add("bar"); |
| } |
| static void update(A v6) { |
| A v7 = new A().add("zap").add("baz"); |
| v6.addAll(v7); |
| } |
| static void sortList(A v8) { |
| v8.sort(); |
| } |
| static void print(A v9) { |
| for (java.util.Iterator iter = v9.iterator(); iter.hasNext();) |
| System.out.println("Object: " + iter.next()); |
| } |
| } |