/** A JavaScript JSArray */
public class JSArray extends JS {
+
private static final Object NULL = new Object();
+ private Vec vec = new Vec();
- private BalancedTree arr = new BalancedTree();
-
public JSArray() { }
public JSArray(int size) { setSize(size); }
public final int length() { return size(); }
public final Object elementAt(int i) {
if(i < 0 || i >= size()) throw new ArrayIndexOutOfBoundsException(i);
- Object o = arr.getNode(i);
+ Object o = vec.elementAt(i);
return o == NULL ? null : o;
}
public final void addElement(Object o) {
- arr.insertNode(size(),o==null ? NULL : o);
+ vec.insertElementAt(o==null ? NULL : o, size());
}
public final void setElementAt(Object o, int i) {
if(i < 0 || i >= size()) throw new ArrayIndexOutOfBoundsException(i);
- arr.replaceNode(i,o==null ? NULL : o);
+ vec.setElementAt(o==null ? NULL : o,i);
}
public final void insertElementAt(Object o, int i) {
if(i < 0 || i > size()) throw new ArrayIndexOutOfBoundsException(i);
- arr.insertNode(i,o==null ? NULL : o);
+ vec.insertElementAt(o==null ? NULL : o, i);
}
public final Object removeElementAt(int i) {
if(i < 0 || i >= size()) throw new ArrayIndexOutOfBoundsException(i);
- Object o = arr.deleteNode(i);
+ Object o = vec.elementAt(i);
+ vec.removeElementAt(i);
return o == NULL ? null : o;
}
- public final int size() { return arr.treeSize(); }
+ public final int size() { return vec.size(); }
public String typeName() { return "array"; }
private Object join(String sep) {
int size = size();
if(size < 2) return this;
Vec vec = toVec();
- arr.clear();
+ vec.removeAllElements();
for(int i=size-1,j=0;i>=0;i--,j++) insertElementAt(vec.elementAt(i),j);
return this;
}
return ret;
}
- public Vec toVec() {
- int count = size();
- Vec vec = new Vec();
- vec.setSize(count);
- for(int i=0;i<count;i++) {
- Object o = arr.getNode(i);
- vec.setElementAt(o == NULL ? null : o,i);
- }
- return vec;
- }
-
- protected void setFromVec(Vec vec) {
- int count = vec.size();
- arr.clear();
- for(int i=0;i<count;i++) {
- Object o = vec.elementAt(i);
- arr.insertNode(i,o==null ? NULL : o);
- }
- }
-
+ protected Vec toVec() { return (Vec)vec.clone(); }
+ protected void setFromVec(Vec vec) { this.vec = (Vec)vec.clone(); }
public String toString() { return JS.toString(join(",")); }
}