| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // Hash map implementation with open addressing and quadratic probing. | 5 // Hash map implementation with open addressing and quadratic probing. |
| 6 class HashMapImplementation<K extends Hashable, V> implements HashMap<K, V> { | 6 class HashMapImplementation<K extends Hashable, V> implements HashMap<K, V> { |
| 7 | 7 |
| 8 // The [_keys] list contains the keys inserted in the map. | 8 // The [_keys] list contains the keys inserted in the map. |
| 9 // The [_keys] list must be a raw list because it | 9 // The [_keys] list must be a raw list because it |
| 10 // will contain both elements of type K, and the [_DELETED_KEY] of type | 10 // will contain both elements of type K, and the [_DELETED_KEY] of type |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 } | 343 } |
| 344 | 344 |
| 345 Set map(f(E element)) { | 345 Set map(f(E element)) { |
| 346 Set result = new Set(); | 346 Set result = new Set(); |
| 347 _backingMap.forEach(void _(E key, E value) { | 347 _backingMap.forEach(void _(E key, E value) { |
| 348 result.add(f(key)); | 348 result.add(f(key)); |
| 349 }); | 349 }); |
| 350 return result; | 350 return result; |
| 351 } | 351 } |
| 352 | 352 |
| 353 Dynamic reduce(Dynamic initialValue, |
| 354 Dynamic combine(Dynamic previousValue, E element)) { |
| 355 return Collections.reduce(this, initialValue, combine); |
| 356 } |
| 357 |
| 353 Set<E> filter(bool f(E element)) { | 358 Set<E> filter(bool f(E element)) { |
| 354 Set<E> result = new Set<E>(); | 359 Set<E> result = new Set<E>(); |
| 355 _backingMap.forEach(void _(E key, E value) { | 360 _backingMap.forEach(void _(E key, E value) { |
| 356 if (f(key)) result.add(key); | 361 if (f(key)) result.add(key); |
| 357 }); | 362 }); |
| 358 return result; | 363 return result; |
| 359 } | 364 } |
| 360 | 365 |
| 361 bool every(bool f(E element)) { | 366 bool every(bool f(E element)) { |
| 362 Collection<E> keys = _backingMap.getKeys(); | 367 Collection<E> keys = _backingMap.getKeys(); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 | 445 |
| 441 /** | 446 /** |
| 442 * A singleton sentinel used to represent when a key is deleted from the map. | 447 * A singleton sentinel used to represent when a key is deleted from the map. |
| 443 * We can't use [: const Object() :] as a sentinel because it would end up | 448 * We can't use [: const Object() :] as a sentinel because it would end up |
| 444 * canonicalized and then we cannot distinguish the deleted key from the | 449 * canonicalized and then we cannot distinguish the deleted key from the |
| 445 * canonicalized [: Object() :]. | 450 * canonicalized [: Object() :]. |
| 446 */ | 451 */ |
| 447 class _DeletedKeySentinel { | 452 class _DeletedKeySentinel { |
| 448 const _DeletedKeySentinel(); | 453 const _DeletedKeySentinel(); |
| 449 } | 454 } |
| OLD | NEW |