diff dwtx/dwtxhelper/Collection.d @ 101:1082a0fc2bb8

First Draw2D example running
author Frank Benoit <benoit@tionex.de>
date Sun, 03 Aug 2008 02:17:46 +0200
parents 86617aa6b5dd
children 04b47443bb01
line wrap: on
line diff
--- a/dwtx/dwtxhelper/Collection.d	Sun Aug 03 00:54:29 2008 +0200
+++ b/dwtx/dwtxhelper/Collection.d	Sun Aug 03 02:17:46 2008 +0200
@@ -4,6 +4,7 @@
 
 static import tango.util.container.CircularList;
 static import tango.util.container.HashMap;
+static import tango.util.container.HashSet;
 static import tango.util.container.SortedMap;
 static import tango.util.container.more.Vector;
 
@@ -110,7 +111,17 @@
 }
 class Collections {
 
-    public static List EMPTY_LIST;
+    private static List EMPTY_LIST_;
+    public static List EMPTY_LIST(){
+        if( EMPTY_LIST_ is null ){
+            synchronized(Collections.classinfo ){
+                if( EMPTY_LIST_ is null ){
+                    EMPTY_LIST_ = new ArrayList(0);
+                }
+            }
+        }
+        return EMPTY_LIST_;
+    }
 
     public static List unmodifiableList( List list ){
         return null;
@@ -169,7 +180,9 @@
         return false;
     }
     public Object get(Object key){
-        implMissing( __FILE__, __LINE__ );
+        if( auto v = key in map ){
+            return *v;
+        }
         return null;
     }
     public override hash_t toHash(){
@@ -179,8 +192,11 @@
         return map.isEmpty();
     }
     public Set    keySet(){
-        implMissing( __FILE__, __LINE__ );
-        return null;
+        HashSet res = new HashSet();
+        foreach( k, v; map ){
+            res.add(k);
+        }
+        return res;
     }
     public Object put(Object key, Object value){
         Object res = null;
@@ -310,24 +326,33 @@
 }
 
 class HashSet : Set {
-    public this(){}
-    public this(Collection c){}
-    public this(int initialCapacity){}
-    public this(int initialCapacity, float loadFactor){}
+    alias tango.util.container.HashSet.HashSet!(Object) SetType;
+    private SetType set;
+
+    public this(){
+        set = new SetType();
+    }
+    public this(Collection c){
+        implMissing( __FILE__, __LINE__ );
+    }
+    public this(int initialCapacity){
+        implMissing( __FILE__, __LINE__ );
+    }
+    public this(int initialCapacity, float loadFactor){
+        implMissing( __FILE__, __LINE__ );
+    }
     public bool    add(Object o){
-        implMissing( __FILE__, __LINE__ );
-        return false;
+        return set.add(o);
     }
     public bool    addAll(Collection c){
         implMissing( __FILE__, __LINE__ );
         return false;
     }
     public void   clear(){
-        implMissing( __FILE__, __LINE__ );
+        set.clear();
     }
     public bool    contains(Object o){
-        implMissing( __FILE__, __LINE__ );
-        return false;
+        return set.contains(o);
     }
     public bool    containsAll(Collection c){
         implMissing( __FILE__, __LINE__ );
@@ -342,16 +367,29 @@
         return 0;
     }
     public bool    isEmpty(){
-        implMissing( __FILE__, __LINE__ );
-        return false;
+        return set.isEmpty();
+    }
+    class LocalIterator : Iterator {
+        SetType.Iterator iter;
+        Object nextElem;
+        this( SetType.Iterator iter){
+            this.iter = iter;
+        }
+        public bool hasNext(){
+            return iter.next(nextElem);
+        }
+        public Object next(){
+            return nextElem;
+        }
+        public void  remove(){
+            iter.remove();
+        }
     }
     public Iterator   iterator(){
-        implMissing( __FILE__, __LINE__ );
-        return null;
+        return new LocalIterator(set.iterator());
     }
     public bool    remove(Object o){
-        implMissing( __FILE__, __LINE__ );
-        return false;
+        return set.remove(o);
     }
     public bool    removeAll(Collection c){
         implMissing( __FILE__, __LINE__ );
@@ -362,8 +400,7 @@
         return false;
     }
     public int    size(){
-        implMissing( __FILE__, __LINE__ );
-        return 0;
+        return set.size();
     }
     public Object[]   toArray(){
         implMissing( __FILE__, __LINE__ );
@@ -939,12 +976,13 @@
         implMissing( __FILE__, __LINE__ );
     }
     void   add(int index, Object element){
-        implMissing( __FILE__, __LINE__ );
+        data.length = data.length +1;
+        System.arraycopy( data, index, data, index+1, data.length - index -1 );
+        data[index] = element;
     }
     bool    add(Object o){
-
-        implMissing( __FILE__, __LINE__ );
-        return false;
+        data ~= o;
+        return true;
     }
     bool    addAll(Collection c){
         implMissing( __FILE__, __LINE__ );
@@ -955,10 +993,20 @@
         return false;
     }
     void   clear(){
-        implMissing( __FILE__, __LINE__ );
+        data.length = 0;
     }
     bool    contains(Object o){
-        implMissing( __FILE__, __LINE__ );
+        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    containsAll(Collection c){
@@ -1009,9 +1057,27 @@
     bool    isEmpty(){
         return data.length is 0;
     }
+    class LocalIterator : Iterator{
+        int idx = 0;
+        public this(){
+        }
+        public bool hasNext(){
+            return idx < data.length;
+        }
+        public Object next(){
+            Object res = data[idx];
+            idx++;
+            return res;
+        }
+        public void  remove(){
+            implMissing( __FILE__, __LINE__ );
+            this.outer.remove(idx);
+            idx--;
+        }
+    }
+
     Iterator   iterator(){
-        implMissing( __FILE__, __LINE__ );
-        return null;
+        return new LocalIterator();
     }
     int    lastIndexOf(Object o){
         foreach_reverse( i, v; data ){
@@ -1037,7 +1103,7 @@
     }
     Object     remove(int index){
         Object res = data[index];
-        data[ index .. $-1] = data[ index+1 .. $ ];
+        System.arraycopy( data, index+1, data, index, data.length - index - 1 );
         data.length = data.length -1;
         return res;
     }
@@ -1054,12 +1120,12 @@
         return false;
     }
     Object     set(int index, Object element){
-        implMissing( __FILE__, __LINE__ );
-        return null;
+        Object res = data[index];
+        data[index] = element;
+        return res;
     }
     int    size(){
-        implMissing( __FILE__, __LINE__ );
-        return 0;
+        return data.length;
     }
     List   subList(int fromIndex, int toIndex){
         implMissing( __FILE__, __LINE__ );