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). |
11 */ | 11 */ |
12 class ExpensiveSet<E> extends IterableBase<E> implements Set<E> { | 12 class ExpensiveSet<E> extends IterableBase<E> implements Set<E> { |
13 | |
14 final List _sets; | 13 final List _sets; |
15 | 14 |
16 ExpensiveSet([int copies = 10]) : _sets = new List(copies) { | 15 ExpensiveSet([int copies = 10]) : _sets = new List(copies) { |
17 assert(copies > 0); | 16 assert(copies > 0); |
18 for (int i = 0; i < _sets.length; i++) { | 17 for (int i = 0; i < _sets.length; i++) { |
19 _sets[i] = new Set<E>(); | 18 _sets[i] = new Set<E>(); |
20 } | 19 } |
21 } | 20 } |
22 | 21 |
23 int get length => _sets[0].length; | 22 int get length => _sets[0].length; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 Set<E> toSet() { | 122 Set<E> toSet() { |
124 var result = new ExpensiveSet<E>(_sets.length); | 123 var result = new ExpensiveSet<E>(_sets.length); |
125 for (int i = 0; i < _sets.length; i++) { | 124 for (int i = 0; i < _sets.length; i++) { |
126 result._sets[i] = _sets[i].toSet(); | 125 result._sets[i] = _sets[i].toSet(); |
127 } | 126 } |
128 return result; | 127 return result; |
129 } | 128 } |
130 | 129 |
131 String toString() => "expensive(${_sets[0]}x${_sets.length})"; | 130 String toString() => "expensive(${_sets[0]}x${_sets.length})"; |
132 } | 131 } |
OLD | NEW |