| OLD | NEW |
| (Empty) |
| 1 part of dart.collection; | |
| 2 typedef bool _Predicate<T>(T value); | |
| 3 class _SplayTreeNode<K> {final K key; | |
| 4 _SplayTreeNode<K> left; | |
| 5 _SplayTreeNode<K> right; | |
| 6 _SplayTreeNode(K this.key); | |
| 7 } | |
| 8 class _SplayTreeMapNode<K, V> extends _SplayTreeNode<K> {V value; | |
| 9 _SplayTreeMapNode(K key, V this.value) : super(key); | |
| 10 } | |
| 11 abstract class _SplayTree<K> {_SplayTreeNode<K> _root; | |
| 12 _SplayTreeNode<K> _dummy = new _SplayTreeNode<K>(null); | |
| 13 int _count = 0; | |
| 14 int _modificationCount = 0; | |
| 15 int _splayCount = 0; | |
| 16 int _compare(K key1, K key2); | |
| 17 int _splay(K key) { | |
| 18 if (_root == null) return -1; | |
| 19 _SplayTreeNode<K> left = _dummy; | |
| 20 _SplayTreeNode<K> right = _dummy; | |
| 21 _SplayTreeNode<K> current = _root; | |
| 22 int comp; | |
| 23 while (true) { | |
| 24 comp = _compare(current.key, key); | |
| 25 if (comp > 0) { | |
| 26 if (current.left == null) break; | |
| 27 comp = _compare(current.left.key, key); | |
| 28 if (comp > 0) { | |
| 29 _SplayTreeNode<K> tmp = current.left; | |
| 30 current.left = tmp.right; | |
| 31 tmp.right = current; | |
| 32 current = tmp; | |
| 33 if (current.left == null) break; | |
| 34 } | |
| 35 right.left = current; | |
| 36 right = current; | |
| 37 current = current.left; | |
| 38 } | |
| 39 else if (comp < 0) { | |
| 40 if (current.right == null) break; | |
| 41 comp = _compare(current.right.key, key); | |
| 42 if (comp < 0) { | |
| 43 _SplayTreeNode<K> tmp = current.right; | |
| 44 current.right = tmp.left; | |
| 45 tmp.left = current; | |
| 46 current = tmp; | |
| 47 if (current.right == null) break; | |
| 48 } | |
| 49 left.right = current; | |
| 50 left = current; | |
| 51 current = current.right; | |
| 52 } | |
| 53 else { | |
| 54 break; | |
| 55 } | |
| 56 } | |
| 57 left.right = current.left; | |
| 58 right.left = current.right; | |
| 59 current.left = _dummy.right; | |
| 60 current.right = _dummy.left; | |
| 61 _root = current; | |
| 62 _dummy.right = null; | |
| 63 _dummy.left = null; | |
| 64 _splayCount++; | |
| 65 return comp; | |
| 66 } | |
| 67 _SplayTreeNode<K> _splayMin(_SplayTreeNode<K> node) { | |
| 68 _SplayTreeNode current = node; | |
| 69 while (current.left != null) { | |
| 70 _SplayTreeNode left = current.left; | |
| 71 current.left = left.right; | |
| 72 left.right = current; | |
| 73 current = left; | |
| 74 } | |
| 75 return DEVC$RT.cast(current, DEVC$RT.type((_SplayTreeNode<dynamic> _) { | |
| 76 } | |
| 77 ), DEVC$RT.type((_SplayTreeNode<K> _) { | |
| 78 } | |
| 79 ), "CompositeCast", """line 151, column 12 of dart:collection/splay_tree.dart: "
"", current is _SplayTreeNode<K>, false); | |
| 80 } | |
| 81 _SplayTreeNode<K> _splayMax(_SplayTreeNode<K> node) { | |
| 82 _SplayTreeNode current = node; | |
| 83 while (current.right != null) { | |
| 84 _SplayTreeNode right = current.right; | |
| 85 current.right = right.left; | |
| 86 right.left = current; | |
| 87 current = right; | |
| 88 } | |
| 89 return DEVC$RT.cast(current, DEVC$RT.type((_SplayTreeNode<dynamic> _) { | |
| 90 } | |
| 91 ), DEVC$RT.type((_SplayTreeNode<K> _) { | |
| 92 } | |
| 93 ), "CompositeCast", """line 167, column 12 of dart:collection/splay_tree.dart: "
"", current is _SplayTreeNode<K>, false); | |
| 94 } | |
| 95 _SplayTreeNode _remove(K key) { | |
| 96 if (_root == null) return null; | |
| 97 int comp = _splay(key); | |
| 98 if (comp != 0) return null; | |
| 99 _SplayTreeNode result = _root; | |
| 100 _count--; | |
| 101 if (_root.left == null) { | |
| 102 _root = _root.right; | |
| 103 } | |
| 104 else { | |
| 105 _SplayTreeNode<K> right = _root.right; | |
| 106 _root = _splayMax(_root.left); | |
| 107 _root.right = right; | |
| 108 } | |
| 109 _modificationCount++; | |
| 110 return result; | |
| 111 } | |
| 112 void _addNewRoot(_SplayTreeNode<K> node, int comp) { | |
| 113 _count++; | |
| 114 _modificationCount++; | |
| 115 if (_root == null) { | |
| 116 _root = node; | |
| 117 return;} | |
| 118 if (comp < 0) { | |
| 119 node.left = _root; | |
| 120 node.right = _root.right; | |
| 121 _root.right = null; | |
| 122 } | |
| 123 else { | |
| 124 node.right = _root; | |
| 125 node.left = _root.left; | |
| 126 _root.left = null; | |
| 127 } | |
| 128 _root = node; | |
| 129 } | |
| 130 _SplayTreeNode get _first { | |
| 131 if (_root == null) return null; | |
| 132 _root = _splayMin(_root); | |
| 133 return _root; | |
| 134 } | |
| 135 _SplayTreeNode get _last { | |
| 136 if (_root == null) return null; | |
| 137 _root = _splayMax(_root); | |
| 138 return _root; | |
| 139 } | |
| 140 void _clear() { | |
| 141 _root = null; | |
| 142 _count = 0; | |
| 143 _modificationCount++; | |
| 144 } | |
| 145 } | |
| 146 class SplayTreeMap<K, V> extends _SplayTree<K> implements Map<K, V> {Comparator
<K> _comparator; | |
| 147 _Predicate<Object> _validKey; | |
| 148 SplayTreeMap([int compare(K key1, K key2), bool isValidKey(Object potentialKey)
]) : _comparator = ((__x12) => DEVC$RT.cast(__x12, dynamic, DEVC$RT.type((Compar
ator<K> _) { | |
| 149 } | |
| 150 ), "CompositeCast", """line 265, column 23 of dart:collection/splay_tree.dart: "
"", __x12 is Comparator<K>, false))((compare == null) ? Comparable.compare : com
pare), _validKey = (isValidKey != null) ? isValidKey : ((v) => v is K); | |
| 151 factory SplayTreeMap.from(Map other, [int compare(K key1, K key2), bool isValid
Key(Object potentialKey)]) { | |
| 152 SplayTreeMap<K, V> result = new SplayTreeMap<K, V>(); | |
| 153 other.forEach((k, v) { | |
| 154 result[DEVC$RT.cast(k, dynamic, K, "CompositeCast", """line 275, column 35 of da
rt:collection/splay_tree.dart: """, k is K, false)] = DEVC$RT.cast(v, dynamic, V
, "CompositeCast", """line 275, column 40 of dart:collection/splay_tree.dart: ""
", v is V, false); | |
| 155 } | |
| 156 ); | |
| 157 return result; | |
| 158 } | |
| 159 factory SplayTreeMap.fromIterable(Iterable iterable, { | |
| 160 K key(element), V value(element), int compare(K key1, K key2), bool isValidKey(O
bject potentialKey)} | |
| 161 ) { | |
| 162 SplayTreeMap<K, V> map = new SplayTreeMap<K, V>(compare, isValidKey); | |
| 163 Maps._fillMapWithMappedIterable(map, iterable, key, value); | |
| 164 return map; | |
| 165 } | |
| 166 factory SplayTreeMap.fromIterables(Iterable<K> keys, Iterable<V> values, [int c
ompare(K key1, K key2), bool isValidKey(Object potentialKey)]) { | |
| 167 SplayTreeMap<K, V> map = new SplayTreeMap<K, V>(compare, isValidKey); | |
| 168 Maps._fillMapWithIterables(map, keys, values); | |
| 169 return map; | |
| 170 } | |
| 171 int _compare(K key1, K key2) => _comparator(key1, key2); | |
| 172 SplayTreeMap._internal(); | |
| 173 V operator [](Object key) { | |
| 174 if (key == null) throw new ArgumentError(key); | |
| 175 if (!_validKey(key)) return null; | |
| 176 if (_root != null) { | |
| 177 int comp = _splay(DEVC$RT.cast(key, Object, K, "CompositeCast", """line 328, col
umn 25 of dart:collection/splay_tree.dart: """, key is K, false)); | |
| 178 if (comp == 0) { | |
| 179 _SplayTreeMapNode mapRoot = DEVC$RT.cast(_root, DEVC$RT.type((_SplayTreeNode<K>
_) { | |
| 180 } | |
| 181 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 182 } | |
| 183 ), "AssignmentCast", """line 330, column 37 of dart:collection/splay_tree.dart:
""", _root is _SplayTreeMapNode<dynamic, dynamic>, true); | |
| 184 return DEVC$RT.cast(mapRoot.value, dynamic, V, "CompositeCast", """line 331, co
lumn 16 of dart:collection/splay_tree.dart: """, mapRoot.value is V, false); | |
| 185 } | |
| 186 } | |
| 187 return null; | |
| 188 } | |
| 189 V remove(Object key) { | |
| 190 if (!_validKey(key)) return null; | |
| 191 _SplayTreeMapNode mapRoot = ((__x13) => DEVC$RT.cast(__x13, DEVC$RT.type((_Spla
yTreeNode<dynamic> _) { | |
| 192 } | |
| 193 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 194 } | |
| 195 ), "AssignmentCast", """line 339, column 33 of dart:collection/splay_tree.dart:
""", __x13 is _SplayTreeMapNode<dynamic, dynamic>, true))(_remove(DEVC$RT.cast(k
ey, Object, K, "CompositeCast", """line 339, column 41 of dart:collection/splay_
tree.dart: """, key is K, false))); | |
| 196 if (mapRoot != null) return DEVC$RT.cast(mapRoot.value, dynamic, V, "CompositeC
ast", """line 340, column 33 of dart:collection/splay_tree.dart: """, mapRoot.va
lue is V, false); | |
| 197 return null; | |
| 198 } | |
| 199 void operator []=(K key, V value) { | |
| 200 if (key == null) throw new ArgumentError(key); | |
| 201 int comp = _splay(key); | |
| 202 if (comp == 0) { | |
| 203 _SplayTreeMapNode mapRoot = DEVC$RT.cast(_root, DEVC$RT.type((_SplayTreeNode<K>
_) { | |
| 204 } | |
| 205 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 206 } | |
| 207 ), "AssignmentCast", """line 350, column 35 of dart:collection/splay_tree.dart:
""", _root is _SplayTreeMapNode<dynamic, dynamic>, true); | |
| 208 mapRoot.value = value; | |
| 209 return;} | |
| 210 _addNewRoot(new _SplayTreeMapNode<K, dynamic>(key, value), comp); | |
| 211 } | |
| 212 V putIfAbsent(K key, V ifAbsent()) { | |
| 213 if (key == null) throw new ArgumentError(key); | |
| 214 int comp = _splay(key); | |
| 215 if (comp == 0) { | |
| 216 _SplayTreeMapNode mapRoot = DEVC$RT.cast(_root, DEVC$RT.type((_SplayTreeNode<K>
_) { | |
| 217 } | |
| 218 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 219 } | |
| 220 ), "AssignmentCast", """line 362, column 35 of dart:collection/splay_tree.dart:
""", _root is _SplayTreeMapNode<dynamic, dynamic>, true); | |
| 221 return DEVC$RT.cast(mapRoot.value, dynamic, V, "CompositeCast", """line 363, co
lumn 14 of dart:collection/splay_tree.dart: """, mapRoot.value is V, false); | |
| 222 } | |
| 223 int modificationCount = _modificationCount; | |
| 224 int splayCount = _splayCount; | |
| 225 V value = ifAbsent(); | |
| 226 if (modificationCount != _modificationCount) { | |
| 227 throw new ConcurrentModificationError(this); | |
| 228 } | |
| 229 if (splayCount != _splayCount) { | |
| 230 comp = _splay(key); | |
| 231 assert (comp != 0);} | |
| 232 _addNewRoot(new _SplayTreeMapNode<K, dynamic>(key, value), comp); | |
| 233 return value; | |
| 234 } | |
| 235 void addAll(Map<K, V> other) { | |
| 236 other.forEach((K key, V value) { | |
| 237 this[key] = value; | |
| 238 } | |
| 239 ); | |
| 240 } | |
| 241 bool get isEmpty { | |
| 242 return (_root == null); | |
| 243 } | |
| 244 bool get isNotEmpty => !isEmpty; | |
| 245 void forEach(void f(K key, V value)) { | |
| 246 Iterator<_SplayTreeNode<K>> nodes = new _SplayTreeNodeIterator<K>(this); | |
| 247 while (nodes.moveNext()) { | |
| 248 _SplayTreeMapNode<K, V> node = DEVC$RT.cast(nodes.current, DEVC$RT.type((_SplayT
reeNode<K> _) { | |
| 249 } | |
| 250 ), DEVC$RT.type((_SplayTreeMapNode<K, V> _) { | |
| 251 } | |
| 252 ), "CompositeCast", """line 394, column 38 of dart:collection/splay_tree.dart: "
"", nodes.current is _SplayTreeMapNode<K, V>, false); | |
| 253 f(node.key, node.value); | |
| 254 } | |
| 255 } | |
| 256 int get length { | |
| 257 return _count; | |
| 258 } | |
| 259 void clear() { | |
| 260 _clear(); | |
| 261 } | |
| 262 bool containsKey(Object key) { | |
| 263 return _validKey(key) && _splay(DEVC$RT.cast(key, Object, K, "CompositeCast", ""
"line 408, column 37 of dart:collection/splay_tree.dart: """, key is K, false))
== 0; | |
| 264 } | |
| 265 bool containsValue(Object value) { | |
| 266 bool found = false; | |
| 267 int initialSplayCount = _splayCount; | |
| 268 bool visit(_SplayTreeMapNode node) { | |
| 269 while (node != null) { | |
| 270 if (node.value == value) return true; | |
| 271 if (initialSplayCount != _splayCount) { | |
| 272 throw new ConcurrentModificationError(this); | |
| 273 } | |
| 274 if (node.right != null && visit(DEVC$RT.cast(node.right, DEVC$RT.type((_SplayTr
eeNode<dynamic> _) { | |
| 275 } | |
| 276 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 277 } | |
| 278 ), "ImplicitCast", """line 420, column 41 of dart:collection/splay_tree.dart: ""
", node.right is _SplayTreeMapNode<dynamic, dynamic>, true))) return true; | |
| 279 node = DEVC$RT.cast(node.left, DEVC$RT.type((_SplayTreeNode<dynamic> _) { | |
| 280 } | |
| 281 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 282 } | |
| 283 ), "ImplicitCast", """line 421, column 16 of dart:collection/splay_tree.dart: ""
", node.left is _SplayTreeMapNode<dynamic, dynamic>, true); | |
| 284 } | |
| 285 return false; | |
| 286 } | |
| 287 return visit(DEVC$RT.cast(_root, DEVC$RT.type((_SplayTreeNode<K> _) { | |
| 288 } | |
| 289 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 290 } | |
| 291 ), "ImplicitCast", """line 425, column 18 of dart:collection/splay_tree.dart: ""
", _root is _SplayTreeMapNode<dynamic, dynamic>, true)); | |
| 292 } | |
| 293 Iterable<K> get keys => new _SplayTreeKeyIterable<K>(this); | |
| 294 Iterable<V> get values => new _SplayTreeValueIterable<K, V>(this); | |
| 295 String toString() { | |
| 296 return Maps.mapToString(this); | |
| 297 } | |
| 298 K firstKey() { | |
| 299 if (_root == null) return null; | |
| 300 return DEVC$RT.cast(_first.key, dynamic, K, "CompositeCast", """line 441, colum
n 12 of dart:collection/splay_tree.dart: """, _first.key is K, false); | |
| 301 } | |
| 302 K lastKey() { | |
| 303 if (_root == null) return null; | |
| 304 return DEVC$RT.cast(_last.key, dynamic, K, "CompositeCast", """line 449, column
12 of dart:collection/splay_tree.dart: """, _last.key is K, false); | |
| 305 } | |
| 306 K lastKeyBefore(K key) { | |
| 307 if (key == null) throw new ArgumentError(key); | |
| 308 if (_root == null) return null; | |
| 309 int comp = _splay(key); | |
| 310 if (comp < 0) return _root.key; | |
| 311 _SplayTreeNode<K> node = _root.left; | |
| 312 if (node == null) return null; | |
| 313 while (node.right != null) { | |
| 314 node = node.right; | |
| 315 } | |
| 316 return node.key; | |
| 317 } | |
| 318 K firstKeyAfter(K key) { | |
| 319 if (key == null) throw new ArgumentError(key); | |
| 320 if (_root == null) return null; | |
| 321 int comp = _splay(key); | |
| 322 if (comp > 0) return _root.key; | |
| 323 _SplayTreeNode<K> node = _root.right; | |
| 324 if (node == null) return null; | |
| 325 while (node.left != null) { | |
| 326 node = node.left; | |
| 327 } | |
| 328 return node.key; | |
| 329 } | |
| 330 } | |
| 331 abstract class _SplayTreeIterator<T> implements Iterator<T> {final _SplayTree _
tree; | |
| 332 final List<_SplayTreeNode> _workList = <_SplayTreeNode> []; | |
| 333 int _modificationCount; | |
| 334 int _splayCount; | |
| 335 _SplayTreeNode _currentNode; | |
| 336 _SplayTreeIterator(_SplayTree tree) : _tree = tree, _modificationCount = tree._
modificationCount, _splayCount = tree._splayCount { | |
| 337 _findLeftMostDescendent(tree._root); | |
| 338 } | |
| 339 _SplayTreeIterator.startAt(_SplayTree tree, var startKey) : _tree = tree, _modi
ficationCount = tree._modificationCount { | |
| 340 if (tree._root == null) return; int compare = tree._splay(startKey); | |
| 341 _splayCount = tree._splayCount; | |
| 342 if (compare < 0) { | |
| 343 _findLeftMostDescendent(tree._root.right); | |
| 344 } | |
| 345 else { | |
| 346 _workList.add(tree._root); | |
| 347 } | |
| 348 } | |
| 349 T get current { | |
| 350 if (_currentNode == null) return null; | |
| 351 return _getValue(DEVC$RT.cast(_currentNode, DEVC$RT.type((_SplayTreeNode<dynami
c> _) { | |
| 352 } | |
| 353 ), DEVC$RT.type((_SplayTreeMapNode<dynamic, dynamic> _) { | |
| 354 } | |
| 355 ), "ImplicitCast", """line 545, column 22 of dart:collection/splay_tree.dart: ""
", _currentNode is _SplayTreeMapNode<dynamic, dynamic>, true)); | |
| 356 } | |
| 357 void _findLeftMostDescendent(_SplayTreeNode node) { | |
| 358 while (node != null) { | |
| 359 _workList.add(node); | |
| 360 node = node.left; | |
| 361 } | |
| 362 } | |
| 363 void _rebuildWorkList(_SplayTreeNode currentNode) { | |
| 364 assert (!_workList.isEmpty); _workList.clear(); | |
| 365 if (currentNode == null) { | |
| 366 _findLeftMostDescendent(_tree._root); | |
| 367 } | |
| 368 else { | |
| 369 _tree._splay(currentNode.key); | |
| 370 _findLeftMostDescendent(_tree._root.right); | |
| 371 assert (!_workList.isEmpty);} | |
| 372 } | |
| 373 bool moveNext() { | |
| 374 if (_modificationCount != _tree._modificationCount) { | |
| 375 throw new ConcurrentModificationError(_tree); | |
| 376 } | |
| 377 if (_workList.isEmpty) { | |
| 378 _currentNode = null; | |
| 379 return false; | |
| 380 } | |
| 381 if (_tree._splayCount != _splayCount && _currentNode != null) { | |
| 382 _rebuildWorkList(_currentNode); | |
| 383 } | |
| 384 _currentNode = _workList.removeLast(); | |
| 385 _findLeftMostDescendent(_currentNode.right); | |
| 386 return true; | |
| 387 } | |
| 388 T _getValue(_SplayTreeMapNode node); | |
| 389 } | |
| 390 class _SplayTreeKeyIterable<K> extends IterableBase<K> implements EfficientLeng
th {_SplayTree<K> _tree; | |
| 391 _SplayTreeKeyIterable(this._tree); | |
| 392 int get length => _tree._count; | |
| 393 bool get isEmpty => _tree._count == 0; | |
| 394 Iterator<K> get iterator => new _SplayTreeKeyIterator<K>(_tree); | |
| 395 Set<K> toSet() { | |
| 396 var setOrMap = _tree; | |
| 397 SplayTreeSet<K> set = new SplayTreeSet<K>(DEVC$RT.cast(setOrMap._comparator, dy
namic, DEVC$RT.type((__CastType14<K> _) { | |
| 398 } | |
| 399 ), "CompositeCast", """line 610, column 29 of dart:collection/splay_tree.dart: "
"", setOrMap._comparator is __CastType14<K>, false), DEVC$RT.cast(setOrMap._vali
dKey, dynamic, __CastType17, "CompositeCast", """line 610, column 51 of dart:col
lection/splay_tree.dart: """, setOrMap._validKey is __CastType17, false)); | |
| 400 set._count = _tree._count; | |
| 401 set._root = set._copyNode(_tree._root); | |
| 402 return set; | |
| 403 } | |
| 404 } | |
| 405 class _SplayTreeValueIterable<K, V> extends IterableBase<V> implements Efficien
tLength {SplayTreeMap<K, V> _map; | |
| 406 _SplayTreeValueIterable(this._map); | |
| 407 int get length => _map._count; | |
| 408 bool get isEmpty => _map._count == 0; | |
| 409 Iterator<V> get iterator => new _SplayTreeValueIterator<K, V>(_map); | |
| 410 } | |
| 411 class _SplayTreeKeyIterator<K> extends _SplayTreeIterator<K> {_SplayTreeKeyIter
ator(_SplayTree<K> map) : super(map); | |
| 412 K _getValue(_SplayTreeNode node) => DEVC$RT.cast(node.key, dynamic, K, "Composi
teCast", """line 628, column 39 of dart:collection/splay_tree.dart: """, node.ke
y is K, false); | |
| 413 } | |
| 414 class _SplayTreeValueIterator<K, V> extends _SplayTreeIterator<V> {_SplayTreeVa
lueIterator(SplayTreeMap<K, V> map) : super(map); | |
| 415 V _getValue(_SplayTreeMapNode node) => DEVC$RT.cast(node.value, dynamic, V, "Co
mpositeCast", """line 633, column 42 of dart:collection/splay_tree.dart: """, no
de.value is V, false); | |
| 416 } | |
| 417 class _SplayTreeNodeIterator<K> extends _SplayTreeIterator<_SplayTreeNode<K>> {
_SplayTreeNodeIterator(_SplayTree<K> tree) : super(tree); | |
| 418 _SplayTreeNodeIterator.startAt(_SplayTree<K> tree, var startKey) : super.startA
t(tree, startKey); | |
| 419 _SplayTreeNode<K> _getValue(_SplayTreeNode node) => DEVC$RT.cast(node, DEVC$RT.
type((_SplayTreeNode<dynamic> _) { | |
| 420 } | |
| 421 ), DEVC$RT.type((_SplayTreeNode<K> _) { | |
| 422 } | |
| 423 ), "CompositeCast", """line 641, column 55 of dart:collection/splay_tree.dart: "
"", node is _SplayTreeNode<K>, false); | |
| 424 } | |
| 425 class SplayTreeSet<E> extends _SplayTree<E> with IterableMixin<E>, SetMixin<E>
{Comparator<E> _comparator; | |
| 426 _Predicate<Object> _validKey; | |
| 427 SplayTreeSet([int compare(E key1, E key2), bool isValidKey(Object potentialKey)
]) : _comparator = ((__x19) => DEVC$RT.cast(__x19, dynamic, DEVC$RT.type((Compar
ator<E> _) { | |
| 428 } | |
| 429 ), "CompositeCast", """line 691, column 23 of dart:collection/splay_tree.dart: "
"", __x19 is Comparator<E>, false))((compare == null) ? Comparable.compare : com
pare), _validKey = (isValidKey != null) ? isValidKey : ((v) => v is E); | |
| 430 factory SplayTreeSet.from(Iterable elements, [int compare(E key1, E key2), bool
isValidKey(Object potentialKey)]) { | |
| 431 SplayTreeSet<E> result = new SplayTreeSet<E>(compare, isValidKey); | |
| 432 for (final E element in DEVC$RT.cast(elements, DEVC$RT.type((Iterable<dynamic>
_) { | |
| 433 } | |
| 434 ), DEVC$RT.type((Iterable<E> _) { | |
| 435 } | |
| 436 ), "CompositeCast", """line 705, column 29 of dart:collection/splay_tree.dart: "
"", elements is Iterable<E>, false)) { | |
| 437 result.add(element); | |
| 438 } | |
| 439 return result; | |
| 440 } | |
| 441 int _compare(E e1, E e2) => _comparator(e1, e2); | |
| 442 Iterator<E> get iterator => new _SplayTreeKeyIterator<E>(this); | |
| 443 int get length => _count; | |
| 444 bool get isEmpty => _root == null; | |
| 445 bool get isNotEmpty => _root != null; | |
| 446 E get first { | |
| 447 if (_count == 0) throw IterableElementError.noElement(); | |
| 448 return DEVC$RT.cast(_first.key, dynamic, E, "CompositeCast", """line 723, colum
n 12 of dart:collection/splay_tree.dart: """, _first.key is E, false); | |
| 449 } | |
| 450 E get last { | |
| 451 if (_count == 0) throw IterableElementError.noElement(); | |
| 452 return DEVC$RT.cast(_last.key, dynamic, E, "CompositeCast", """line 728, column
12 of dart:collection/splay_tree.dart: """, _last.key is E, false); | |
| 453 } | |
| 454 E get single { | |
| 455 if (_count == 0) throw IterableElementError.noElement(); | |
| 456 if (_count > 1) throw IterableElementError.tooMany(); | |
| 457 return _root.key; | |
| 458 } | |
| 459 bool contains(Object object) { | |
| 460 return _validKey(object) && _splay(DEVC$RT.cast(object, Object, E, "CompositeCas
t", """line 739, column 40 of dart:collection/splay_tree.dart: """, object is E,
false)) == 0; | |
| 461 } | |
| 462 bool add(E element) { | |
| 463 int compare = _splay(element); | |
| 464 if (compare == 0) return false; | |
| 465 _addNewRoot(new _SplayTreeNode<E>(element), compare); | |
| 466 return true; | |
| 467 } | |
| 468 bool remove(Object object) { | |
| 469 if (!_validKey(object)) return false; | |
| 470 return _remove(DEVC$RT.cast(object, Object, E, "CompositeCast", """line 751, co
lumn 20 of dart:collection/splay_tree.dart: """, object is E, false)) != null; | |
| 471 } | |
| 472 void addAll(Iterable<E> elements) { | |
| 473 for (E element in elements) { | |
| 474 int compare = _splay(element); | |
| 475 if (compare != 0) { | |
| 476 _addNewRoot(new _SplayTreeNode<E>(element), compare); | |
| 477 } | |
| 478 } | |
| 479 } | |
| 480 void removeAll(Iterable<Object> elements) { | |
| 481 for (Object element in elements) { | |
| 482 if (_validKey(element)) _remove(DEVC$RT.cast(element, Object, E, "CompositeCast"
, """line 765, column 39 of dart:collection/splay_tree.dart: """, element is E,
false)); | |
| 483 } | |
| 484 } | |
| 485 void retainAll(Iterable<Object> elements) { | |
| 486 SplayTreeSet<E> retainSet = new SplayTreeSet<E>(_comparator, _validKey); | |
| 487 int modificationCount = _modificationCount; | |
| 488 for (Object object in elements) { | |
| 489 if (modificationCount != _modificationCount) { | |
| 490 throw new ConcurrentModificationError(this); | |
| 491 } | |
| 492 if (_validKey(object) && _splay(DEVC$RT.cast(object, Object, E, "CompositeCast"
, """line 779, column 39 of dart:collection/splay_tree.dart: """, object is E, f
alse)) == 0) retainSet.add(_root.key); | |
| 493 } | |
| 494 if (retainSet._count != _count) { | |
| 495 _root = retainSet._root; | |
| 496 _count = retainSet._count; | |
| 497 _modificationCount++; | |
| 498 } | |
| 499 } | |
| 500 E lookup(Object object) { | |
| 501 if (!_validKey(object)) return null; | |
| 502 int comp = _splay(DEVC$RT.cast(object, Object, E, "CompositeCast", """line 791,
column 23 of dart:collection/splay_tree.dart: """, object is E, false)); | |
| 503 if (comp != 0) return null; | |
| 504 return _root.key; | |
| 505 } | |
| 506 Set<E> intersection(Set<Object> other) { | |
| 507 Set<E> result = new SplayTreeSet<E>(_comparator, _validKey); | |
| 508 for (E element in this) { | |
| 509 if (other.contains(element)) result.add(element); | |
| 510 } | |
| 511 return result; | |
| 512 } | |
| 513 Set<E> difference(Set<Object> other) { | |
| 514 Set<E> result = new SplayTreeSet<E>(_comparator, _validKey); | |
| 515 for (E element in this) { | |
| 516 if (!other.contains(element)) result.add(element); | |
| 517 } | |
| 518 return result; | |
| 519 } | |
| 520 Set<E> union(Set<E> other) { | |
| 521 return _clone()..addAll(other); | |
| 522 } | |
| 523 SplayTreeSet<E> _clone() { | |
| 524 var set = new SplayTreeSet<E>(_comparator, _validKey); | |
| 525 set._count = _count; | |
| 526 set._root = _copyNode(_root); | |
| 527 return set; | |
| 528 } | |
| 529 _SplayTreeNode<E> _copyNode(_SplayTreeNode<E> node) { | |
| 530 if (node == null) return null; | |
| 531 return new _SplayTreeNode<E>(node.key)..left = _copyNode(node.left)..right = _c
opyNode(node.right); | |
| 532 } | |
| 533 void clear() { | |
| 534 _clear(); | |
| 535 } | |
| 536 Set<E> toSet() => _clone(); | |
| 537 String toString() => IterableBase.iterableToFullString(this, '{', '}'); | |
| 538 } | |
| 539 typedef int __CastType14<K>(K __u15, K __u16); | |
| 540 typedef bool __CastType17(Object __u18); | |
| OLD | NEW |