diff java/src/java/util/ArrayList.d @ 10:eb8ff453285d

Added java.util collection classes.
author Frank Benoit <benoit@tionex.de>
date Fri, 13 Mar 2009 16:57:07 +0100
parents
children 9b96950f2c3c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/java/src/java/util/ArrayList.d	Fri Mar 13 16:57:07 2009 +0100
@@ -0,0 +1,267 @@
+module java.util.ArrayList;
+
+import java.lang.all;
+import java.util.AbstractList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Collection;
+import java.util.Iterator;
+
+static import tango.core.Array;
+
+class ArrayList : AbstractList, List {
+    private Object[] data;
+
+    this(){
+    }
+    this(int size){
+        data.length = size;
+        data.length = 0;
+    }
+    this(Collection col){
+        this(cast(int)(col.size*1.1));
+        addAll(col);
+    }
+    void   add(int index, Object element){
+        data.length = data.length +1;
+        System.arraycopy( data, index, data, index+1, data.length - index -1 );
+        data[index] = element;
+    }
+    bool    add(Object o){
+        data ~= o;
+        return true;
+    }
+    public bool    add(String o){
+        return add(stringcast(o));
+    }
+    bool    addAll(Collection c){
+        if( c.size() is 0 ) return false;
+        uint idx = data.length;
+        data.length = data.length + c.size();
+        foreach( o; c ){
+            data[ idx++ ] = o;
+        }
+        return true;
+    }
+    bool    addAll(int index, Collection c){
+        implMissing( __FILE__, __LINE__ );
+        return false;
+    }
+    void   clear(){
+        data.length = 0;
+    }
+    ArrayList clone(){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    bool    contains(Object o){
+        foreach( v; data ){
+            if( o is v ){
+                return true;
+            }
+            if(( o is null ) || ( v is null )){
+                continue;
+            }
+            if( o == v ){
+                return true;
+            }
+        }
+        return false;
+    }
+    bool    contains(String o){
+        return contains(stringcast(o));
+    }
+    bool    containsAll(Collection c){
+        implMissing( __FILE__, __LINE__ );
+        return false;
+    }
+    int opEquals(Object o){
+        if( auto other = cast(ArrayList)o ){
+            if( data.length !is other.data.length ){
+                return false;
+            }
+            for( int i = 0; i < data.length; i++ ){
+                if( data[i] is other.data[i] ){
+                    continue;
+                }
+                if(( data[i] is null ) || ( other.data[i] is null )){
+                    return false;
+                }
+                if( data[i] == other.data[i] ){
+                    continue;
+                }
+                return false;
+            }
+            return true;
+        }
+        return false;
+    }
+    Object     get(int index){
+        return data[index];
+    }
+    public override hash_t toHash(){
+        return super.toHash();
+    }
+    int    indexOf(Object o){
+        foreach( i, v; data ){
+            if( data[i] is o ){
+                return i;
+            }
+            if(( data[i] is null ) || ( o is null )){
+                continue;
+            }
+            if( data[i] == o ){
+                return i;
+            }
+        }
+        return -1;
+    }
+    bool    isEmpty(){
+        return data.length is 0;
+    }
+    class LocalIterator : Iterator{
+        int idx = -1;
+        public this(){
+        }
+        public bool hasNext(){
+            return idx+1 < data.length;
+        }
+        public Object next(){
+            idx++;
+            Object res = data[idx];
+            return res;
+        }
+        public void  remove(){
+            implMissing( __FILE__, __LINE__ );
+            this.outer.remove(idx);
+            idx--;
+        }
+    }
+
+    Iterator   iterator(){
+        return new LocalIterator();
+    }
+    int    lastIndexOf(Object o){
+        foreach_reverse( i, v; data ){
+            if( data[i] is o ){
+                return i;
+            }
+            if(( data[i] is null ) || ( o is null )){
+                continue;
+            }
+            if( data[i] == o ){
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    class LocalListIterator : ListIterator {
+        int idx_next = 0;
+        public bool hasNext(){
+            return idx_next < data.length;
+        }
+        public Object next(){
+            Object res = data[idx_next];
+            idx_next++;
+            return res;
+        }
+        public void  remove(){
+            implMissing( __FILE__, __LINE__ );
+            this.outer.remove(idx_next);
+            idx_next--;
+        }
+        public void   add(Object o){
+            implMissing( __FILE__, __LINE__ );
+        }
+        public bool   add(String o){
+            implMissing( __FILE__, __LINE__ );
+            return false;
+        }
+        public bool   hasPrevious(){
+            return idx_next > 0;
+        }
+        public int    nextIndex(){
+            return idx_next;
+        }
+        public Object previous(){
+            idx_next--;
+            Object res = data[idx_next];
+            return res;
+        }
+        public int    previousIndex(){
+            return idx_next-1;
+        }
+        public void   set(Object o){
+            implMissing( __FILE__, __LINE__ );
+        }
+    }
+
+    ListIterator   listIterator(){
+        return new LocalListIterator();
+    }
+    ListIterator   listIterator(int index){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    Object     remove(int index){
+        Object res = data[index];
+        System.arraycopy( data, index+1, data, index, data.length - index - 1 );
+        data.length = data.length -1;
+        return res;
+    }
+    bool    remove(Object o){
+        return tango.core.Array.remove(data, o) !is 0;
+    }
+    public bool remove(String key){
+        return remove(stringcast(key));
+    }
+    bool    removeAll(Collection c){
+        implMissing( __FILE__, __LINE__ );
+        return false;
+    }
+    bool    retainAll(Collection c){
+        implMissing( __FILE__, __LINE__ );
+        return false;
+    }
+    protected  void     removeRange(int fromIndex, int toIndex){
+        implMissing( __FILE__, __LINE__ );
+    }
+    Object     set(int index, Object element){
+        Object res = data[index];
+        data[index] = element;
+        return res;
+    }
+    int    size(){
+        return data.length;
+    }
+    List   subList(int fromIndex, int toIndex){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    Object[]   toArray(){
+        return data.dup;
+    }
+    Object[]   toArray(Object[] a){
+        if( data.length <= a.length ){
+            a[ 0 .. data.length ] = data;
+        }
+        else{
+            return data.dup;
+        }
+        if( data.length < a.length ){
+            a[data.length] = null;
+        }
+        return a;
+    }
+
+    // only for D
+    public int opApply (int delegate(ref Object value) dg){
+        foreach( o; data ){
+            auto res = dg( o );
+            if( res ) return res;
+        }
+        return 0;
+    }
+}
+