Mercurial > projects > dwt-addons
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 } |