Index: sdk/lib/_internal/compiler/implementation/helpers/expensive_set.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/helpers/expensive_set.dart b/sdk/lib/_internal/compiler/implementation/helpers/expensive_set.dart |
deleted file mode 100644 |
index b57db8adca4e605dda02dca00ded67dbfe494dd8..0000000000000000000000000000000000000000 |
--- a/sdk/lib/_internal/compiler/implementation/helpers/expensive_set.dart |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of dart2js.helpers; |
- |
-/** |
- * The expensive set is a data structure useful for tracking down |
- * excessive memory usage due to large sets. It acts as an ordinary |
- * hash set, but it uses 10 times more memory (by default). |
- */ |
-class ExpensiveSet<E> extends IterableBase<E> implements Set<E> { |
- |
- final List _sets; |
- |
- ExpensiveSet([int copies = 10]) : _sets = new List(copies) { |
- assert(copies > 0); |
- for (int i = 0; i < _sets.length; i++) { |
- _sets[i] = new Set<E>(); |
- } |
- } |
- |
- int get length => _sets[0].length; |
- bool get isEmpty => _sets[0].isEmpty; |
- bool get isNotEmpty => _sets[0].isNotEmpty; |
- |
- Iterator<E> get iterator => _sets[0].iterator; |
- |
- bool contains(Object object) => _sets[0].contains(object); |
- E lookup(Object object) => _sets[0].lookup(object); |
- |
- void forEach(void action(E element)) { |
- _sets[0].forEach(action); |
- } |
- |
- bool add(E element) { |
- bool result = _sets[0].add(element); |
- for (int i = 1; i < _sets.length; i++) { |
- _sets[i].add(element); |
- } |
- return result; |
- } |
- |
- void addAll(Iterable<E> objects) { |
- for (E each in objects) { |
- add(each); |
- } |
- } |
- |
- bool remove(Object object) { |
- bool result = _sets[0].remove(object); |
- for (int i = 1; i < _sets.length; i++) { |
- _sets[i].remove(object); |
- } |
- return result; |
- } |
- |
- void clear() { |
- for (int i = 0; i < _sets.length; i++) { |
- _sets[i].clear(); |
- } |
- } |
- |
- void removeAll(Iterable<Object> objectsToRemove) { |
- for (var each in objectsToRemove) { |
- remove(each); |
- } |
- } |
- |
- void removeWhere(bool test(E element)) { |
- removeAll(this.toList().where((e) => test(e))); |
- } |
- |
- void retainWhere(bool test(E element)) { |
- removeAll(toList().where((e) => !test(e))); |
- } |
- |
- bool containsAll(Iterable<Object> other) { |
- for (Object object in other) { |
- if (!this.contains(object)) return false; |
- } |
- return true; |
- } |
- |
- Set _newSet() => new ExpensiveSet(_sets.length); |
- |
- Set<E> intersection(Set<Object> other) { |
- Set<E> result = _newSet(); |
- if (other.length < this.length) { |
- for (var element in other) { |
- if (this.contains(element)) result.add(element); |
- } |
- } else { |
- for (E element in this) { |
- if (other.contains(element)) result.add(element); |
- } |
- } |
- return result; |
- } |
- |
- Set<E> union(Set<E> other) { |
- return _newSet()..addAll(this)..addAll(other); |
- } |
- |
- Set<E> difference(Set<E> other) { |
- Set<E> result = _newSet(); |
- for (E element in this) { |
- if (!other.contains(element)) result.add(element); |
- } |
- return result; |
- } |
- |
- void retainAll(Iterable objectsToRetain) { |
- Set retainSet; |
- if (objectsToRetain is Set) { |
- retainSet = objectsToRetain; |
- } else { |
- retainSet = objectsToRetain.toSet(); |
- } |
- retainWhere(retainSet.contains); |
- } |
- |
- Set<E> toSet() { |
- var result = new ExpensiveSet<E>(_sets.length); |
- for (int i = 0; i < _sets.length; i++) { |
- result._sets[i] = _sets[i].toSet(); |
- } |
- return result; |
- } |
- |
- String toString() => "expensive(${_sets[0]}x${_sets.length})"; |
-} |