Mercurial > projects > dwt-addons
diff dwtx/dwtxhelper/Collection.d @ 104:04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
These new wrappers now use the tango.util.containers instead of the tango.util.collections.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 07 Aug 2008 15:01:33 +0200 |
parents | 1082a0fc2bb8 |
children | 8ab6fb387666 |
line wrap: on
line diff
--- a/dwtx/dwtxhelper/Collection.d Sun Aug 03 17:01:51 2008 +0200 +++ b/dwtx/dwtxhelper/Collection.d Thu Aug 07 15:01:33 2008 +0200 @@ -2,20 +2,60 @@ import dwt.dwthelper.utils; +static import tango.core.Exception; 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; -interface Iterator{ +// class AListIterator { +// +// ArraySeq!(Object) c; +// int i; +// +// this( ArraySeq!(Object) c ){ +// this.c = c; +// } +// +// Object next(){ +// return c.get(++i); +// } +// Object previous(){ +// return c.get(--i); +// } +// +// bool hasNext(){ +// return i+1 < c.size(); +// } +// bool hasPrevious(){ +// return i > 0; +// } +// +// void remove(){ +// c.removeAt(i); +// if( i is c.size() ) i--; +// } +// int nextIndex(){ +// return i+1; +// } +// } + + +interface Iterator { public bool hasNext(); public Object next(); public void remove(); } +interface Enumeration { + public bool hasMoreElements(); + public Object nextElement(); +} + interface Collection { public bool add(Object o); + public bool add(String o); public bool addAll(Collection c); public void clear(); public bool contains(Object o); @@ -25,26 +65,43 @@ public bool isEmpty(); public Iterator iterator(); public bool remove(Object o); + public bool remove(String o); public bool removeAll(Collection c); public bool retainAll(Collection c); public int size(); public Object[] toArray(); public Object[] toArray(Object[] a); + + // only for D + public int opApply (int delegate(ref Object value) dg); } interface Map { + interface Entry { + int opEquals(Object o); + Object getKey(); + Object getValue(); + hash_t toHash(); + Object setValue(Object value); + } public void clear(); public bool containsKey(Object key); + public bool containsKey(String key); public bool containsValue(Object value); public Set entrySet(); public int opEquals(Object o); public Object get(Object key); + public Object get(String key); public hash_t toHash(); public bool isEmpty(); public Set keySet(); public Object put(Object key, Object value); + public Object put(String key, Object value); + public Object put(Object key, String value); + public Object put(String key, String value); public void putAll(Map t); public Object remove(Object key); + public Object remove(String key); public int size(); public Collection values(); @@ -56,6 +113,7 @@ interface List : Collection { public void add(int index, Object element); public bool add(Object o); + public bool add(String o); public bool addAll(Collection c); public bool addAll(int index, Collection c); public void clear(); @@ -72,6 +130,7 @@ public ListIterator listIterator(int index); public Object remove(int index); public bool remove(Object o); + public bool remove(String o); public bool removeAll(Collection c); public bool retainAll(Collection c); public Object set(int index, Object element); @@ -83,23 +142,50 @@ interface Set : Collection { public bool add(Object o); + public bool add(String o); public bool addAll(Collection c); public void clear(); public bool contains(Object o); + public bool contains(String o); public bool containsAll(Collection c); public int opEquals(Object o); public hash_t toHash(); public bool isEmpty(); public Iterator iterator(); public bool remove(Object o); + public bool remove(String o); public bool removeAll(Collection c); public bool retainAll(Collection c); public int size(); public Object[] toArray(); public Object[] toArray(Object[] a); + public String toString(); + + // only for D + public int opApply (int delegate(ref Object value) dg); } -interface ListIterator { + +interface SortedSet : Set { + Comparator comparator(); + Object first(); + SortedSet headSet(Object toElement); + Object last(); + SortedSet subSet(Object fromElement, Object toElement); + SortedSet tailSet(Object fromElement); +} + +interface SortedMap : Map { + Comparator comparator(); + Object firstKey(); + SortedMap headMap(Object toKey); + Object lastKey(); + SortedMap subMap(Object fromKey, Object toKey); + SortedMap tailMap(Object fromKey); +} + +interface ListIterator : Iterator { public void add(Object o); + public bool add(String o); public bool hasNext(); public bool hasPrevious(); public Object next(); @@ -109,32 +195,45 @@ public void remove(); public void set(Object o); } -class Collections { + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////// + class MapEntry : Map.Entry { + Map map; + Object key; + private this( Map map, Object key){ + this.map = map; + this.key = key; + } + public override int opEquals(Object o){ + if( auto other = cast(MapEntry)o){ - 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); + if(( getKey() is null ? other.getKey() is null : getKey() == other.getKey() ) && + ( getValue() is null ? other.getValue() is null : getValue() == other.getValue() )){ + return true; } + return false; } + return false; + } + public Object getKey(){ + return key; } - return EMPTY_LIST_; + public Object getValue(){ + return map.get(key); + } + public override hash_t toHash(){ + return ( getKey() is null ? 0 : getKey().toHash() ) ^ + ( getValue() is null ? 0 : getValue().toHash() ); + } + public Object setValue(Object value){ + return map.put( key, value ); + } + } - public static List unmodifiableList( List list ){ - return null; - } - public static void sort(List list){ - } - public static void sort(List list, Comparator c){ - } - static void reverse(List list) { - } -} - class HashMap : Map { + // The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls. alias tango.util.container.HashMap.HashMap!(Object,Object) MapType; private MapType map; @@ -142,13 +241,14 @@ map = new MapType(); } public this(int initialCapacity){ - implMissing( __FILE__, __LINE__ ); + this(); } public this(int initialCapacity, float loadFactor){ - implMissing( __FILE__, __LINE__ ); + map = new MapType(loadFactor); } public this(Map m){ - implMissing( __FILE__, __LINE__ ); + this(); + putAll(m); } public void clear(){ map.clear(); @@ -157,12 +257,18 @@ Object v; return map.get(key, v ); } + public bool containsKey(String key){ + return containsKey(stringcast(key)); + } public bool containsValue(Object value){ return map.contains(value); } public Set entrySet(){ - implMissing( __FILE__, __LINE__ ); - return null; + HashSet res = new HashSet(); + foreach( k, v; map ){ + res.add( new MapEntry(this,k)); + } + return res; } public override int opEquals(Object o){ if( auto other = cast(HashMap) o ){ @@ -185,6 +291,9 @@ } return null; } + public Object get(String key){ + return get(stringcast(key)); + } public override hash_t toHash(){ return super.toHash(); } @@ -206,16 +315,34 @@ map[ key ] = value; return res; } + public Object put(String key, Object value){ + return put( stringcast(key), value ); + } + public Object put(Object key, String value){ + return put( key, stringcast(value) ); + } + public Object put(String key, String value){ + return put( stringcast(key), stringcast(value) ); + } public void putAll(Map t){ - implMissing( __FILE__, __LINE__ ); + foreach( k, v; t ){ + map[k] = v; + } } public Object remove(Object key){ - implMissing( __FILE__, __LINE__ ); + if( auto v = key in map ){ + Object res = *v; + map.remove(key); + return res; + } + map.remove(key); return null; } + public Object remove(String key){ + return remove(stringcast(key)); + } public int size(){ - implMissing( __FILE__, __LINE__ ); - return 0; + return map.size(); } public Collection values(){ ArrayList res = new ArrayList( size() ); @@ -234,7 +361,218 @@ } -class TreeMap : Map { +class Dictionary { + public this(){ + } + abstract Enumeration elements(); + abstract Object get(Object key); + Object get(String key){ + return get(stringcast(key)); + } + abstract bool isEmpty(); + abstract Enumeration keys(); + abstract Object put(Object key, Object value); + public Object put(String key, Object value){ + return put(stringcast(key), value); + } + public Object put(Object key, String value){ + return put(key, stringcast(value)); + } + public Object put(String key, String value){ + return put(stringcast(key), stringcast(value)); + } + abstract Object remove(Object key); + public Object remove(String key){ + return remove(stringcast(key)); + } + abstract int size(); +} + +class Hashtable : Dictionary, Map { + + public Object get(String key){ + return super.get(key); + } + public Object put(String key, Object value){ + return super.put(key, value); + } + public Object put(Object key, String value){ + return super.put(key, value); + } + public Object put(String key, String value){ + return super.put(key, value); + } + public Object remove(String key){ + return super.remove(key); + } + + // The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls. + public this(){ + implMissing( __FILE__, __LINE__ ); + } + public this(int initialCapacity){ + implMissing( __FILE__, __LINE__ ); + } + public this(int initialCapacity, float loadFactor){ + implMissing( __FILE__, __LINE__ ); + } + public this(Map t){ + implMissing( __FILE__, __LINE__ ); + } + + Enumeration elements(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + Enumeration keys() { + implMissing( __FILE__, __LINE__ ); + return null; + } + public void clear(){ + implMissing( __FILE__, __LINE__ ); + } + public bool containsKey(Object key){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool containsKey(String key){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool containsValue(Object value){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public Set entrySet(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public int opEquals(Object o){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public Object get(Object key){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public hash_t toHash(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public bool isEmpty(){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public Set keySet(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object put(Object key, Object value){ + implMissing( __FILE__, __LINE__ ); + return null; + } +// public Object put(String key, Object value) +// public Object put(Object key, String value) +// public Object put(String key, String value) + public void putAll(Map t){ + implMissing( __FILE__, __LINE__ ); + } + public Object remove(Object key){ + implMissing( __FILE__, __LINE__ ); + return null; + } +// public Object remove(String key) + public int size(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public Collection values(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + + // only for D + public int opApply (int delegate(ref Object value) dg){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public int opApply (int delegate(ref Object key, ref Object value) dg){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + +} + +abstract class AbstractMap : Map { + public this(){ + implMissing( __FILE__, __LINE__ ); + } + void clear(){ + implMissing( __FILE__, __LINE__ ); + } + protected Object clone(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + bool containsKey(Object key){ + implMissing( __FILE__, __LINE__ ); + return false; + } + bool containsValue(Object value){ + implMissing( __FILE__, __LINE__ ); + return false; + } + abstract Set entrySet(); + + public override int opEquals(Object o){ + if( Map other = cast(Map)o){ + return entrySet().opEquals( cast(Object) other.entrySet() ); + } + return false; + } + + Object get(Object key){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public override hash_t toHash(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + bool isEmpty(){ + implMissing( __FILE__, __LINE__ ); + return false; + } + Set keySet(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + Object put(Object key, Object value){ + implMissing( __FILE__, __LINE__ ); + return null; + } + void putAll(Map t){ + implMissing( __FILE__, __LINE__ ); + } + Object remove(Object key){ + implMissing( __FILE__, __LINE__ ); + return null; + } + int size(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + String toString(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + Collection values(){ + implMissing( __FILE__, __LINE__ ); + return null; + } +} + +class TreeMap : Map, SortedMap { alias tango.util.container.SortedMap.SortedMap!(Object,Object) MapType; private MapType map; @@ -247,22 +585,32 @@ public this(Map m){ implMissing( __FILE__, __LINE__ ); } -// public this(SortedMap m){ -// implMissing( __FILE__, __LINE__ ); -// } + public this(SortedMap m){ + implMissing( __FILE__, __LINE__ ); + } public void clear(){ map.clear(); } + Comparator comparator(){ + implMissing( __FILE__, __LINE__ ); + return null; + } public bool containsKey(Object key){ Object v; return map.get(key, v ); } + public bool containsKey(String key){ + return containsKey(stringcast(key)); + } public bool containsValue(Object value){ return map.contains(value); } public Set entrySet(){ - implMissing( __FILE__, __LINE__ ); - return null; + TreeSet res = new TreeSet(); + foreach( k, v; map ){ + res.add( new MapEntry(this,k) ); + } + return res; } public override int opEquals(Object o){ if( auto other = cast(HashMap) o ){ @@ -279,36 +627,91 @@ } return false; } + Object firstKey(){ + foreach( k; map ){ + return k; + } + throw new tango.core.Exception.NoSuchElementException( "TreeMap.firstKey" ); + } public Object get(Object key){ implMissing( __FILE__, __LINE__ ); return null; } + public Object get(String key){ + return get(stringcast(key)); + } public override hash_t toHash(){ - return super.toHash(); + // http://java.sun.com/j2se/1.4.2/docs/api/java/util/AbstractMap.html#hashCode() + hash_t res = 0; + foreach( e; entrySet() ){ + res += e.toHash(); + } + return res; + } + SortedMap headMap(Object toKey){ + implMissing( __FILE__, __LINE__ ); + return null; } public bool isEmpty(){ return map.isEmpty(); } - public Set keySet(){ + public Set keySet(){ + TreeSet res = new TreeSet(); + foreach( k; map ){ + res.add( k ); + } + return res; + } + Object lastKey(){ + Object res; + foreach( k; map ){ + res = k; + } + if( map.size() ) return res; + throw new tango.core.Exception.NoSuchElementException( "TreeMap.lastKey" ); + } + public Object put(Object key, Object value){ + if( map.contains(key) ){ // TODO if tango has opIn_r, then use the "in" operator + Object res = map[key]; + map[key] = value; + return res; + } + map[key] = value; + return null; + } + public Object put(String key, Object value){ + return put(stringcast(key), value); + } + public Object put(Object key, String value){ + return put(key, stringcast(value)); + } + public Object put(String key, String value){ + return put(stringcast(key), stringcast(value)); + } + public void putAll(Map t){ + foreach( k, v; t ){ + put( k, v ); + } + } + public Object remove(Object key){ + Object res; + map.take(key,res); + return res; + } + public Object remove(String key){ + return remove(stringcast(key)); + } + public int size(){ + return map.size(); + } + SortedMap subMap(Object fromKey, Object toKey){ implMissing( __FILE__, __LINE__ ); return null; } - public Object put(Object key, Object value){ - Object res = null; - implMissing( __FILE__, __LINE__ ); - return res; - } - public void putAll(Map t){ - implMissing( __FILE__, __LINE__ ); - } - public Object remove(Object key){ + SortedMap tailMap(Object fromKey){ implMissing( __FILE__, __LINE__ ); return null; } - public int size(){ - implMissing( __FILE__, __LINE__ ); - return 0; - } public Collection values(){ ArrayList res = new ArrayList( size() ); foreach( k, v; map ){ @@ -344,6 +747,9 @@ public bool add(Object o){ return set.add(o); } + public bool add(String o){ + return add(stringcast(o)); + } public bool addAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -354,6 +760,9 @@ public bool contains(Object o){ return set.contains(o); } + public bool contains(String o){ + return contains(stringcast(o)); + } public bool containsAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -391,6 +800,9 @@ public bool remove(Object o){ return set.remove(o); } + public bool remove(String key){ + return remove(stringcast(key)); + } public bool removeAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -410,23 +822,500 @@ implMissing( __FILE__, __LINE__ ); return null; } + public override String toString(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + // only for D + public int opApply (int delegate(ref Object value) dg){ + return set.opApply(dg); + } + +} + +abstract class AbstractCollection : Collection { + this(){ + } + bool add(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + bool addAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + void clear(){ + implMissing( __FILE__, __LINE__ ); + } + bool contains(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + bool containsAll(Collection c){ + if( c is null ) throw new NullPointerException(); + foreach( o; c ){ + if( !contains(o) ) return false; + } + return true; + } + override int opEquals(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + bool isEmpty(){ + implMissing( __FILE__, __LINE__ ); + return false; + } + abstract Iterator iterator(); + override hash_t toHash(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + bool remove(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + bool remove(String o){ + return remove(stringcast(o)); + } + bool removeAll(Collection c){ + if( c is null ) throw new NullPointerException(); + bool res = false; + foreach( o; c ){ + res |= remove(o); + } + return res; + } + bool retainAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + abstract int size(); + Object[] toArray(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + Object[] toArray(Object[] a){ + implMissing( __FILE__, __LINE__ ); + return null; + } + String toString(){ + implMissing( __FILE__, __LINE__ ); + return null; + } +} + +abstract class AbstractSet : AbstractCollection, Set { + this(){ + } + int opEquals(Object o){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + hash_t toHash(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + bool removeAll(Collection c){ + return super.removeAll(c); + } + public abstract bool add(Object o); + public abstract bool add(String o); + public abstract bool addAll(Collection c); + public abstract void clear(); + public abstract bool contains(Object o); + public abstract bool contains(String o); + public abstract bool containsAll(Collection c); + + + public abstract bool isEmpty(); + public abstract Iterator iterator(); + public abstract bool remove(Object o); + public abstract bool remove(String o); + public abstract bool removeAll(Collection c); + public abstract bool retainAll(Collection c); + public abstract int size(); + public abstract Object[] toArray(); + public abstract Object[] toArray(Object[] a); + public abstract String toString(){ + return super.toString(); + } + + // only for D + public abstract int opApply (int delegate(ref Object value) dg); +} + +abstract class AbstractList : AbstractCollection, List { + this(){ + } + + public abstract void add(int index, Object element); + public abstract bool add(Object o); + public abstract bool addAll(Collection c); + public abstract bool addAll(int index, Collection c); + public abstract void clear(); + public abstract bool contains(Object o); + public abstract bool containsAll(Collection c); + public abstract int opEquals(Object o); + public abstract Object get(int index); + + public hash_t toHash(){ + // http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html#hashCode() + hash_t hashCode = 1; + Iterator i = iterator(); + while (i.hasNext()) { + Object obj = i.next(); + hashCode = 31 * hashCode + (obj is null ? 0 : obj.toHash()); + } + return hashCode; + } + + public abstract int indexOf(Object o); + public abstract bool isEmpty(); + public abstract Iterator iterator(); + public abstract int lastIndexOf(Object o); + public abstract ListIterator listIterator(); + public abstract ListIterator listIterator(int index); + public abstract Object remove(int index); + protected abstract void removeRange(int fromIndex, int toIndex); + public abstract bool remove(Object o); + public abstract bool remove(String o); + public abstract bool removeAll(Collection c); + public abstract bool retainAll(Collection c); + public abstract Object set(int index, Object element); + public abstract List subList(int fromIndex, int toIndex); + public abstract Object[] toArray(); + public abstract Object[] toArray(Object[] a); } +class TreeSet : AbstractSet, SortedSet { -class Vector : List { - this(){ + alias tango.util.container.SortedMap.SortedMap!(Object,int) SetType; + private SetType set; + + public this(){ + set = new SetType(); + } + public this(Collection c){ + implMissing( __FILE__, __LINE__ ); + } + public this(Comparator c){ + implMissing( __FILE__, __LINE__ ); + } + public this(SortedSet){ + implMissing( __FILE__, __LINE__ ); + } + + public bool add(Object o){ + return set.add(o, 0); + } + public bool add(String o){ + return add(stringcast(o)); + } + public bool addAll(Collection c){ + foreach( o; c ){ + add(o); + } + return true; + } + public void clear(){ + set.clear(); + } + public bool contains(Object o){ + return set.containsKey(o); + } + public bool contains(String o){ + return contains(stringcast(o)); + } + public bool containsAll(Collection c){ + foreach( o; c ){ + if( !contains(o) ){ + return false; + } + } + return true; + } + public Comparator comparator(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public override int opEquals(Object o){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public Object first(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public override hash_t toHash(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public SortedSet headSet(Object toElement){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public bool isEmpty(){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public Iterator iterator(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object last(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public bool remove(Object o){ + return false; + } + public bool remove(String key){ + return remove(stringcast(key)); + } + public bool removeAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool retainAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public int size(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public SortedSet subSet(Object fromElement, Object toElement){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public SortedSet tailSet(Object fromElement){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object[] toArray(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object[] toArray(Object[] a){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public override String toString(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + + + // only for D + public int opApply (int delegate(ref Object value) dg){ + int localDg( ref Object key, ref int value ){ + return dg( key ); + } + return set.opApply(&localDg); + } +} + +class Vector : AbstractList, List { + public this(){ + implMissing( __FILE__, __LINE__ ); + } + public this(Collection c){ + implMissing( __FILE__, __LINE__ ); + } + public this(int initialCapacity){ + implMissing( __FILE__, __LINE__ ); + } + public this(int initialCapacity, int capacityIncrement){ + implMissing( __FILE__, __LINE__ ); + } + public void add(int index, Object element){ + implMissing( __FILE__, __LINE__ ); + } + public bool add(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool add(String o){ + return add(stringcast(o)); + } + public bool addAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool addAll(int index, Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public void addElement(Object obj){ implMissing( __FILE__, __LINE__ ); } - this(Collection c){ + public int capacity(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public void clear(){ + implMissing( __FILE__, __LINE__ ); + } + public Object clone(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public bool contains(Object elem){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool containsAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public void copyInto(Object[] anArray){ + implMissing( __FILE__, __LINE__ ); + } + public Object elementAt(int index){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Enumeration elements(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public void ensureCapacity(int minCapacity){ + implMissing( __FILE__, __LINE__ ); + } + public int opEquals(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public Object firstElement(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object get(int index){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public hash_t toHash(){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public int indexOf(Object elem){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public int indexOf(Object elem, int index){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public void insertElementAt(Object obj, int index){ implMissing( __FILE__, __LINE__ ); } - this(int initialCapacity){ + public bool isEmpty(){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public Iterator iterator(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object lastElement(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public int lastIndexOf(Object elem){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public int lastIndexOf(Object elem, int index){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + public ListIterator listIterator(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public ListIterator listIterator(int index){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object remove(int index){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public bool remove(Object o){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public bool remove(String key){ + return remove(stringcast(key)); + } + public bool removeAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public void removeAllElements(){ implMissing( __FILE__, __LINE__ ); } - this(int initialCapacity, int capacityIncrement){ + public bool removeElement(Object obj){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public void removeElementAt(int index){ + implMissing( __FILE__, __LINE__ ); + } + protected void removeRange(int fromIndex, int toIndex){ + implMissing( __FILE__, __LINE__ ); + } + public bool retainAll(Collection c){ + implMissing( __FILE__, __LINE__ ); + return false; + } + public Object set(int index, Object element){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public void setElementAt(Object obj, int index){ + implMissing( __FILE__, __LINE__ ); + } + public void setSize(int newSize){ + implMissing( __FILE__, __LINE__ ); + } + public int size(){ implMissing( __FILE__, __LINE__ ); + return 0; + } + public List subList(int fromIndex, int toIndex){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object[] toArray(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public Object[] toArray(Object[] a){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public String toString(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public void trimToSize(){ + implMissing( __FILE__, __LINE__ ); + } + + // only for D + public int opApply (int delegate(ref Object value) dg){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + +} + +class Stack : Vector { + this(){ } void add(int index, Object element){ implMissing( __FILE__, __LINE__ ); @@ -435,6 +1324,9 @@ implMissing( __FILE__, __LINE__ ); return false; } + public bool add(String o){ + return add(stringcast(o)); + } bool addAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -542,177 +1434,8 @@ implMissing( __FILE__, __LINE__ ); return false; } - bool removeAll(Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; - } - void removeAllElements(){ - implMissing( __FILE__, __LINE__ ); - } - bool removeElement(Object obj){ - implMissing( __FILE__, __LINE__ ); - return false; - } - void removeElementAt(int index){ - implMissing( __FILE__, __LINE__ ); - } - protected void removeRange(int fromIndex, int toIndex){ - implMissing( __FILE__, __LINE__ ); - } - bool retainAll(Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; - } - Object set(int index, Object element){ - implMissing( __FILE__, __LINE__ ); - return null; - } - void setElementAt(Object obj, int index){ - implMissing( __FILE__, __LINE__ ); - } - void setSize(int newSize){ - implMissing( __FILE__, __LINE__ ); - } - int size(){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - List subList(int fromIndex, int toIndex){ - implMissing( __FILE__, __LINE__ ); - return null; - } - Object[] toArray(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - Object[] toArray(Object[] a){ - implMissing( __FILE__, __LINE__ ); - return null; - } - String toString(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - void trimToSize(){ - implMissing( __FILE__, __LINE__ ); - } -} -class Stack : Vector { - this(){ - } - void add(int index, Object element){ - implMissing( __FILE__, __LINE__ ); - } - bool add(Object o){ - implMissing( __FILE__, __LINE__ ); - return false; - } - bool addAll(Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; - } - bool addAll(int index, Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; - } - void addElement(Object obj){ - implMissing( __FILE__, __LINE__ ); - } - int capacity(){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - void clear(){ - implMissing( __FILE__, __LINE__ ); - } - Object clone(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - bool contains(Object elem){ - implMissing( __FILE__, __LINE__ ); - return false; - } - bool containsAll(Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; - } - void copyInto(Object[] anArray){ - implMissing( __FILE__, __LINE__ ); - } - Object elementAt(int index){ - implMissing( __FILE__, __LINE__ ); - return null; - } -// Enumeration elements(){ -// implMissing( __FILE__, __LINE__ ); -// return null; -// } - void ensureCapacity(int minCapacity){ - implMissing( __FILE__, __LINE__ ); - } - int opEquals(Object o){ - implMissing( __FILE__, __LINE__ ); - return false; - } - Object firstElement(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - Object get(int index){ - implMissing( __FILE__, __LINE__ ); - return null; - } - hash_t toHash(){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - int indexOf(Object elem){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - int indexOf(Object elem, int index){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - void insertElementAt(Object obj, int index){ - implMissing( __FILE__, __LINE__ ); - } - bool isEmpty(){ - implMissing( __FILE__, __LINE__ ); - return false; - } - Iterator iterator(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - Object lastElement(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - int lastIndexOf(Object elem){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - int lastIndexOf(Object elem, int index){ - implMissing( __FILE__, __LINE__ ); - return 0; - } - ListIterator listIterator(){ - implMissing( __FILE__, __LINE__ ); - return null; - } - ListIterator listIterator(int index){ - implMissing( __FILE__, __LINE__ ); - return null; - } - Object remove(int index){ - implMissing( __FILE__, __LINE__ ); - return null; - } - bool remove(Object o){ - implMissing( __FILE__, __LINE__ ); - return false; + public bool remove(String key){ + return remove(stringcast(key)); } bool removeAll(Collection c){ implMissing( __FILE__, __LINE__ ); @@ -790,52 +1513,83 @@ implMissing( __FILE__, __LINE__ ); return 0; } + + // only for D + public int opApply (int delegate(ref Object value) dg){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + } class LinkedList : List { + alias tango.util.container.CircularList.CircularList!(Object) ListType; + private ListType list; + + this(){ + list = new ListType(); + } + this( Collection c ){ + this(); + addAll(c); + } void add(int index, Object element){ - implMissing( __FILE__, __LINE__ ); + list.addAt(index,element); + return true; } bool add(Object o){ - implMissing( __FILE__, __LINE__ ); - return false; + list.add(o); + return true; + } + public bool add(String o){ + return add(stringcast(o)); } bool addAll(Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; + if( c is null ) throw new NullPointerException(); + bool res = false; + foreach( o; c ){ + res |= add( o ); + } + return res; } bool addAll(int index, Collection c){ implMissing( __FILE__, __LINE__ ); return false; } - void addElement(Object obj){ - implMissing( __FILE__, __LINE__ ); + void addFirst(Object o){ + list.prepend( o ); } + void addLast(Object o){ + list.append( o ); + } +// void addElement(Object obj){ +// implMissing( __FILE__, __LINE__ ); +// } int capacity(){ implMissing( __FILE__, __LINE__ ); return 0; } void clear(){ - implMissing( __FILE__, __LINE__ ); + list.clear(); } Object clone(){ implMissing( __FILE__, __LINE__ ); return null; } bool contains(Object elem){ - implMissing( __FILE__, __LINE__ ); - return false; + return list.contains(elem); } bool containsAll(Collection c){ - implMissing( __FILE__, __LINE__ ); - return false; + foreach(o; c){ + if( !list.contains(o)) return false; + } + return true; } void copyInto(Object[] anArray){ implMissing( __FILE__, __LINE__ ); } Object elementAt(int index){ - implMissing( __FILE__, __LINE__ ); - return null; + return list.get(index); } // Enumeration elements(){ // implMissing( __FILE__, __LINE__ ); @@ -907,6 +1661,9 @@ implMissing( __FILE__, __LINE__ ); return false; } + public bool remove(String key){ + return remove(stringcast(key)); + } bool removeAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -914,6 +1671,14 @@ void removeAllElements(){ implMissing( __FILE__, __LINE__ ); } + Object removeFirst(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + Object removeLast(){ + implMissing( __FILE__, __LINE__ ); + return null; + } bool removeElement(Object obj){ implMissing( __FILE__, __LINE__ ); return false; @@ -947,12 +1712,10 @@ return null; } Object[] toArray(){ - implMissing( __FILE__, __LINE__ ); - return null; + return list.toArray(); } Object[] toArray(Object[] a){ - implMissing( __FILE__, __LINE__ ); - return null; + return list.toArray( a ); } String toString(){ implMissing( __FILE__, __LINE__ ); @@ -961,9 +1724,16 @@ void trimToSize(){ implMissing( __FILE__, __LINE__ ); } + + // only for D + public int opApply (int delegate(ref Object value) dg){ + implMissing( __FILE__, __LINE__ ); + return 0; + } + } -class ArrayList : List { +class ArrayList : AbstractList, List { private Object[] data; this(){ @@ -984,6 +1754,9 @@ data ~= o; return true; } + public bool add(String o){ + return add(stringcast(o)); + } bool addAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -995,6 +1768,10 @@ void clear(){ data.length = 0; } + ArrayList clone(){ + implMissing( __FILE__, __LINE__ ); + return null; + } bool contains(Object o){ foreach( v; data ){ if( o is v ){ @@ -1111,6 +1888,9 @@ implMissing( __FILE__, __LINE__ ); return false; } + public bool remove(String key){ + return remove(stringcast(key)); + } bool removeAll(Collection c){ implMissing( __FILE__, __LINE__ ); return false; @@ -1119,6 +1899,9 @@ 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; @@ -1132,10 +1915,127 @@ 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){ + implMissing( __FILE__, __LINE__ ); + return 0; + } +} + +class Arrays { + public static bool equals(Object[] a, Object[] b){ + if( a.length !is b.length ){ + return false; + } + for( int i = 0; i < a.length; i++ ){ + if( a[i] is null && b[i] is null ){ + continue; + } + if( a[i] !is null && b[i] !is null && a[i] == b[i] ){ + continue; + } + return false; + } + return true; + } + static List asList(Object[] a) { + if( a.length is 0 ) return Collections.EMPTY_LIST; + ArrayList res = new ArrayList( a.length ); + foreach( o; a ){ + res.add(o); + } + return res; + } +} + +class Collections { + + 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 Map EMPTY_MAP(){ implMissing( __FILE__, __LINE__ ); return null; } - Object[] toArray(Object[] a){ + public static Set EMPTY_SET(){ + implMissing( __FILE__, __LINE__ ); + return null; + } + + public static List unmodifiableList( List list ){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public static Map unmodifiableMap( Map list ){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public static Set unmodifiableSet( Set list ){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public static Set singleton( Object o ){ + implMissing( __FILE__, __LINE__ ); + return null; + } + public static void sort(List list){ + implMissing( __FILE__, __LINE__ ); + } + public static void sort(List list, Comparator c){ + implMissing( __FILE__, __LINE__ ); + } + + static Collection synchronizedCollection(Collection c){ + implMissing( __FILE__, __LINE__ ); + return null; + } + static List synchronizedList(List list){ + implMissing( __FILE__, __LINE__ ); + return null; + } + static Map synchronizedMap(Map m){ + implMissing( __FILE__, __LINE__ ); + return null; + } + static Set synchronizedSet(Set s){ + implMissing( __FILE__, __LINE__ ); + return null; + } +// static SortedMap synchronizedSortedMap(SortedMap m){ +// implMissing( __FILE__, __LINE__ ); +// return null; +// } +// static SortedSet synchronizedSortedSet(SortedSet s){ +// implMissing( __FILE__, __LINE__ ); +// return null; +// } + static void reverse(List list) { + implMissing( __FILE__, __LINE__ ); + } + static Enumeration enumeration(Collection c){ implMissing( __FILE__, __LINE__ ); return null; }