1 // Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
8 * An unsynchronized Vector implementation; same semantics as
9 * java.util.Vector. Useful for JDK1.1 platforms that don't have
10 * java.util.ArrayList.
11 * @see java.util.Vector
13 public final class Vec implements Serializable {
15 private Object[] store;
18 public Vec() { this(10); }
19 public Vec(int i) { store = new Object[i]; }
20 public Vec(int i, Object[] store) { size = i; this.store = store; }
22 private void grow() { grow(store.length * 2); }
23 private void grow(int newsize) {
24 Object[] newstore = new Object[newsize];
25 System.arraycopy(store, 0, newstore, 0, size);
29 public void removeAllElements() {
30 for(int i=0; i<size; i++) store[i] = null;
34 public void toArray(Object[] o) {
35 for(int i=0; i<size; i++)
39 public int indexOf(Object o) {
40 for(int i=0; i<size; i++)
41 if (store[i] == o) return i;
45 public void addElement(Object o) {
46 if (size >= store.length - 1) grow();
50 public Object peek() {
54 public Object elementAt(int i) {
58 public Object lastElement() {
59 if (size == 0) return null;
60 return store[size - 1];
63 public void push(Object o) { addElement(o); }
65 Object ret = lastElement();
66 if (size > 0) store[size--] = null;
70 public int size() { return size; }
72 public void setSize(int newSize) {
73 if (newSize < 0) throw new RuntimeException("tried to set size to negative value");
74 if (newSize > store.length) grow(newSize * 2);
76 for(int i=newSize; i<size; i++)
81 public void copyInto(Object[] out) {
82 for(int i=0; i<size; i++)
86 public void fromArray(Object[] in) {
88 for(int i=0; i<size; i++)
92 public void removeElementAt(int i) {
93 if (i >= size || i < 0) throw new RuntimeException("tried to remove an element outside the vector's limits");
94 for(int j=i; j<size - 1; j++)
95 store[j] = store[j + 1];
99 public void setElementAt(Object o, int i) {
100 if (i >= size) setSize(i);
104 public void removeElement(Object o) {
105 for(int i=0; i<size; i++)
112 public void insertElementAt(Object o, int at) {
113 if (size == store.length) grow();
114 for(int i=size; i>at; i--)
115 store[i] = store[i-1];
120 public interface CompareFunc {
121 public int compare(Object a, Object b);
124 public void sort(CompareFunc c) {
128 private final void swap(int a, int b) {
130 Object tmp = store[a];
136 private void sort(CompareFunc c, int start, int end) {
138 if(start >= end) return;
140 for(int i=start+1;i<=end;i++) {
143 for(j=i-1;j>=start;j--) {
144 if(c.compare(store[j],tmp) <= 0) break;
145 store[j+1] = store[j];
151 Object pivot = store[end];
155 while(c.compare(store[++lo],pivot) < 0) { }
156 while((hi > lo) && c.compare(store[--hi],pivot) > 0) { }