Index: sdk/lib/core/set.dart |
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart |
index 95a633a447ca6b9c5165e0475d6cb8e9145e5948..556c1fa12539554eb10f32590043a4359293ac88 100644 |
--- a/sdk/lib/core/set.dart |
+++ b/sdk/lib/core/set.dart |
@@ -9,12 +9,12 @@ part of dart.core; |
* without duplicates. |
*/ |
abstract class Set<E> extends Collection<E> { |
- factory Set() => new _HashSetImpl<E>(); |
+ factory Set() => new HashSet<E>(); |
/** |
* Creates a [Set] that contains all elements of [other]. |
*/ |
- factory Set.from(Iterable<E> other) => new _HashSetImpl<E>.from(other); |
+ factory Set.from(Iterable<E> other) => new HashSet<E>.from(other); |
/** |
* Returns true if [value] is in the set. |
@@ -32,17 +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); |
- |
- /** |
- * Adds all the elements of the given [iterable] to the set. |
- */ |
- void addAll(Iterable<E> iterable); |
- |
- /** |
- * Removes all the elements of the given collection from the set. |
- */ |
- void removeAll(Iterable<E> iterable); |
+ bool remove(Object value); |
/** |
* Returns true if [collection] contains all the elements of this |
@@ -66,27 +56,22 @@ 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>(); |
+ |
+class HashSet<E> extends Collection<E> implements Set<E> { |
+ // The map backing this set. The associations in this map are all |
+ // of the form element -> element. If a value is not in the map, |
+ // then it is not in the set. |
+ final _HashMapImpl<E, E> _backingMap; |
+ |
+ HashSet() : _backingMap = new _HashMapImpl<E, E>(); |
/** |
* Creates a [Set] that contains all elements of [other]. |
*/ |
- factory HashSet.from(Iterable<E> other) => new _HashSetImpl<E>.from(other); |
-} |
- |
- |
-class _HashSetImpl<E> extends Iterable<E> implements HashSet<E> { |
- |
- _HashSetImpl() { |
- _backingMap = new _HashMapImpl<E, E>(); |
- } |
- |
- factory _HashSetImpl.from(Iterable<E> other) { |
- Set<E> set = new _HashSetImpl<E>(); |
+ factory HashSet.from(Iterable<E> other) { |
+ Set<E> set = new HashSet<E>(); |
for (final e in other) { |
set.add(e); |
} |
@@ -101,20 +86,14 @@ class _HashSetImpl<E> extends Iterable<E> implements HashSet<E> { |
_backingMap[value] = value; |
} |
- bool contains(E value) { |
- return _backingMap.containsKey(value); |
- } |
- |
- bool remove(E value) { |
+ bool remove(Object value) { |
if (!_backingMap.containsKey(value)) return false; |
_backingMap.remove(value); |
return true; |
} |
- void addAll(Iterable<E> iterable) { |
- for (E element in iterable) { |
- add(element); |
- } |
+ bool contains(E value) { |
+ return _backingMap.containsKey(value); |
} |
Set<E> intersection(Collection<E> collection) { |
@@ -129,12 +108,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); |
@@ -160,16 +133,11 @@ class _HashSetImpl<E> extends Iterable<E> implements HashSet<E> { |
String toString() { |
return Collections.collectionToString(this); |
} |
- |
- // The map backing this set. The associations in this map are all |
- // of the form element -> element. If a value is not in the map, |
- // then it is not in the set. |
- _HashMapImpl<E, E> _backingMap; |
} |
class _HashSetIterator<E> implements Iterator<E> { |
- _HashSetIterator(_HashSetImpl<E> set) |
+ _HashSetIterator(HashSet<E> set) |
: _keysIterator = set._backingMap._keys.iterator; |
E get current { |