Mercurial > projects > dwt2
view base/src/java/util/ArrayList.d @ 120:536e43f63c81
Comprehensive update for Win32/Linux32 dmd-2.053/dmd-1.068+Tango-r5661
===D2===
* added [Try]Immutable/Const/Shared templates to work with differenses in D1/D2 instead of version statements
used these templates to work with strict type storage rules of dmd-2.053
* com.ibm.icu now also compilable with D2, but not tested yet
* small fixes
Snippet288 - shared data is in TLS
===Phobos===
* fixed critical bugs in Phobos implemention
completely incorrect segfault prone fromStringz (Linux's port ruthless killer)
terrible, incorrect StringBuffer realization (StyledText killer)
* fixed small bugs as well
Snippet72 - misprint in the snippet
* implemented missed functionality for Phobos
ByteArrayOutputStream implemented (image loading available)
formatting correctly works for all DWT's cases
As a result, folowing snippets now works with Phobos (Snippet### - what is fixed):
Snippet24, 42, 111, 115, 130, 235, 276 - bad string formatting
Snippet48, 282 - crash on image loading
Snippet163, 189, 211, 213, 217, 218, 222 - crash on copy/cut in StyledText
Snippet244 - hang-up
===Tango===
* few changes for the latest Tango trunc-r5661
* few small performance improvments
===General===
* implMissing-s for only one version changed to implMissingInTango/InPhobos
* incorrect calls to Format in toString-s fixed
* fixed loading \uXXXX characters in ResourceBundle
* added good UTF-8 support for StyledText, TextLayout (Win32) and friends
UTF functions revised and tested. It is now in java.nonstandard.*Utf modules
StyledText and TextLayout (Win32) modules revised for UTF-8 support
* removed small diferences in most identical files in *.swt.* folders
*.swt.internal.image, *.swt.events and *.swt.custom are identical in Win32/Linux32
now 179 of 576 (~31%) files in *.swt.* folders are fully identical
* Win32: snippets now have right subsystem, pretty icons and native system style controls
* small fixes in snippets
Snippet44 - it's not Snippet44
Snippet212 - functions work with different images and offsets arrays
Win32: Snippet282 - crash on close if the button has an image
Snippet293 - setGrayed is commented
and others
Win32: As a result, folowing snippets now works
Snippet68 - color doesn't change
Snippet163, 189, 211, 213, 217, 218, 222 - UTF-8 issues (see above)
Snippet193 - no tabel headers
author | Denis Shelomovskij <verylonglogin.reg@gmail.com> |
---|---|
date | Sat, 09 Jul 2011 15:50:20 +0300 |
parents | e944a4cf537b |
children |
line wrap: on
line source
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; 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; } equals_t 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 void add(String o){ implMissing( __FILE__, __LINE__ ); } 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){ int idx = -1; for( int i = 0; i < data.length; i++ ){ if( data[i] is null ? o is null : data[i] == o ){ idx = i; break; } } if( idx is -1 ){ return false; } for( int i = idx + 1; i < data.length; i++ ){ data[i-1] = data[i]; } data.length = data.length - 1; return true; } 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; } String[] toArray(String[] a){ version(Tango){ auto res = a; if( res.length < data.length ){ res.length = data.length; } int idx = 0; foreach( o; data ){ res[idx] = stringcast(o); } return res; } else { // Phobos implMissingInPhobos(); return null; } } // 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; } public String toString(){ return super.toString(); } }