Chromium Code Reviews| Index: sdk/lib/core/set.dart |
| diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart |
| index 95a633a447ca6b9c5165e0475d6cb8e9145e5948..b4f34db50e769ef34495e9556fb08aef6dfd421a 100644 |
| --- a/sdk/lib/core/set.dart |
| +++ b/sdk/lib/core/set.dart |
| @@ -32,7 +32,7 @@ abstract class Set<E> extends Collection<E> { |
| * in the set. Returns false otherwise. The method has no effect |
| * if [value] value was not in the set. |
| */ |
| - bool remove(E value); |
| + bool remove(Object value); |
|
floitsch
2013/01/17 13:36:58
make it "var" ?
Lasse Reichstein Nielsen
2013/01/18 11:41:48
Object is correct here. We only use ==, possibly h
|
| /** |
| * Adds all the elements of the given [iterable] to the set. |
| @@ -40,11 +40,6 @@ abstract class Set<E> extends Collection<E> { |
| void addAll(Iterable<E> iterable); |
| /** |
| - * Removes all the elements of the given collection from the set. |
| - */ |
| - void removeAll(Iterable<E> iterable); |
| - |
| - /** |
| * Returns true if [collection] contains all the elements of this |
| * collection. |
| */ |
| @@ -66,9 +61,9 @@ abstract class Set<E> extends Collection<E> { |
| * Removes all elements in the set. |
| */ |
| void clear(); |
| - |
| } |
| + |
| abstract class HashSet<E> extends Set<E> { |
| factory HashSet() => new _HashSetImpl<E>(); |
| @@ -105,12 +100,42 @@ class _HashSetImpl<E> extends Iterable<E> implements HashSet<E> { |
| return _backingMap.containsKey(value); |
| } |
| - bool remove(E value) { |
| + bool remove(Object value) { |
| if (!_backingMap.containsKey(value)) return false; |
| _backingMap.remove(value); |
| return true; |
| } |
| + void removeAll(Iterable elements) { |
|
floitsch
2013/01/17 13:36:58
should not be necessary if Collection provides def
Lasse Reichstein Nielsen
2013/01/18 11:41:48
Done.
|
| + for (var element in elements) { |
| + remove(element); |
| + } |
| + } |
| + |
| + void retainAll(Iterable elements) { |
| + Set other; |
| + if (elements is Set) { |
| + other = elements |
| + } else { |
| + other = new Set.from(elements); |
| + } |
| + removeMatching((E e) => !set.contains(e)); |
| + } |
| + |
| + void removeMatching(bool test(E element)) { |
| + List<E> toRemove = <E>[]; |
| + // TODO(lrn): Consider making HashSet able to handle remove |
| + // during iteration. |
| + for (E element in this) { |
| + if (test(element)) { |
| + toRemove.add(element); |
| + } |
| + } |
| + for (E element in toRemove) { |
| + remove(element); |
| + } |
| + } |
| + |
| void addAll(Iterable<E> iterable) { |
| for (E element in iterable) { |
| add(element); |
| @@ -129,12 +154,6 @@ class _HashSetImpl<E> extends Iterable<E> implements HashSet<E> { |
| return new Set<E>.from(other).containsAll(this); |
| } |
| - void removeAll(Iterable<E> iterable) { |
| - for (E value in iterable) { |
| - remove(value); |
| - } |
| - } |
| - |
| bool containsAll(Collection<E> collection) { |
| return collection.every((E value) { |
| return contains(value); |