Mercurial > projects > dwt-addons
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__ );