--- /dev/null
+// Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL]
+package org.xwt.util;
+
+import java.util.*;
+import java.io.*;
+
+/**
+ * An unsynchronized Vector implementation; same semantics as
+ * java.util.Vector. Useful for JDK1.1 platforms that don't have
+ * java.util.ArrayList.
+ * @see java.util.Vector
+ */
+public class Vec implements Serializable {
+
+ private Object[] store;
+ private int size = 0;
+
+ public Vec() { this(10); }
+ public Vec(int i) { store = new Object[i]; }
+
+ private void grow() { grow(store.length * 2); }
+ private void grow(int newsize) {
+ Object[] newstore = new Object[newsize];
+ System.arraycopy(store, 0, newstore, 0, size);
+ store = newstore;
+ }
+
+ public void removeAllElements() {
+ for(int i=0; i<size; i++) store[i] = null;
+ size = 0;
+ }
+
+ public void toArray(Object[] o) {
+ for(int i=0; i<size; i++)
+ o[i] = store[i];
+ }
+
+ public int indexOf(Object o) {
+ for(int i=0; i<size; i++)
+ if (store[i] == o) return i;
+ return -1;
+ }
+
+ public void addElement(Object o) {
+ if (size >= store.length) grow();
+ store[size++] = o;
+ }
+
+ public Object elementAt(int i) {
+ return store[i];
+ }
+
+ public Object lastElement() {
+ if (size == 0) return null;
+ return store[size - 1];
+ }
+
+ public int size() { return size; }
+
+ public void setSize(int newSize) {
+ if (newSize < 0) throw new RuntimeException("tried to set size to negative value");
+ if (newSize > size) grow(newSize * 2);
+ if (newSize < size)
+ for(int i=newSize; i<size; i++)
+ store[i] = null;
+ size = newSize;
+ }
+
+ public void copyInto(Object[] out) {
+ for(int i=0; i<size; i++)
+ out[i] = store[i];
+ }
+
+ public void removeElementAt(int i) {
+ if (i >= size || i < 0) throw new RuntimeException("tried to remove an element outside the vector's limits");
+ for(int j=i; j<size - 1; j++)
+ store[j] = store[j + 1];
+ setSize(size - 1);
+ }
+
+ public void setElementAt(Object o, int i) {
+ if (i >= size) setSize(i);
+ store[i] = o;
+ }
+
+ public void removeElement(Object o) {
+ for(int i=0; i<size; i++)
+ if (store[i] == o) {
+ removeElementAt(i);
+ return;
+ }
+ }
+
+ public void insertElementAt(Object o, int at) {
+ if (size == store.length) grow();
+ for(int i=size; i>at; i--)
+ store[i] = store[i-1];
+ store[at] = o;
+ size++;
+ }
+
+}