OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 import 'dart:collection'; | 5 import 'dart:collection'; |
6 | 6 |
7 /** | 7 /** |
8 * The expensive set is a data structure useful for tracking down | 8 * The expensive set is a data structure useful for tracking down |
9 * excessive memory usage due to large sets. It acts as an ordinary | 9 * excessive memory usage due to large sets. It acts as an ordinary |
10 * hash set, but it uses 10 times more memory (by default). | 10 * hash set, but it uses 10 times more memory (by default). |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 if (other.contains(element)) result.add(element); | 94 if (other.contains(element)) result.add(element); |
95 } | 95 } |
96 } | 96 } |
97 return result; | 97 return result; |
98 } | 98 } |
99 | 99 |
100 Set<E> union(Set<E> other) { | 100 Set<E> union(Set<E> other) { |
101 return _newSet()..addAll(this)..addAll(other); | 101 return _newSet()..addAll(this)..addAll(other); |
102 } | 102 } |
103 | 103 |
104 Set<E> difference(Set<E> other) { | 104 Set<E> difference(Set<Object> other) { |
105 Set<E> result = _newSet(); | 105 Set<E> result = _newSet(); |
106 for (E element in this) { | 106 for (E element in this) { |
107 if (!other.contains(element)) result.add(element); | 107 if (!other.contains(element)) result.add(element); |
108 } | 108 } |
109 return result; | 109 return result; |
110 } | 110 } |
111 | 111 |
112 void retainAll(Iterable objectsToRetain) { | 112 void retainAll(Iterable objectsToRetain) { |
113 Set retainSet; | 113 Set retainSet; |
114 if (objectsToRetain is Set) { | 114 if (objectsToRetain is Set) { |
115 retainSet = objectsToRetain; | 115 retainSet = objectsToRetain; |
116 } else { | 116 } else { |
117 retainSet = objectsToRetain.toSet(); | 117 retainSet = objectsToRetain.toSet(); |
118 } | 118 } |
119 retainWhere(retainSet.contains); | 119 retainWhere(retainSet.contains); |
120 } | 120 } |
121 | 121 |
122 Set<E> toSet() { | 122 Set<E> toSet() { |
123 var result = new ExpensiveSet<E>(_sets.length); | 123 var result = new ExpensiveSet<E>(_sets.length); |
124 for (int i = 0; i < _sets.length; i++) { | 124 for (int i = 0; i < _sets.length; i++) { |
125 result._sets[i] = _sets[i].toSet(); | 125 result._sets[i] = _sets[i].toSet(); |
126 } | 126 } |
127 return result; | 127 return result; |
128 } | 128 } |
129 | 129 |
130 String toString() => "expensive(${_sets[0]}x${_sets.length})"; | 130 String toString() => "expensive(${_sets[0]}x${_sets.length})"; |
131 } | 131 } |
OLD | NEW |