comparison dwtx/dwtxhelper/Collection.d @ 127:1997315125c0

more collection impls
author Frank Benoit <benoit@tionex.de>
date Sun, 17 Aug 2008 01:30:26 +0200
parents c0304616ea23
children 8df1d4193877
comparison
equal deleted inserted replaced
126:3d684126a966 127:1997315125c0
387 return remove(stringcast(key)); 387 return remove(stringcast(key));
388 } 388 }
389 abstract int size(); 389 abstract int size();
390 } 390 }
391 391
392
393 // no nulls
394 // synchronized
392 class Hashtable : Dictionary, Map { 395 class Hashtable : Dictionary, Map {
393 396
394 public Object get(String key){ 397 public Object get(String key){
395 return super.get(key); 398 return super.get(key);
396 } 399 }
397 public Object put(String key, Object value){ 400 public Object put(String key, Object value){
398 return super.put(key, value); 401 return super.put(key, value);
399 } 402 }
405 } 408 }
406 public Object remove(String key){ 409 public Object remove(String key){
407 return super.remove(key); 410 return super.remove(key);
408 } 411 }
409 412
413 Object[Object] map;
414
410 // The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls. 415 // The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.
411 public this(){ 416 public this(){
412 implMissing( __FILE__, __LINE__ );
413 } 417 }
414 public this(int initialCapacity){ 418 public this(int initialCapacity){
415 implMissing( __FILE__, __LINE__ ); 419 implMissing( __FILE__, __LINE__ );
416 } 420 }
417 public this(int initialCapacity, float loadFactor){ 421 public this(int initialCapacity, float loadFactor){
423 427
424 Enumeration elements(){ 428 Enumeration elements(){
425 implMissing( __FILE__, __LINE__ ); 429 implMissing( __FILE__, __LINE__ );
426 return null; 430 return null;
427 } 431 }
432 class KeysEnumeration : Enumeration {
433 Object[] keys;
434 int index = 0;
435 this( Object[] keys ){
436 this.keys = keys;
437 }
438 public bool hasMoreElements(){
439 return index < keys.length;
440 }
441 public Object nextElement(){
442 Object res = keys[index];
443 index++;
444 return res;
445 }
446 }
447
428 Enumeration keys() { 448 Enumeration keys() {
429 implMissing( __FILE__, __LINE__ ); 449 return new KeysEnumeration( map.keys );
430 return null; 450 }
431 } 451 public synchronized void clear(){
432 public void clear(){ 452 map = null;
433 implMissing( __FILE__, __LINE__ ); 453 }
434 } 454 public synchronized bool containsKey(Object key){
435 public bool containsKey(Object key){ 455 if( auto v = key in map ){
436 implMissing( __FILE__, __LINE__ ); 456 return true;
437 return false; 457 }
438 } 458 return false;
439 public bool containsKey(String key){ 459 }
440 implMissing( __FILE__, __LINE__ ); 460 public synchronized bool containsKey(String key){
441 return false; 461 return containsKey(stringcast(key));
442 } 462 }
443 public bool containsValue(Object value){ 463 public synchronized bool containsValue(Object value){
444 implMissing( __FILE__, __LINE__ ); 464 foreach( k, v; map ){
465 if( v == value ){
466 return true;
467 }
468 }
445 return false; 469 return false;
446 } 470 }
447 public Set entrySet(){ 471 public Set entrySet(){
448 implMissing( __FILE__, __LINE__ ); 472 implMissing( __FILE__, __LINE__ );
449 return null; 473 return null;
450 } 474 }
451 public int opEquals(Object o){ 475 public int opEquals(Object o){
452 implMissing( __FILE__, __LINE__ ); 476 implMissing( __FILE__, __LINE__ );
453 return 0; 477 return 0;
454 } 478 }
455 public Object get(Object key){ 479 public synchronized Object get(Object key){
456 implMissing( __FILE__, __LINE__ ); 480 if( auto v = key in map ){
481 return *v;
482 }
457 return null; 483 return null;
458 } 484 }
459 public hash_t toHash(){ 485 public hash_t toHash(){
460 implMissing( __FILE__, __LINE__ ); 486 implMissing( __FILE__, __LINE__ );
461 return 0; 487 return 0;
462 } 488 }
463 public bool isEmpty(){ 489 public synchronized bool isEmpty(){
464 implMissing( __FILE__, __LINE__ ); 490 return map.length is 0;
465 return false;
466 } 491 }
467 public Set keySet(){ 492 public Set keySet(){
468 implMissing( __FILE__, __LINE__ ); 493 implMissing( __FILE__, __LINE__ );
469 return null; 494 return null;
470 } 495 }
471 public Object put(Object key, Object value){ 496 public synchronized Object put(Object key, Object value){
472 implMissing( __FILE__, __LINE__ ); 497 Object res = null;
473 return null; 498 if( auto v = key in map ){
499 res = *v;
500 }
501 map[ key ] = value;
502 return res;
474 } 503 }
475 // public Object put(String key, Object value) 504 // public Object put(String key, Object value)
476 // public Object put(Object key, String value) 505 // public Object put(Object key, String value)
477 // public Object put(String key, String value) 506 // public Object put(String key, String value)
478 public void putAll(Map t){ 507 public synchronized void putAll(Map t){
479 implMissing( __FILE__, __LINE__ ); 508 implMissing( __FILE__, __LINE__ );
480 } 509 }
481 public Object remove(Object key){ 510 public synchronized Object remove(Object key){
482 implMissing( __FILE__, __LINE__ ); 511 implMissing( __FILE__, __LINE__ );
483 return null; 512 return null;
484 } 513 }
485 // public Object remove(String key) 514 // public Object remove(String key)
486 public int size(){ 515 public synchronized int size(){
487 implMissing( __FILE__, __LINE__ ); 516 implMissing( __FILE__, __LINE__ );
488 return 0; 517 return 0;
489 } 518 }
490 public Collection values(){ 519 public Collection values(){
491 implMissing( __FILE__, __LINE__ ); 520 implMissing( __FILE__, __LINE__ );
1118 return set.opApply(&localDg); 1147 return set.opApply(&localDg);
1119 } 1148 }
1120 } 1149 }
1121 1150
1122 class Vector : AbstractList, List { 1151 class Vector : AbstractList, List {
1152 Object[] vect;
1153 int used;
1154 int capacityIncrement = 32;
1123 public this(){ 1155 public this(){
1124 implMissing( __FILE__, __LINE__ );
1125 } 1156 }
1126 public this(Collection c){ 1157 public this(Collection c){
1127 implMissing( __FILE__, __LINE__ ); 1158 implMissing( __FILE__, __LINE__ );
1128 } 1159 }
1129 public this(int initialCapacity){ 1160 public this(int initialCapacity){
1130 implMissing( __FILE__, __LINE__ ); 1161 vect.length = initialCapacity;
1131 } 1162 }
1132 public this(int initialCapacity, int capacityIncrement){ 1163 public this(int initialCapacity, int capacityIncrement){
1133 implMissing( __FILE__, __LINE__ ); 1164 implMissing( __FILE__, __LINE__ );
1134 } 1165 }
1135 public void add(int index, Object element){ 1166 public void add(int index, Object element){
1136 implMissing( __FILE__, __LINE__ ); 1167 implMissing( __FILE__, __LINE__ );
1137 } 1168 }
1138 public bool add(Object o){ 1169 public bool add(Object o){
1139 implMissing( __FILE__, __LINE__ ); 1170 if( used + 1 >= vect.length ){
1140 return false; 1171 vect.length = vect.length + capacityIncrement;
1172 }
1173 vect[used] = o;
1174 used++;
1175 return true;
1141 } 1176 }
1142 public bool add(String o){ 1177 public bool add(String o){
1143 return add(stringcast(o)); 1178 return add(stringcast(o));
1144 } 1179 }
1145 public bool addAll(Collection c){ 1180 public bool addAll(Collection c){
1149 public bool addAll(int index, Collection c){ 1184 public bool addAll(int index, Collection c){
1150 implMissing( __FILE__, __LINE__ ); 1185 implMissing( __FILE__, __LINE__ );
1151 return false; 1186 return false;
1152 } 1187 }
1153 public void addElement(Object obj){ 1188 public void addElement(Object obj){
1154 implMissing( __FILE__, __LINE__ ); 1189 add(obj);
1155 } 1190 }
1156 public int capacity(){ 1191 public int capacity(){
1157 implMissing( __FILE__, __LINE__ ); 1192 return vect.length;
1158 return 0;
1159 } 1193 }
1160 public void clear(){ 1194 public void clear(){
1161 implMissing( __FILE__, __LINE__ ); 1195 used = 0;
1162 } 1196 }
1163 public Object clone(){ 1197 public Object clone(){
1164 implMissing( __FILE__, __LINE__ ); 1198 implMissing( __FILE__, __LINE__ );
1165 return null; 1199 return null;
1166 } 1200 }
1174 } 1208 }
1175 public void copyInto(Object[] anArray){ 1209 public void copyInto(Object[] anArray){
1176 implMissing( __FILE__, __LINE__ ); 1210 implMissing( __FILE__, __LINE__ );
1177 } 1211 }
1178 public Object elementAt(int index){ 1212 public Object elementAt(int index){
1179 implMissing( __FILE__, __LINE__ ); 1213 return get(index);
1180 return null;
1181 } 1214 }
1182 public Enumeration elements(){ 1215 public Enumeration elements(){
1183 implMissing( __FILE__, __LINE__ ); 1216 implMissing( __FILE__, __LINE__ );
1184 return null; 1217 return null;
1185 } 1218 }
1193 public Object firstElement(){ 1226 public Object firstElement(){
1194 implMissing( __FILE__, __LINE__ ); 1227 implMissing( __FILE__, __LINE__ );
1195 return null; 1228 return null;
1196 } 1229 }
1197 public Object get(int index){ 1230 public Object get(int index){
1198 implMissing( __FILE__, __LINE__ ); 1231 if( index >= used || index < 0 ){
1199 return null; 1232 throw new tango.core.Exception.ArrayBoundsException( __FILE__, __LINE__ );
1233 }
1234 return vect[index];
1200 } 1235 }
1201 public hash_t toHash(){ 1236 public hash_t toHash(){
1202 implMissing( __FILE__, __LINE__ ); 1237 implMissing( __FILE__, __LINE__ );
1203 return 0; 1238 return 0;
1204 } 1239 }
1212 } 1247 }
1213 public void insertElementAt(Object obj, int index){ 1248 public void insertElementAt(Object obj, int index){
1214 implMissing( __FILE__, __LINE__ ); 1249 implMissing( __FILE__, __LINE__ );
1215 } 1250 }
1216 public bool isEmpty(){ 1251 public bool isEmpty(){
1217 implMissing( __FILE__, __LINE__ ); 1252 return used is 0;
1218 return false;
1219 } 1253 }
1220 public Iterator iterator(){ 1254 public Iterator iterator(){
1221 implMissing( __FILE__, __LINE__ ); 1255 implMissing( __FILE__, __LINE__ );
1222 return null; 1256 return null;
1223 } 1257 }
1282 } 1316 }
1283 public void setSize(int newSize){ 1317 public void setSize(int newSize){
1284 implMissing( __FILE__, __LINE__ ); 1318 implMissing( __FILE__, __LINE__ );
1285 } 1319 }
1286 public int size(){ 1320 public int size(){
1287 implMissing( __FILE__, __LINE__ ); 1321 return used;
1288 return 0;
1289 } 1322 }
1290 public List subList(int fromIndex, int toIndex){ 1323 public List subList(int fromIndex, int toIndex){
1291 implMissing( __FILE__, __LINE__ ); 1324 implMissing( __FILE__, __LINE__ );
1292 return null; 1325 return null;
1293 } 1326 }
1294 public Object[] toArray(){ 1327 public Object[] toArray(){
1295 implMissing( __FILE__, __LINE__ ); 1328 return vect[ 0 .. used ].dup;
1296 return null;
1297 } 1329 }
1298 public Object[] toArray(Object[] a){ 1330 public Object[] toArray(Object[] a){
1299 implMissing( __FILE__, __LINE__ ); 1331 implMissing( __FILE__, __LINE__ );
1300 return null; 1332 return null;
1301 } 1333 }