OLD | NEW |
| (Empty) |
1 var collection; | |
2 (function(exports) { | |
3 'use strict'; | |
4 let _source = Symbol('_source'); | |
5 let UnmodifiableListView$ = dart.generic(function(E) { | |
6 class UnmodifiableListView extends _internal.UnmodifiableListBase$(E) { | |
7 UnmodifiableListView(source) { | |
8 this[_source] = source; | |
9 super.UnmodifiableListBase(); | |
10 } | |
11 get length() { | |
12 return this[_source].length; | |
13 } | |
14 get(index) { | |
15 return this[_source].elementAt(index); | |
16 } | |
17 } | |
18 return UnmodifiableListView; | |
19 }); | |
20 dart.defineLazyClassGeneric(exports, 'UnmodifiableListView', {get: Unmodifiabl
eListView$}); | |
21 // Function _defaultEquals: (dynamic, dynamic) → bool | |
22 function _defaultEquals(a, b) { | |
23 return dart.equals(a, b); | |
24 } | |
25 // Function _defaultHashCode: (dynamic) → int | |
26 function _defaultHashCode(a) { | |
27 return dart.as(dart.dload(a, 'hashCode'), core.int); | |
28 } | |
29 let HashMap$ = dart.generic(function(K, V) { | |
30 class HashMap extends core.Object { | |
31 HashMap(opt$) { | |
32 let equals = opt$.equals === void 0 ? null : opt$.equals; | |
33 let hashCode = opt$.hashCode === void 0 ? null : opt$.hashCode; | |
34 let isValidKey = opt$.isValidKey === void 0 ? null : opt$.isValidKey; | |
35 if (isValidKey === null) { | |
36 if (hashCode === null) { | |
37 if (equals === null) { | |
38 return new _HashMap(); | |
39 } | |
40 hashCode = dart.closureWrap(_defaultHashCode, "(K) → int"); | |
41 } else { | |
42 if (dart.notNull(core.identical(core.identityHashCode, hashCode)) &&
dart.notNull(core.identical(core.identical, equals))) { | |
43 return new _IdentityHashMap(); | |
44 } | |
45 if (equals === null) { | |
46 equals = dart.closureWrap(_defaultEquals, "(K, K) → bool"); | |
47 } | |
48 } | |
49 } else { | |
50 if (hashCode === null) { | |
51 hashCode = dart.closureWrap(_defaultHashCode, "(K) → int"); | |
52 } | |
53 if (equals === null) { | |
54 equals = dart.closureWrap(_defaultEquals, "(K, K) → bool"); | |
55 } | |
56 } | |
57 return new _CustomHashMap(equals, hashCode, isValidKey); | |
58 } | |
59 HashMap$identity() { | |
60 return new _IdentityHashMap(); | |
61 } | |
62 HashMap$from(other) { | |
63 let result = new HashMap(); | |
64 other.forEach((k, v) => { | |
65 result.set(k, dart.as(v, V)); | |
66 }); | |
67 return result; | |
68 } | |
69 HashMap$fromIterable(iterable, opt$) { | |
70 let key = opt$.key === void 0 ? null : opt$.key; | |
71 let value = opt$.value === void 0 ? null : opt$.value; | |
72 let map = new HashMap(); | |
73 Maps._fillMapWithMappedIterable(map, iterable, key, value); | |
74 return map; | |
75 } | |
76 HashMap$fromIterables(keys, values) { | |
77 let map = new HashMap(); | |
78 Maps._fillMapWithIterables(map, keys, values); | |
79 return map; | |
80 } | |
81 } | |
82 dart.defineNamedConstructor(HashMap, 'identity'); | |
83 dart.defineNamedConstructor(HashMap, 'from'); | |
84 dart.defineNamedConstructor(HashMap, 'fromIterable'); | |
85 dart.defineNamedConstructor(HashMap, 'fromIterables'); | |
86 return HashMap; | |
87 }); | |
88 let HashMap = HashMap$(dart.dynamic, dart.dynamic); | |
89 let _newSet = Symbol('_newSet'); | |
90 let SetMixin$ = dart.generic(function(E) { | |
91 class SetMixin extends core.Object { | |
92 get isEmpty() { | |
93 return this.length === 0; | |
94 } | |
95 get isNotEmpty() { | |
96 return this.length !== 0; | |
97 } | |
98 clear() { | |
99 this.removeAll(this.toList()); | |
100 } | |
101 addAll(elements) { | |
102 for (let element of elements) | |
103 this.add(element); | |
104 } | |
105 removeAll(elements) { | |
106 for (let element of elements) | |
107 this.remove(element); | |
108 } | |
109 retainAll(elements) { | |
110 let toRemove = this.toSet(); | |
111 for (let o of elements) { | |
112 toRemove.remove(o); | |
113 } | |
114 this.removeAll(toRemove); | |
115 } | |
116 removeWhere(test) { | |
117 let toRemove = new List.from([]); | |
118 for (let element of this) { | |
119 if (test(element)) | |
120 toRemove.add(element); | |
121 } | |
122 this.removeAll(dart.as(toRemove, core.Iterable$(core.Object))); | |
123 } | |
124 retainWhere(test) { | |
125 let toRemove = new List.from([]); | |
126 for (let element of this) { | |
127 if (!dart.notNull(test(element))) | |
128 toRemove.add(element); | |
129 } | |
130 this.removeAll(dart.as(toRemove, core.Iterable$(core.Object))); | |
131 } | |
132 containsAll(other) { | |
133 for (let o of other) { | |
134 if (!dart.notNull(this.contains(o))) | |
135 return false; | |
136 } | |
137 return true; | |
138 } | |
139 union(other) { | |
140 return ((_) => { | |
141 _.addAll(other); | |
142 return _; | |
143 }).bind(this)(this.toSet()); | |
144 } | |
145 intersection(other) { | |
146 let result = this.toSet(); | |
147 for (let element of this) { | |
148 if (!dart.notNull(other.contains(element))) | |
149 result.remove(element); | |
150 } | |
151 return result; | |
152 } | |
153 difference(other) { | |
154 let result = this.toSet(); | |
155 for (let element of this) { | |
156 if (other.contains(element)) | |
157 result.remove(element); | |
158 } | |
159 return result; | |
160 } | |
161 toList(opt$) { | |
162 let growable = opt$.growable === void 0 ? true : opt$.growable; | |
163 let result = growable ? ((_) => { | |
164 _.length = this.length; | |
165 return _; | |
166 }).bind(this)(new core.List()) : new core.List(this.length); | |
167 let i = 0; | |
168 for (let element of this) | |
169 result.set((($tmp) => i = dart.notNull($tmp) + 1, $tmp)(i), element); | |
170 return result; | |
171 } | |
172 map(f) { | |
173 return new _internal.EfficientLengthMappedIterable(this, f); | |
174 } | |
175 get single() { | |
176 if (dart.notNull(this.length) > 1) | |
177 throw _internal.IterableElementError.tooMany(); | |
178 let it = this.iterator; | |
179 if (!dart.notNull(it.moveNext())) | |
180 throw _internal.IterableElementError.noElement(); | |
181 let result = dart.as(it.current, E); | |
182 return result; | |
183 } | |
184 toString() { | |
185 return IterableBase.iterableToFullString(this, '{', '}'); | |
186 } | |
187 where(f) { | |
188 return new _internal.WhereIterable(this, f); | |
189 } | |
190 expand(f) { | |
191 return new _internal.ExpandIterable(this, f); | |
192 } | |
193 forEach(f) { | |
194 for (let element of this) | |
195 f(element); | |
196 } | |
197 reduce(combine) { | |
198 let iterator = this.iterator; | |
199 if (!dart.notNull(iterator.moveNext())) { | |
200 throw _internal.IterableElementError.noElement(); | |
201 } | |
202 let value = iterator.current; | |
203 while (iterator.moveNext()) { | |
204 value = combine(value, iterator.current); | |
205 } | |
206 return value; | |
207 } | |
208 fold(initialValue, combine) { | |
209 let value = initialValue; | |
210 for (let element of this) | |
211 value = dart.dinvokef(combine, value, element); | |
212 return value; | |
213 } | |
214 every(f) { | |
215 for (let element of this) { | |
216 if (!dart.notNull(f(element))) | |
217 return false; | |
218 } | |
219 return true; | |
220 } | |
221 join(separator) { | |
222 if (separator === void 0) | |
223 separator = ""; | |
224 let iterator = this.iterator; | |
225 if (!dart.notNull(iterator.moveNext())) | |
226 return ""; | |
227 let buffer = new core.StringBuffer(); | |
228 if (dart.notNull(separator === null) || dart.notNull(dart.equals(separat
or, ""))) { | |
229 do { | |
230 buffer.write(`${iterator.current}`); | |
231 } while (iterator.moveNext()); | |
232 } else { | |
233 buffer.write(`${iterator.current}`); | |
234 while (iterator.moveNext()) { | |
235 buffer.write(separator); | |
236 buffer.write(`${iterator.current}`); | |
237 } | |
238 } | |
239 return buffer.toString(); | |
240 } | |
241 any(test) { | |
242 for (let element of this) { | |
243 if (test(element)) | |
244 return true; | |
245 } | |
246 return false; | |
247 } | |
248 take(n) { | |
249 return new _internal.TakeIterable(this, n); | |
250 } | |
251 takeWhile(test) { | |
252 return new _internal.TakeWhileIterable(this, test); | |
253 } | |
254 skip(n) { | |
255 return new _internal.SkipIterable(this, n); | |
256 } | |
257 skipWhile(test) { | |
258 return new _internal.SkipWhileIterable(this, test); | |
259 } | |
260 get first() { | |
261 let it = this.iterator; | |
262 if (!dart.notNull(it.moveNext())) { | |
263 throw _internal.IterableElementError.noElement(); | |
264 } | |
265 return dart.as(it.current, E); | |
266 } | |
267 get last() { | |
268 let it = this.iterator; | |
269 if (!dart.notNull(it.moveNext())) { | |
270 throw _internal.IterableElementError.noElement(); | |
271 } | |
272 let result = null; | |
273 do { | |
274 result = dart.as(it.current, E); | |
275 } while (it.moveNext()); | |
276 return result; | |
277 } | |
278 firstWhere(test, opt$) { | |
279 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
280 for (let element of this) { | |
281 if (test(element)) | |
282 return element; | |
283 } | |
284 if (orElse !== null) | |
285 return orElse(); | |
286 throw _internal.IterableElementError.noElement(); | |
287 } | |
288 lastWhere(test, opt$) { | |
289 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
290 let result = null; | |
291 let foundMatching = false; | |
292 for (let element of this) { | |
293 if (test(element)) { | |
294 result = element; | |
295 foundMatching = true; | |
296 } | |
297 } | |
298 if (foundMatching) | |
299 return result; | |
300 if (orElse !== null) | |
301 return orElse(); | |
302 throw _internal.IterableElementError.noElement(); | |
303 } | |
304 singleWhere(test) { | |
305 let result = null; | |
306 let foundMatching = false; | |
307 for (let element of this) { | |
308 if (test(element)) { | |
309 if (foundMatching) { | |
310 throw _internal.IterableElementError.tooMany(); | |
311 } | |
312 result = element; | |
313 foundMatching = true; | |
314 } | |
315 } | |
316 if (foundMatching) | |
317 return result; | |
318 throw _internal.IterableElementError.noElement(); | |
319 } | |
320 elementAt(index) { | |
321 if (!(typeof index == number)) | |
322 throw new core.ArgumentError.notNull("index"); | |
323 core.RangeError.checkNotNegative(index, "index"); | |
324 let elementIndex = 0; | |
325 for (let element of this) { | |
326 if (index === elementIndex) | |
327 return element; | |
328 elementIndex = dart.notNull(elementIndex) + 1; | |
329 } | |
330 throw new core.RangeError.index(index, this, "index", null, elementIndex
); | |
331 } | |
332 } | |
333 return SetMixin; | |
334 }); | |
335 let SetMixin = SetMixin$(dart.dynamic); | |
336 let SetBase$ = dart.generic(function(E) { | |
337 class SetBase extends SetMixin$(E) { | |
338 static setToString(set) { | |
339 return IterableBase.iterableToFullString(set, '{', '}'); | |
340 } | |
341 } | |
342 return SetBase; | |
343 }); | |
344 let SetBase = SetBase$(dart.dynamic); | |
345 let _HashSetBase$ = dart.generic(function(E) { | |
346 class _HashSetBase extends SetBase$(E) { | |
347 difference(other) { | |
348 let result = this[_newSet](); | |
349 for (let element of this) { | |
350 if (!dart.notNull(other.contains(element))) | |
351 result.add(dart.as(element, E)); | |
352 } | |
353 return result; | |
354 } | |
355 intersection(other) { | |
356 let result = this[_newSet](); | |
357 for (let element of this) { | |
358 if (other.contains(element)) | |
359 result.add(dart.as(element, E)); | |
360 } | |
361 return result; | |
362 } | |
363 toSet() { | |
364 return ((_) => { | |
365 _.addAll(this); | |
366 return _; | |
367 }).bind(this)(this[_newSet]()); | |
368 } | |
369 } | |
370 return _HashSetBase; | |
371 }); | |
372 let _HashSetBase = _HashSetBase$(dart.dynamic); | |
373 let HashSet$ = dart.generic(function(E) { | |
374 class HashSet extends core.Object { | |
375 HashSet(opt$) { | |
376 let equals = opt$.equals === void 0 ? null : opt$.equals; | |
377 let hashCode = opt$.hashCode === void 0 ? null : opt$.hashCode; | |
378 let isValidKey = opt$.isValidKey === void 0 ? null : opt$.isValidKey; | |
379 if (isValidKey === null) { | |
380 if (hashCode === null) { | |
381 if (equals === null) { | |
382 return new _HashSet(); | |
383 } | |
384 hashCode = dart.closureWrap(_defaultHashCode, "(E) → int"); | |
385 } else { | |
386 if (dart.notNull(core.identical(core.identityHashCode, hashCode)) &&
dart.notNull(core.identical(core.identical, equals))) { | |
387 return new _IdentityHashSet(); | |
388 } | |
389 if (equals === null) { | |
390 equals = dart.closureWrap(_defaultEquals, "(E, E) → bool"); | |
391 } | |
392 } | |
393 } else { | |
394 if (hashCode === null) { | |
395 hashCode = dart.closureWrap(_defaultHashCode, "(E) → int"); | |
396 } | |
397 if (equals === null) { | |
398 equals = dart.closureWrap(_defaultEquals, "(E, E) → bool"); | |
399 } | |
400 } | |
401 return new _CustomHashSet(equals, hashCode, isValidKey); | |
402 } | |
403 HashSet$identity() { | |
404 return new _IdentityHashSet(); | |
405 } | |
406 HashSet$from(elements) { | |
407 let result = new HashSet(); | |
408 for (let e of elements) | |
409 result.add(e); | |
410 return result; | |
411 } | |
412 } | |
413 dart.defineNamedConstructor(HashSet, 'identity'); | |
414 dart.defineNamedConstructor(HashSet, 'from'); | |
415 return HashSet; | |
416 }); | |
417 let HashSet = HashSet$(dart.dynamic); | |
418 let IterableMixin$ = dart.generic(function(E) { | |
419 class IterableMixin extends core.Object { | |
420 map(f) { | |
421 return new _internal.MappedIterable(this, f); | |
422 } | |
423 where(f) { | |
424 return new _internal.WhereIterable(this, f); | |
425 } | |
426 expand(f) { | |
427 return new _internal.ExpandIterable(this, f); | |
428 } | |
429 contains(element) { | |
430 for (let e of this) { | |
431 if (dart.equals(e, element)) | |
432 return true; | |
433 } | |
434 return false; | |
435 } | |
436 forEach(f) { | |
437 for (let element of this) | |
438 f(element); | |
439 } | |
440 reduce(combine) { | |
441 let iterator = this.iterator; | |
442 if (!dart.notNull(iterator.moveNext())) { | |
443 throw _internal.IterableElementError.noElement(); | |
444 } | |
445 let value = iterator.current; | |
446 while (iterator.moveNext()) { | |
447 value = combine(value, iterator.current); | |
448 } | |
449 return value; | |
450 } | |
451 fold(initialValue, combine) { | |
452 let value = initialValue; | |
453 for (let element of this) | |
454 value = dart.dinvokef(combine, value, element); | |
455 return value; | |
456 } | |
457 every(f) { | |
458 for (let element of this) { | |
459 if (!dart.notNull(f(element))) | |
460 return false; | |
461 } | |
462 return true; | |
463 } | |
464 join(separator) { | |
465 if (separator === void 0) | |
466 separator = ""; | |
467 let iterator = this.iterator; | |
468 if (!dart.notNull(iterator.moveNext())) | |
469 return ""; | |
470 let buffer = new core.StringBuffer(); | |
471 if (dart.notNull(separator === null) || dart.notNull(dart.equals(separat
or, ""))) { | |
472 do { | |
473 buffer.write(`${iterator.current}`); | |
474 } while (iterator.moveNext()); | |
475 } else { | |
476 buffer.write(`${iterator.current}`); | |
477 while (iterator.moveNext()) { | |
478 buffer.write(separator); | |
479 buffer.write(`${iterator.current}`); | |
480 } | |
481 } | |
482 return buffer.toString(); | |
483 } | |
484 any(f) { | |
485 for (let element of this) { | |
486 if (f(element)) | |
487 return true; | |
488 } | |
489 return false; | |
490 } | |
491 toList(opt$) { | |
492 let growable = opt$.growable === void 0 ? true : opt$.growable; | |
493 return new core.List.from(this, {growable: growable}); | |
494 } | |
495 toSet() { | |
496 return new core.Set.from(this); | |
497 } | |
498 get length() { | |
499 dart.assert(!dart.is(this, _internal.EfficientLength)); | |
500 let count = 0; | |
501 let it = this.iterator; | |
502 while (it.moveNext()) { | |
503 count = dart.notNull(count) + 1; | |
504 } | |
505 return count; | |
506 } | |
507 get isEmpty() { | |
508 return !dart.notNull(this.iterator.moveNext()); | |
509 } | |
510 get isNotEmpty() { | |
511 return !dart.notNull(this.isEmpty); | |
512 } | |
513 take(n) { | |
514 return new _internal.TakeIterable(this, n); | |
515 } | |
516 takeWhile(test) { | |
517 return new _internal.TakeWhileIterable(this, test); | |
518 } | |
519 skip(n) { | |
520 return new _internal.SkipIterable(this, n); | |
521 } | |
522 skipWhile(test) { | |
523 return new _internal.SkipWhileIterable(this, test); | |
524 } | |
525 get first() { | |
526 let it = this.iterator; | |
527 if (!dart.notNull(it.moveNext())) { | |
528 throw _internal.IterableElementError.noElement(); | |
529 } | |
530 return dart.as(it.current, E); | |
531 } | |
532 get last() { | |
533 let it = this.iterator; | |
534 if (!dart.notNull(it.moveNext())) { | |
535 throw _internal.IterableElementError.noElement(); | |
536 } | |
537 let result = null; | |
538 do { | |
539 result = dart.as(it.current, E); | |
540 } while (it.moveNext()); | |
541 return result; | |
542 } | |
543 get single() { | |
544 let it = this.iterator; | |
545 if (!dart.notNull(it.moveNext())) | |
546 throw _internal.IterableElementError.noElement(); | |
547 let result = dart.as(it.current, E); | |
548 if (it.moveNext()) | |
549 throw _internal.IterableElementError.tooMany(); | |
550 return result; | |
551 } | |
552 firstWhere(test, opt$) { | |
553 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
554 for (let element of this) { | |
555 if (test(element)) | |
556 return element; | |
557 } | |
558 if (orElse !== null) | |
559 return orElse(); | |
560 throw _internal.IterableElementError.noElement(); | |
561 } | |
562 lastWhere(test, opt$) { | |
563 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
564 let result = null; | |
565 let foundMatching = false; | |
566 for (let element of this) { | |
567 if (test(element)) { | |
568 result = element; | |
569 foundMatching = true; | |
570 } | |
571 } | |
572 if (foundMatching) | |
573 return result; | |
574 if (orElse !== null) | |
575 return orElse(); | |
576 throw _internal.IterableElementError.noElement(); | |
577 } | |
578 singleWhere(test) { | |
579 let result = null; | |
580 let foundMatching = false; | |
581 for (let element of this) { | |
582 if (test(element)) { | |
583 if (foundMatching) { | |
584 throw _internal.IterableElementError.tooMany(); | |
585 } | |
586 result = element; | |
587 foundMatching = true; | |
588 } | |
589 } | |
590 if (foundMatching) | |
591 return result; | |
592 throw _internal.IterableElementError.noElement(); | |
593 } | |
594 elementAt(index) { | |
595 if (!(typeof index == number)) | |
596 throw new core.ArgumentError.notNull("index"); | |
597 core.RangeError.checkNotNegative(index, "index"); | |
598 let elementIndex = 0; | |
599 for (let element of this) { | |
600 if (index === elementIndex) | |
601 return element; | |
602 elementIndex = dart.notNull(elementIndex) + 1; | |
603 } | |
604 throw new core.RangeError.index(index, this, "index", null, elementIndex
); | |
605 } | |
606 toString() { | |
607 return IterableBase.iterableToShortString(this, '(', ')'); | |
608 } | |
609 } | |
610 return IterableMixin; | |
611 }); | |
612 let IterableMixin = IterableMixin$(dart.dynamic); | |
613 let _isToStringVisiting = Symbol('_isToStringVisiting'); | |
614 let _iterablePartsToStrings = Symbol('_iterablePartsToStrings'); | |
615 let IterableBase$ = dart.generic(function(E) { | |
616 class IterableBase extends core.Object { | |
617 IterableBase() { | |
618 } | |
619 map(f) { | |
620 return new _internal.MappedIterable(this, f); | |
621 } | |
622 where(f) { | |
623 return new _internal.WhereIterable(this, f); | |
624 } | |
625 expand(f) { | |
626 return new _internal.ExpandIterable(this, f); | |
627 } | |
628 contains(element) { | |
629 for (let e of this) { | |
630 if (dart.equals(e, element)) | |
631 return true; | |
632 } | |
633 return false; | |
634 } | |
635 forEach(f) { | |
636 for (let element of this) | |
637 f(element); | |
638 } | |
639 reduce(combine) { | |
640 let iterator = this.iterator; | |
641 if (!dart.notNull(iterator.moveNext())) { | |
642 throw _internal.IterableElementError.noElement(); | |
643 } | |
644 let value = iterator.current; | |
645 while (iterator.moveNext()) { | |
646 value = combine(value, iterator.current); | |
647 } | |
648 return value; | |
649 } | |
650 fold(initialValue, combine) { | |
651 let value = initialValue; | |
652 for (let element of this) | |
653 value = dart.dinvokef(combine, value, element); | |
654 return value; | |
655 } | |
656 every(f) { | |
657 for (let element of this) { | |
658 if (!dart.notNull(f(element))) | |
659 return false; | |
660 } | |
661 return true; | |
662 } | |
663 join(separator) { | |
664 if (separator === void 0) | |
665 separator = ""; | |
666 let iterator = this.iterator; | |
667 if (!dart.notNull(iterator.moveNext())) | |
668 return ""; | |
669 let buffer = new core.StringBuffer(); | |
670 if (dart.notNull(separator === null) || dart.notNull(dart.equals(separat
or, ""))) { | |
671 do { | |
672 buffer.write(`${iterator.current}`); | |
673 } while (iterator.moveNext()); | |
674 } else { | |
675 buffer.write(`${iterator.current}`); | |
676 while (iterator.moveNext()) { | |
677 buffer.write(separator); | |
678 buffer.write(`${iterator.current}`); | |
679 } | |
680 } | |
681 return buffer.toString(); | |
682 } | |
683 any(f) { | |
684 for (let element of this) { | |
685 if (f(element)) | |
686 return true; | |
687 } | |
688 return false; | |
689 } | |
690 toList(opt$) { | |
691 let growable = opt$.growable === void 0 ? true : opt$.growable; | |
692 return new core.List.from(this, {growable: growable}); | |
693 } | |
694 toSet() { | |
695 return new core.Set.from(this); | |
696 } | |
697 get length() { | |
698 dart.assert(!dart.is(this, _internal.EfficientLength)); | |
699 let count = 0; | |
700 let it = this.iterator; | |
701 while (it.moveNext()) { | |
702 count = dart.notNull(count) + 1; | |
703 } | |
704 return count; | |
705 } | |
706 get isEmpty() { | |
707 return !dart.notNull(this.iterator.moveNext()); | |
708 } | |
709 get isNotEmpty() { | |
710 return !dart.notNull(this.isEmpty); | |
711 } | |
712 take(n) { | |
713 return new _internal.TakeIterable(this, n); | |
714 } | |
715 takeWhile(test) { | |
716 return new _internal.TakeWhileIterable(this, test); | |
717 } | |
718 skip(n) { | |
719 return new _internal.SkipIterable(this, n); | |
720 } | |
721 skipWhile(test) { | |
722 return new _internal.SkipWhileIterable(this, test); | |
723 } | |
724 get first() { | |
725 let it = this.iterator; | |
726 if (!dart.notNull(it.moveNext())) { | |
727 throw _internal.IterableElementError.noElement(); | |
728 } | |
729 return dart.as(it.current, E); | |
730 } | |
731 get last() { | |
732 let it = this.iterator; | |
733 if (!dart.notNull(it.moveNext())) { | |
734 throw _internal.IterableElementError.noElement(); | |
735 } | |
736 let result = null; | |
737 do { | |
738 result = dart.as(it.current, E); | |
739 } while (it.moveNext()); | |
740 return result; | |
741 } | |
742 get single() { | |
743 let it = this.iterator; | |
744 if (!dart.notNull(it.moveNext())) | |
745 throw _internal.IterableElementError.noElement(); | |
746 let result = dart.as(it.current, E); | |
747 if (it.moveNext()) | |
748 throw _internal.IterableElementError.tooMany(); | |
749 return result; | |
750 } | |
751 firstWhere(test, opt$) { | |
752 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
753 for (let element of this) { | |
754 if (test(element)) | |
755 return element; | |
756 } | |
757 if (orElse !== null) | |
758 return orElse(); | |
759 throw _internal.IterableElementError.noElement(); | |
760 } | |
761 lastWhere(test, opt$) { | |
762 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
763 let result = null; | |
764 let foundMatching = false; | |
765 for (let element of this) { | |
766 if (test(element)) { | |
767 result = element; | |
768 foundMatching = true; | |
769 } | |
770 } | |
771 if (foundMatching) | |
772 return result; | |
773 if (orElse !== null) | |
774 return orElse(); | |
775 throw _internal.IterableElementError.noElement(); | |
776 } | |
777 singleWhere(test) { | |
778 let result = null; | |
779 let foundMatching = false; | |
780 for (let element of this) { | |
781 if (test(element)) { | |
782 if (foundMatching) { | |
783 throw _internal.IterableElementError.tooMany(); | |
784 } | |
785 result = element; | |
786 foundMatching = true; | |
787 } | |
788 } | |
789 if (foundMatching) | |
790 return result; | |
791 throw _internal.IterableElementError.noElement(); | |
792 } | |
793 elementAt(index) { | |
794 if (!(typeof index == number)) | |
795 throw new core.ArgumentError.notNull("index"); | |
796 core.RangeError.checkNotNegative(index, "index"); | |
797 let elementIndex = 0; | |
798 for (let element of this) { | |
799 if (index === elementIndex) | |
800 return element; | |
801 elementIndex = dart.notNull(elementIndex) + 1; | |
802 } | |
803 throw new core.RangeError.index(index, this, "index", null, elementIndex
); | |
804 } | |
805 toString() { | |
806 return iterableToShortString(this, '(', ')'); | |
807 } | |
808 static iterableToShortString(iterable, leftDelimiter, rightDelimiter) { | |
809 if (leftDelimiter === void 0) | |
810 leftDelimiter = '('; | |
811 if (rightDelimiter === void 0) | |
812 rightDelimiter = ')'; | |
813 if (_isToStringVisiting(iterable)) { | |
814 if (dart.notNull(dart.equals(leftDelimiter, "(")) && dart.notNull(dart
.equals(rightDelimiter, ")"))) { | |
815 return "(...)"; | |
816 } | |
817 return `${leftDelimiter}...${rightDelimiter}`; | |
818 } | |
819 let parts = new List.from([]); | |
820 _toStringVisiting.add(iterable); | |
821 try { | |
822 _iterablePartsToStrings(iterable, parts); | |
823 } finally { | |
824 dart.assert(core.identical(_toStringVisiting.last, iterable)); | |
825 _toStringVisiting.removeLast(); | |
826 } | |
827 return ((_) => { | |
828 _.writeAll(parts, ", "); | |
829 _.write(rightDelimiter); | |
830 return _; | |
831 }).bind(this)(new core.StringBuffer(leftDelimiter)).toString(); | |
832 } | |
833 static iterableToFullString(iterable, leftDelimiter, rightDelimiter) { | |
834 if (leftDelimiter === void 0) | |
835 leftDelimiter = '('; | |
836 if (rightDelimiter === void 0) | |
837 rightDelimiter = ')'; | |
838 if (_isToStringVisiting(iterable)) { | |
839 return `${leftDelimiter}...${rightDelimiter}`; | |
840 } | |
841 let buffer = new core.StringBuffer(leftDelimiter); | |
842 _toStringVisiting.add(iterable); | |
843 try { | |
844 buffer.writeAll(iterable, ", "); | |
845 } finally { | |
846 dart.assert(core.identical(_toStringVisiting.last, iterable)); | |
847 _toStringVisiting.removeLast(); | |
848 } | |
849 buffer.write(rightDelimiter); | |
850 return buffer.toString(); | |
851 } | |
852 static [_isToStringVisiting](o) { | |
853 for (let i = 0; dart.notNull(i) < dart.notNull(_toStringVisiting.length)
; i = dart.notNull(i) + 1) { | |
854 if (core.identical(o, _toStringVisiting.get(i))) | |
855 return true; | |
856 } | |
857 return false; | |
858 } | |
859 static [_iterablePartsToStrings](iterable, parts) { | |
860 let LENGTH_LIMIT = 80; | |
861 let HEAD_COUNT = 3; | |
862 let TAIL_COUNT = 2; | |
863 let MAX_COUNT = 100; | |
864 let OVERHEAD = 2; | |
865 let ELLIPSIS_SIZE = 3; | |
866 let length = 0; | |
867 let count = 0; | |
868 let it = iterable.iterator; | |
869 while (dart.notNull(length) < dart.notNull(LENGTH_LIMIT) || dart.notNull
(count) < dart.notNull(HEAD_COUNT)) { | |
870 if (!dart.notNull(it.moveNext())) | |
871 return; | |
872 let next = `${it.current}`; | |
873 parts.add(next); | |
874 length = dart.notNull(next.length) + dart.notNull(OVERHEAD); | |
875 count = dart.notNull(count) + 1; | |
876 } | |
877 let penultimateString = null; | |
878 let ultimateString = null; | |
879 let penultimate = null; | |
880 let ultimate = null; | |
881 if (!dart.notNull(it.moveNext())) { | |
882 if (dart.notNull(count) <= dart.notNull(HEAD_COUNT) + dart.notNull(TAI
L_COUNT)) | |
883 return; | |
884 ultimateString = dart.as(parts.removeLast(), core.String); | |
885 penultimateString = dart.as(parts.removeLast(), core.String); | |
886 } else { | |
887 penultimate = it.current; | |
888 count = dart.notNull(count) + 1; | |
889 if (!dart.notNull(it.moveNext())) { | |
890 if (dart.notNull(count) <= dart.notNull(HEAD_COUNT) + 1) { | |
891 parts.add(`${penultimate}`); | |
892 return; | |
893 } | |
894 ultimateString = `${penultimate}`; | |
895 penultimateString = dart.as(parts.removeLast(), core.String); | |
896 length = dart.notNull(ultimateString.length) + dart.notNull(OVERHEAD
); | |
897 } else { | |
898 ultimate = it.current; | |
899 count = dart.notNull(count) + 1; | |
900 dart.assert(dart.notNull(count) < dart.notNull(MAX_COUNT)); | |
901 while (it.moveNext()) { | |
902 penultimate = ultimate; | |
903 ultimate = it.current; | |
904 count = dart.notNull(count) + 1; | |
905 if (dart.notNull(count) > dart.notNull(MAX_COUNT)) { | |
906 while (dart.notNull(length) > dart.notNull(LENGTH_LIMIT) - dart.
notNull(ELLIPSIS_SIZE) - dart.notNull(OVERHEAD) && dart.notNull(count) > dart.no
tNull(HEAD_COUNT)) { | |
907 length = dart.as(dart.dbinary(dart.dload(parts.removeLast(), '
length'), '+', OVERHEAD), core.int); | |
908 count = dart.notNull(count) - 1; | |
909 } | |
910 parts.add("..."); | |
911 return; | |
912 } | |
913 } | |
914 penultimateString = `${penultimate}`; | |
915 ultimateString = `${ultimate}`; | |
916 length = dart.notNull(ultimateString.length) + dart.notNull(penultim
ateString.length) + 2 * dart.notNull(OVERHEAD); | |
917 } | |
918 } | |
919 let elision = null; | |
920 if (dart.notNull(count) > dart.notNull(parts.length) + dart.notNull(TAIL
_COUNT)) { | |
921 elision = "..."; | |
922 length = dart.notNull(ELLIPSIS_SIZE) + dart.notNull(OVERHEAD); | |
923 } | |
924 while (dart.notNull(length) > dart.notNull(LENGTH_LIMIT) && dart.notNull
(parts.length) > dart.notNull(HEAD_COUNT)) { | |
925 length = dart.as(dart.dbinary(dart.dload(parts.removeLast(), 'length')
, '+', OVERHEAD), core.int); | |
926 if (elision === null) { | |
927 elision = "..."; | |
928 length = dart.notNull(ELLIPSIS_SIZE) + dart.notNull(OVERHEAD); | |
929 } | |
930 } | |
931 if (elision !== null) { | |
932 parts.add(elision); | |
933 } | |
934 parts.add(penultimateString); | |
935 parts.add(ultimateString); | |
936 } | |
937 } | |
938 dart.defineLazyProperties(IterableBase, { | |
939 get _toStringVisiting() { | |
940 return new List.from([]); | |
941 } | |
942 }); | |
943 return IterableBase; | |
944 }); | |
945 let IterableBase = IterableBase$(dart.dynamic); | |
946 let _iterator = Symbol('_iterator'); | |
947 let _state = Symbol('_state'); | |
948 let _move = Symbol('_move'); | |
949 let HasNextIterator$ = dart.generic(function(E) { | |
950 class HasNextIterator extends core.Object { | |
951 HasNextIterator($_iterator) { | |
952 this[_iterator] = $_iterator; | |
953 this[_state] = HasNextIterator._NOT_MOVED_YET; | |
954 } | |
955 get hasNext() { | |
956 if (this[_state] === HasNextIterator._NOT_MOVED_YET) | |
957 this[_move](); | |
958 return this[_state] === HasNextIterator._HAS_NEXT_AND_NEXT_IN_CURRENT; | |
959 } | |
960 next() { | |
961 if (!dart.notNull(this.hasNext)) | |
962 throw new core.StateError("No more elements"); | |
963 dart.assert(this[_state] === HasNextIterator._HAS_NEXT_AND_NEXT_IN_CURRE
NT); | |
964 let result = dart.as(this[_iterator].current, E); | |
965 this[_move](); | |
966 return result; | |
967 } | |
968 [_move]() { | |
969 if (this[_iterator].moveNext()) { | |
970 this[_state] = HasNextIterator._HAS_NEXT_AND_NEXT_IN_CURRENT; | |
971 } else { | |
972 this[_state] = HasNextIterator._NO_NEXT; | |
973 } | |
974 } | |
975 } | |
976 HasNextIterator._HAS_NEXT_AND_NEXT_IN_CURRENT = 0; | |
977 HasNextIterator._NO_NEXT = 1; | |
978 HasNextIterator._NOT_MOVED_YET = 2; | |
979 return HasNextIterator; | |
980 }); | |
981 let HasNextIterator = HasNextIterator$(dart.dynamic); | |
982 let LinkedHashMap$ = dart.generic(function(K, V) { | |
983 class LinkedHashMap extends core.Object { | |
984 LinkedHashMap(opt$) { | |
985 let equals = opt$.equals === void 0 ? null : opt$.equals; | |
986 let hashCode = opt$.hashCode === void 0 ? null : opt$.hashCode; | |
987 let isValidKey = opt$.isValidKey === void 0 ? null : opt$.isValidKey; | |
988 if (isValidKey === null) { | |
989 if (hashCode === null) { | |
990 if (equals === null) { | |
991 return new _LinkedHashMap(); | |
992 } | |
993 hashCode = dart.closureWrap(_defaultHashCode, "(K) → int"); | |
994 } else { | |
995 if (dart.notNull(core.identical(core.identityHashCode, hashCode)) &&
dart.notNull(core.identical(core.identical, equals))) { | |
996 return new _LinkedIdentityHashMap(); | |
997 } | |
998 if (equals === null) { | |
999 equals = dart.closureWrap(_defaultEquals, "(K, K) → bool"); | |
1000 } | |
1001 } | |
1002 } else { | |
1003 if (hashCode === null) { | |
1004 hashCode = dart.closureWrap(_defaultHashCode, "(K) → int"); | |
1005 } | |
1006 if (equals === null) { | |
1007 equals = dart.closureWrap(_defaultEquals, "(K, K) → bool"); | |
1008 } | |
1009 } | |
1010 return new _LinkedCustomHashMap(equals, hashCode, isValidKey); | |
1011 } | |
1012 LinkedHashMap$identity() { | |
1013 return new _LinkedIdentityHashMap(); | |
1014 } | |
1015 LinkedHashMap$from(other) { | |
1016 let result = new LinkedHashMap(); | |
1017 other.forEach((k, v) => { | |
1018 result.set(k, dart.as(v, V)); | |
1019 }); | |
1020 return result; | |
1021 } | |
1022 LinkedHashMap$fromIterable(iterable, opt$) { | |
1023 let key = opt$.key === void 0 ? null : opt$.key; | |
1024 let value = opt$.value === void 0 ? null : opt$.value; | |
1025 let map = new LinkedHashMap(); | |
1026 Maps._fillMapWithMappedIterable(map, iterable, key, value); | |
1027 return map; | |
1028 } | |
1029 LinkedHashMap$fromIterables(keys, values) { | |
1030 let map = new LinkedHashMap(); | |
1031 Maps._fillMapWithIterables(map, keys, values); | |
1032 return map; | |
1033 } | |
1034 LinkedHashMap$_literal(keyValuePairs) { | |
1035 return dart.as(_js_helper.fillLiteralMap(keyValuePairs, new _LinkedHashM
ap()), LinkedHashMap$(K, V)); | |
1036 } | |
1037 LinkedHashMap$_empty() { | |
1038 return new _LinkedHashMap(); | |
1039 } | |
1040 } | |
1041 dart.defineNamedConstructor(LinkedHashMap, 'identity'); | |
1042 dart.defineNamedConstructor(LinkedHashMap, 'from'); | |
1043 dart.defineNamedConstructor(LinkedHashMap, 'fromIterable'); | |
1044 dart.defineNamedConstructor(LinkedHashMap, 'fromIterables'); | |
1045 dart.defineNamedConstructor(LinkedHashMap, '_literal'); | |
1046 dart.defineNamedConstructor(LinkedHashMap, '_empty'); | |
1047 return LinkedHashMap; | |
1048 }); | |
1049 let LinkedHashMap = LinkedHashMap$(dart.dynamic, dart.dynamic); | |
1050 let LinkedHashSet$ = dart.generic(function(E) { | |
1051 class LinkedHashSet extends core.Object { | |
1052 LinkedHashSet(opt$) { | |
1053 let equals = opt$.equals === void 0 ? null : opt$.equals; | |
1054 let hashCode = opt$.hashCode === void 0 ? null : opt$.hashCode; | |
1055 let isValidKey = opt$.isValidKey === void 0 ? null : opt$.isValidKey; | |
1056 if (isValidKey === null) { | |
1057 if (hashCode === null) { | |
1058 if (equals === null) { | |
1059 return new _LinkedHashSet(); | |
1060 } | |
1061 hashCode = dart.closureWrap(_defaultHashCode, "(E) → int"); | |
1062 } else { | |
1063 if (dart.notNull(core.identical(core.identityHashCode, hashCode)) &&
dart.notNull(core.identical(core.identical, equals))) { | |
1064 return new _LinkedIdentityHashSet(); | |
1065 } | |
1066 if (equals === null) { | |
1067 equals = dart.closureWrap(_defaultEquals, "(E, E) → bool"); | |
1068 } | |
1069 } | |
1070 } else { | |
1071 if (hashCode === null) { | |
1072 hashCode = dart.closureWrap(_defaultHashCode, "(E) → int"); | |
1073 } | |
1074 if (equals === null) { | |
1075 equals = dart.closureWrap(_defaultEquals, "(E, E) → bool"); | |
1076 } | |
1077 } | |
1078 return new _LinkedCustomHashSet(equals, hashCode, isValidKey); | |
1079 } | |
1080 LinkedHashSet$identity() { | |
1081 return new _LinkedIdentityHashSet(); | |
1082 } | |
1083 LinkedHashSet$from(elements) { | |
1084 let result = new LinkedHashSet(); | |
1085 for (let element of elements) { | |
1086 result.add(element); | |
1087 } | |
1088 return result; | |
1089 } | |
1090 } | |
1091 dart.defineNamedConstructor(LinkedHashSet, 'identity'); | |
1092 dart.defineNamedConstructor(LinkedHashSet, 'from'); | |
1093 return LinkedHashSet; | |
1094 }); | |
1095 let LinkedHashSet = LinkedHashSet$(dart.dynamic); | |
1096 let _modificationCount = Symbol('_modificationCount'); | |
1097 let _length = Symbol('_length'); | |
1098 let _next = Symbol('_next'); | |
1099 let _previous = Symbol('_previous'); | |
1100 let _insertAfter = Symbol('_insertAfter'); | |
1101 let _list = Symbol('_list'); | |
1102 let _unlink = Symbol('_unlink'); | |
1103 let LinkedList$ = dart.generic(function(E) { | |
1104 class LinkedList extends IterableBase$(E) { | |
1105 LinkedList() { | |
1106 this[_modificationCount] = 0; | |
1107 this[_length] = 0; | |
1108 this[_next] = null; | |
1109 this[_previous] = null; | |
1110 super.IterableBase(); | |
1111 this[_next] = this[_previous] = this; | |
1112 } | |
1113 addFirst(entry) { | |
1114 this[_insertAfter](this, entry); | |
1115 } | |
1116 add(entry) { | |
1117 this[_insertAfter](this[_previous], entry); | |
1118 } | |
1119 addAll(entries) { | |
1120 entries.forEach(dart.closureWrap(((entry) => this[_insertAfter](this[_pr
evious], dart.as(entry, E))).bind(this), "(E) → void")); | |
1121 } | |
1122 remove(entry) { | |
1123 if (!dart.equals(entry[_list], this)) | |
1124 return false; | |
1125 this[_unlink](entry); | |
1126 return true; | |
1127 } | |
1128 get iterator() { | |
1129 return new _LinkedListIterator(this); | |
1130 } | |
1131 get length() { | |
1132 return this[_length]; | |
1133 } | |
1134 clear() { | |
1135 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
1136 let next = this[_next]; | |
1137 while (!dart.notNull(core.identical(next, this))) { | |
1138 let entry = dart.as(next, E); | |
1139 next = entry[_next]; | |
1140 entry[_next] = entry[_previous] = entry[_list] = null; | |
1141 } | |
1142 this[_next] = this[_previous] = this; | |
1143 this[_length] = 0; | |
1144 } | |
1145 get first() { | |
1146 if (core.identical(this[_next], this)) { | |
1147 throw new core.StateError('No such element'); | |
1148 } | |
1149 return dart.as(this[_next], E); | |
1150 } | |
1151 get last() { | |
1152 if (core.identical(this[_previous], this)) { | |
1153 throw new core.StateError('No such element'); | |
1154 } | |
1155 return dart.as(this[_previous], E); | |
1156 } | |
1157 get single() { | |
1158 if (core.identical(this[_previous], this)) { | |
1159 throw new core.StateError('No such element'); | |
1160 } | |
1161 if (!dart.notNull(core.identical(this[_previous], this[_next]))) { | |
1162 throw new core.StateError('Too many elements'); | |
1163 } | |
1164 return dart.as(this[_next], E); | |
1165 } | |
1166 forEach(action) { | |
1167 let modificationCount = this[_modificationCount]; | |
1168 let current = this[_next]; | |
1169 while (!dart.notNull(core.identical(current, this))) { | |
1170 action(dart.as(current, E)); | |
1171 if (modificationCount !== this[_modificationCount]) { | |
1172 throw new core.ConcurrentModificationError(this); | |
1173 } | |
1174 current = current[_next]; | |
1175 } | |
1176 } | |
1177 get isEmpty() { | |
1178 return this[_length] === 0; | |
1179 } | |
1180 [_insertAfter](entry, newEntry) { | |
1181 if (newEntry.list !== null) { | |
1182 throw new core.StateError('LinkedListEntry is already in a LinkedList'
); | |
1183 } | |
1184 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
1185 newEntry[_list] = this; | |
1186 let predecessor = entry; | |
1187 let successor = entry[_next]; | |
1188 successor[_previous] = newEntry; | |
1189 newEntry[_previous] = predecessor; | |
1190 newEntry[_next] = successor; | |
1191 predecessor[_next] = newEntry; | |
1192 this[_length] = dart.notNull(this[_length]) + 1; | |
1193 } | |
1194 [_unlink](entry) { | |
1195 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
1196 entry[_next][_previous] = entry[_previous]; | |
1197 entry[_previous][_next] = entry[_next]; | |
1198 this[_length] = dart.notNull(this[_length]) - 1; | |
1199 entry[_list] = entry[_next] = entry[_previous] = null; | |
1200 } | |
1201 } | |
1202 return LinkedList; | |
1203 }); | |
1204 let LinkedList = LinkedList$(dart.dynamic); | |
1205 let _current = Symbol('_current'); | |
1206 let _LinkedListIterator$ = dart.generic(function(E) { | |
1207 class _LinkedListIterator extends core.Object { | |
1208 _LinkedListIterator(list) { | |
1209 this[_list] = list; | |
1210 this[_modificationCount] = list[_modificationCount]; | |
1211 this[_next] = list[_next]; | |
1212 this[_current] = null; | |
1213 } | |
1214 get current() { | |
1215 return this[_current]; | |
1216 } | |
1217 moveNext() { | |
1218 if (core.identical(this[_next], this[_list])) { | |
1219 this[_current] = null; | |
1220 return false; | |
1221 } | |
1222 if (this[_modificationCount] !== this[_list][_modificationCount]) { | |
1223 throw new core.ConcurrentModificationError(this); | |
1224 } | |
1225 this[_current] = dart.as(this[_next], E); | |
1226 this[_next] = this[_next][_next]; | |
1227 return true; | |
1228 } | |
1229 } | |
1230 return _LinkedListIterator; | |
1231 }); | |
1232 let _LinkedListIterator = _LinkedListIterator$(dart.dynamic); | |
1233 class _LinkedListLink extends core.Object { | |
1234 _LinkedListLink() { | |
1235 this[_next] = null; | |
1236 this[_previous] = null; | |
1237 } | |
1238 } | |
1239 let LinkedListEntry$ = dart.generic(function(E) { | |
1240 class LinkedListEntry extends core.Object { | |
1241 LinkedListEntry() { | |
1242 this[_list] = null; | |
1243 this[_next] = null; | |
1244 this[_previous] = null; | |
1245 } | |
1246 get list() { | |
1247 return this[_list]; | |
1248 } | |
1249 unlink() { | |
1250 this[_list]._unlink(this); | |
1251 } | |
1252 get next() { | |
1253 if (core.identical(this[_next], this[_list])) | |
1254 return null; | |
1255 let result = dart.as(this[_next], E); | |
1256 return result; | |
1257 } | |
1258 get previous() { | |
1259 if (core.identical(this[_previous], this[_list])) | |
1260 return null; | |
1261 return dart.as(this[_previous], E); | |
1262 } | |
1263 insertAfter(entry) { | |
1264 this[_list]._insertAfter(this, entry); | |
1265 } | |
1266 insertBefore(entry) { | |
1267 this[_list]._insertAfter(this[_previous], entry); | |
1268 } | |
1269 } | |
1270 return LinkedListEntry; | |
1271 }); | |
1272 let LinkedListEntry = LinkedListEntry$(dart.dynamic); | |
1273 let _filter = Symbol('_filter'); | |
1274 let ListMixin$ = dart.generic(function(E) { | |
1275 class ListMixin extends core.Object { | |
1276 get iterator() { | |
1277 return new _internal.ListIterator(this); | |
1278 } | |
1279 elementAt(index) { | |
1280 return this.get(index); | |
1281 } | |
1282 forEach(action) { | |
1283 let length = this.length; | |
1284 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1285 action(this.get(i)); | |
1286 if (length !== this.length) { | |
1287 throw new core.ConcurrentModificationError(this); | |
1288 } | |
1289 } | |
1290 } | |
1291 get isEmpty() { | |
1292 return this.length === 0; | |
1293 } | |
1294 get isNotEmpty() { | |
1295 return !dart.notNull(this.isEmpty); | |
1296 } | |
1297 get first() { | |
1298 if (this.length === 0) | |
1299 throw _internal.IterableElementError.noElement(); | |
1300 return this.get(0); | |
1301 } | |
1302 get last() { | |
1303 if (this.length === 0) | |
1304 throw _internal.IterableElementError.noElement(); | |
1305 return this.get(dart.notNull(this.length) - 1); | |
1306 } | |
1307 get single() { | |
1308 if (this.length === 0) | |
1309 throw _internal.IterableElementError.noElement(); | |
1310 if (dart.notNull(this.length) > 1) | |
1311 throw _internal.IterableElementError.tooMany(); | |
1312 return this.get(0); | |
1313 } | |
1314 contains(element) { | |
1315 let length = this.length; | |
1316 for (let i = 0; dart.notNull(i) < dart.notNull(this.length); i = dart.no
tNull(i) + 1) { | |
1317 if (dart.equals(this.get(i), element)) | |
1318 return true; | |
1319 if (length !== this.length) { | |
1320 throw new core.ConcurrentModificationError(this); | |
1321 } | |
1322 } | |
1323 return false; | |
1324 } | |
1325 every(test) { | |
1326 let length = this.length; | |
1327 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1328 if (!dart.notNull(test(this.get(i)))) | |
1329 return false; | |
1330 if (length !== this.length) { | |
1331 throw new core.ConcurrentModificationError(this); | |
1332 } | |
1333 } | |
1334 return true; | |
1335 } | |
1336 any(test) { | |
1337 let length = this.length; | |
1338 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1339 if (test(this.get(i))) | |
1340 return true; | |
1341 if (length !== this.length) { | |
1342 throw new core.ConcurrentModificationError(this); | |
1343 } | |
1344 } | |
1345 return false; | |
1346 } | |
1347 firstWhere(test, opt$) { | |
1348 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
1349 let length = this.length; | |
1350 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1351 let element = this.get(i); | |
1352 if (test(element)) | |
1353 return element; | |
1354 if (length !== this.length) { | |
1355 throw new core.ConcurrentModificationError(this); | |
1356 } | |
1357 } | |
1358 if (orElse !== null) | |
1359 return orElse(); | |
1360 throw _internal.IterableElementError.noElement(); | |
1361 } | |
1362 lastWhere(test, opt$) { | |
1363 let orElse = opt$.orElse === void 0 ? null : opt$.orElse; | |
1364 let length = this.length; | |
1365 for (let i = dart.notNull(length) - 1; dart.notNull(i) >= 0; i = dart.no
tNull(i) - 1) { | |
1366 let element = this.get(i); | |
1367 if (test(element)) | |
1368 return element; | |
1369 if (length !== this.length) { | |
1370 throw new core.ConcurrentModificationError(this); | |
1371 } | |
1372 } | |
1373 if (orElse !== null) | |
1374 return orElse(); | |
1375 throw _internal.IterableElementError.noElement(); | |
1376 } | |
1377 singleWhere(test) { | |
1378 let length = this.length; | |
1379 let match = null; | |
1380 let matchFound = false; | |
1381 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1382 let element = this.get(i); | |
1383 if (test(element)) { | |
1384 if (matchFound) { | |
1385 throw _internal.IterableElementError.tooMany(); | |
1386 } | |
1387 matchFound = true; | |
1388 match = element; | |
1389 } | |
1390 if (length !== this.length) { | |
1391 throw new core.ConcurrentModificationError(this); | |
1392 } | |
1393 } | |
1394 if (matchFound) | |
1395 return match; | |
1396 throw _internal.IterableElementError.noElement(); | |
1397 } | |
1398 join(separator) { | |
1399 if (separator === void 0) | |
1400 separator = ""; | |
1401 if (this.length === 0) | |
1402 return ""; | |
1403 let buffer = new core.StringBuffer(); | |
1404 buffer.writeAll(this, separator); | |
1405 return buffer.toString(); | |
1406 } | |
1407 where(test) { | |
1408 return new _internal.WhereIterable(this, test); | |
1409 } | |
1410 map(f) { | |
1411 return new _internal.MappedListIterable(this, f); | |
1412 } | |
1413 expand(f) { | |
1414 return new _internal.ExpandIterable(this, f); | |
1415 } | |
1416 reduce(combine) { | |
1417 let length = this.length; | |
1418 if (length === 0) | |
1419 throw _internal.IterableElementError.noElement(); | |
1420 let value = this.get(0); | |
1421 for (let i = 1; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1422 value = combine(value, this.get(i)); | |
1423 if (length !== this.length) { | |
1424 throw new core.ConcurrentModificationError(this); | |
1425 } | |
1426 } | |
1427 return value; | |
1428 } | |
1429 fold(initialValue, combine) { | |
1430 let value = initialValue; | |
1431 let length = this.length; | |
1432 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1433 value = dart.dinvokef(combine, value, this.get(i)); | |
1434 if (length !== this.length) { | |
1435 throw new core.ConcurrentModificationError(this); | |
1436 } | |
1437 } | |
1438 return value; | |
1439 } | |
1440 skip(count) { | |
1441 return new _internal.SubListIterable(this, count, null); | |
1442 } | |
1443 skipWhile(test) { | |
1444 return new _internal.SkipWhileIterable(this, test); | |
1445 } | |
1446 take(count) { | |
1447 return new _internal.SubListIterable(this, 0, count); | |
1448 } | |
1449 takeWhile(test) { | |
1450 return new _internal.TakeWhileIterable(this, test); | |
1451 } | |
1452 toList(opt$) { | |
1453 let growable = opt$.growable === void 0 ? true : opt$.growable; | |
1454 let result = null; | |
1455 if (growable) { | |
1456 result = ((_) => { | |
1457 _.length = this.length; | |
1458 return _; | |
1459 }).bind(this)(new core.List()); | |
1460 } else { | |
1461 result = new core.List(this.length); | |
1462 } | |
1463 for (let i = 0; dart.notNull(i) < dart.notNull(this.length); i = dart.no
tNull(i) + 1) { | |
1464 result.set(i, this.get(i)); | |
1465 } | |
1466 return result; | |
1467 } | |
1468 toSet() { | |
1469 let result = new core.Set(); | |
1470 for (let i = 0; dart.notNull(i) < dart.notNull(this.length); i = dart.no
tNull(i) + 1) { | |
1471 result.add(this.get(i)); | |
1472 } | |
1473 return result; | |
1474 } | |
1475 add(element) { | |
1476 this.set((($tmp) => this.length = dart.notNull($tmp) + 1, $tmp).bind(thi
s)(this.length), element); | |
1477 } | |
1478 addAll(iterable) { | |
1479 for (let element of iterable) { | |
1480 this.set((($tmp) => this.length = dart.notNull($tmp) + 1, $tmp).bind(t
his)(this.length), element); | |
1481 } | |
1482 } | |
1483 remove(element) { | |
1484 for (let i = 0; dart.notNull(i) < dart.notNull(this.length); i = dart.no
tNull(i) + 1) { | |
1485 if (dart.equals(this.get(i), element)) { | |
1486 this.setRange(i, dart.notNull(this.length) - 1, this, dart.notNull(i
) + 1); | |
1487 this.length = 1; | |
1488 return true; | |
1489 } | |
1490 } | |
1491 return false; | |
1492 } | |
1493 removeWhere(test) { | |
1494 _filter(this, test, false); | |
1495 } | |
1496 retainWhere(test) { | |
1497 _filter(this, test, true); | |
1498 } | |
1499 static [_filter](source, test, retainMatching) { | |
1500 let retained = new List.from([]); | |
1501 let length = source.length; | |
1502 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1503 let element = source.get(i); | |
1504 if (dart.dinvokef(test, element) === retainMatching) { | |
1505 retained.add(element); | |
1506 } | |
1507 if (length !== source.length) { | |
1508 throw new core.ConcurrentModificationError(source); | |
1509 } | |
1510 } | |
1511 if (retained.length !== source.length) { | |
1512 source.setRange(0, retained.length, retained); | |
1513 source.length = retained.length; | |
1514 } | |
1515 } | |
1516 clear() { | |
1517 this.length = 0; | |
1518 } | |
1519 removeLast() { | |
1520 if (this.length === 0) { | |
1521 throw _internal.IterableElementError.noElement(); | |
1522 } | |
1523 let result = this.get(dart.notNull(this.length) - 1); | |
1524 this.length = dart.notNull(this.length) - 1; | |
1525 return result; | |
1526 } | |
1527 sort(compare) { | |
1528 if (compare === void 0) | |
1529 compare = null; | |
1530 if (compare === null) { | |
1531 let defaultCompare = core.Comparable.compare; | |
1532 compare = defaultCompare; | |
1533 } | |
1534 _internal.Sort.sort(this, compare); | |
1535 } | |
1536 shuffle(random) { | |
1537 if (random === void 0) | |
1538 random = null; | |
1539 if (random === null) | |
1540 random = new math.Random(); | |
1541 let length = this.length; | |
1542 while (dart.notNull(length) > 1) { | |
1543 let pos = random.nextInt(length); | |
1544 length = 1; | |
1545 let tmp = this.get(length); | |
1546 this.set(length, this.get(pos)); | |
1547 this.set(pos, tmp); | |
1548 } | |
1549 } | |
1550 asMap() { | |
1551 return new _internal.ListMapView(this); | |
1552 } | |
1553 sublist(start, end) { | |
1554 if (end === void 0) | |
1555 end = null; | |
1556 let listLength = this.length; | |
1557 if (end === null) | |
1558 end = listLength; | |
1559 core.RangeError.checkValidRange(start, end, listLength); | |
1560 let length = dart.notNull(end) - dart.notNull(start); | |
1561 let result = new core.List(); | |
1562 result.length = length; | |
1563 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
1564 result.set(i, this.get(dart.notNull(start) + dart.notNull(i))); | |
1565 } | |
1566 return result; | |
1567 } | |
1568 getRange(start, end) { | |
1569 core.RangeError.checkValidRange(start, end, this.length); | |
1570 return new _internal.SubListIterable(this, start, end); | |
1571 } | |
1572 removeRange(start, end) { | |
1573 core.RangeError.checkValidRange(start, end, this.length); | |
1574 let length = dart.notNull(end) - dart.notNull(start); | |
1575 this.setRange(start, dart.notNull(this.length) - dart.notNull(length), t
his, end); | |
1576 this.length = length; | |
1577 } | |
1578 fillRange(start, end, fill) { | |
1579 if (fill === void 0) | |
1580 fill = null; | |
1581 core.RangeError.checkValidRange(start, end, this.length); | |
1582 for (let i = start; dart.notNull(i) < dart.notNull(end); i = dart.notNul
l(i) + 1) { | |
1583 this.set(i, fill); | |
1584 } | |
1585 } | |
1586 setRange(start, end, iterable, skipCount) { | |
1587 if (skipCount === void 0) | |
1588 skipCount = 0; | |
1589 core.RangeError.checkValidRange(start, end, this.length); | |
1590 let length = dart.notNull(end) - dart.notNull(start); | |
1591 if (length === 0) | |
1592 return; | |
1593 core.RangeError.checkNotNegative(skipCount, "skipCount"); | |
1594 let otherList = null; | |
1595 let otherStart = null; | |
1596 if (dart.is(iterable, core.List)) { | |
1597 otherList = dart.as(iterable, core.List); | |
1598 otherStart = skipCount; | |
1599 } else { | |
1600 otherList = iterable.skip(skipCount).toList({growable: false}); | |
1601 otherStart = 0; | |
1602 } | |
1603 if (dart.notNull(otherStart) + dart.notNull(length) > dart.notNull(other
List.length)) { | |
1604 throw _internal.IterableElementError.tooFew(); | |
1605 } | |
1606 if (dart.notNull(otherStart) < dart.notNull(start)) { | |
1607 for (let i = dart.notNull(length) - 1; dart.notNull(i) >= 0; i = dart.
notNull(i) - 1) { | |
1608 this.set(dart.notNull(start) + dart.notNull(i), dart.as(otherList.ge
t(dart.notNull(otherStart) + dart.notNull(i)), E)); | |
1609 } | |
1610 } else { | |
1611 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNu
ll(i) + 1) { | |
1612 this.set(dart.notNull(start) + dart.notNull(i), dart.as(otherList.ge
t(dart.notNull(otherStart) + dart.notNull(i)), E)); | |
1613 } | |
1614 } | |
1615 } | |
1616 replaceRange(start, end, newContents) { | |
1617 core.RangeError.checkValidRange(start, end, this.length); | |
1618 if (!dart.is(newContents, _internal.EfficientLength)) { | |
1619 newContents = newContents.toList(); | |
1620 } | |
1621 let removeLength = dart.notNull(end) - dart.notNull(start); | |
1622 let insertLength = newContents.length; | |
1623 if (dart.notNull(removeLength) >= dart.notNull(insertLength)) { | |
1624 let delta = dart.notNull(removeLength) - dart.notNull(insertLength); | |
1625 let insertEnd = dart.notNull(start) + dart.notNull(insertLength); | |
1626 let newLength = dart.notNull(this.length) - dart.notNull(delta); | |
1627 this.setRange(start, insertEnd, newContents); | |
1628 if (delta !== 0) { | |
1629 this.setRange(insertEnd, newLength, this, end); | |
1630 this.length = newLength; | |
1631 } | |
1632 } else { | |
1633 let delta = dart.notNull(insertLength) - dart.notNull(removeLength); | |
1634 let newLength = dart.notNull(this.length) + dart.notNull(delta); | |
1635 let insertEnd = dart.notNull(start) + dart.notNull(insertLength); | |
1636 this.length = newLength; | |
1637 this.setRange(insertEnd, newLength, this, end); | |
1638 this.setRange(start, insertEnd, newContents); | |
1639 } | |
1640 } | |
1641 indexOf(element, startIndex) { | |
1642 if (startIndex === void 0) | |
1643 startIndex = 0; | |
1644 if (dart.notNull(startIndex) >= dart.notNull(this.length)) { | |
1645 return -1; | |
1646 } | |
1647 if (dart.notNull(startIndex) < 0) { | |
1648 startIndex = 0; | |
1649 } | |
1650 for (let i = startIndex; dart.notNull(i) < dart.notNull(this.length); i
= dart.notNull(i) + 1) { | |
1651 if (dart.equals(this.get(i), element)) { | |
1652 return i; | |
1653 } | |
1654 } | |
1655 return -1; | |
1656 } | |
1657 lastIndexOf(element, startIndex) { | |
1658 if (startIndex === void 0) | |
1659 startIndex = null; | |
1660 if (startIndex === null) { | |
1661 startIndex = dart.notNull(this.length) - 1; | |
1662 } else { | |
1663 if (dart.notNull(startIndex) < 0) { | |
1664 return -1; | |
1665 } | |
1666 if (dart.notNull(startIndex) >= dart.notNull(this.length)) { | |
1667 startIndex = dart.notNull(this.length) - 1; | |
1668 } | |
1669 } | |
1670 for (let i = startIndex; dart.notNull(i) >= 0; i = dart.notNull(i) - 1)
{ | |
1671 if (dart.equals(this.get(i), element)) { | |
1672 return i; | |
1673 } | |
1674 } | |
1675 return -1; | |
1676 } | |
1677 insert(index, element) { | |
1678 core.RangeError.checkValueInInterval(index, 0, this.length, "index"); | |
1679 if (index === this.length) { | |
1680 this.add(element); | |
1681 return; | |
1682 } | |
1683 if (!(typeof index == number)) | |
1684 throw new core.ArgumentError(index); | |
1685 this.length = dart.notNull(this.length) + 1; | |
1686 this.setRange(dart.notNull(index) + 1, this.length, this, index); | |
1687 this.set(index, element); | |
1688 } | |
1689 removeAt(index) { | |
1690 let result = this.get(index); | |
1691 this.setRange(index, dart.notNull(this.length) - 1, this, dart.notNull(i
ndex) + 1); | |
1692 this.length = dart.notNull(this.length) - 1; | |
1693 return result; | |
1694 } | |
1695 insertAll(index, iterable) { | |
1696 core.RangeError.checkValueInInterval(index, 0, this.length, "index"); | |
1697 if (dart.is(iterable, _internal.EfficientLength)) { | |
1698 iterable = iterable.toList(); | |
1699 } | |
1700 let insertionLength = iterable.length; | |
1701 this.length = insertionLength; | |
1702 this.setRange(dart.notNull(index) + dart.notNull(insertionLength), this.
length, this, index); | |
1703 this.setAll(index, iterable); | |
1704 } | |
1705 setAll(index, iterable) { | |
1706 if (dart.is(iterable, core.List)) { | |
1707 this.setRange(index, dart.notNull(index) + dart.notNull(iterable.lengt
h), iterable); | |
1708 } else { | |
1709 for (let element of iterable) { | |
1710 this.set((($tmp) => index = dart.notNull($tmp) + 1, $tmp)(index), el
ement); | |
1711 } | |
1712 } | |
1713 } | |
1714 get reversed() { | |
1715 return new _internal.ReversedListIterable(this); | |
1716 } | |
1717 toString() { | |
1718 return IterableBase.iterableToFullString(this, '[', ']'); | |
1719 } | |
1720 } | |
1721 return ListMixin; | |
1722 }); | |
1723 let ListMixin = ListMixin$(dart.dynamic); | |
1724 let ListBase$ = dart.generic(function(E) { | |
1725 class ListBase extends dart.mixin(core.Object, ListMixin$(E)) { | |
1726 static listToString(list) { | |
1727 return IterableBase.iterableToFullString(list, '[', ']'); | |
1728 } | |
1729 } | |
1730 return ListBase; | |
1731 }); | |
1732 let ListBase = ListBase$(dart.dynamic); | |
1733 let MapMixin$ = dart.generic(function(K, V) { | |
1734 class MapMixin extends core.Object { | |
1735 forEach(action) { | |
1736 for (let key of this.keys) { | |
1737 action(key, this.get(key)); | |
1738 } | |
1739 } | |
1740 addAll(other) { | |
1741 for (let key of other.keys) { | |
1742 this.set(key, other.get(key)); | |
1743 } | |
1744 } | |
1745 containsValue(value) { | |
1746 for (let key of this.keys) { | |
1747 if (dart.equals(this.get(key), value)) | |
1748 return true; | |
1749 } | |
1750 return false; | |
1751 } | |
1752 putIfAbsent(key, ifAbsent) { | |
1753 if (this.keys.contains(key)) { | |
1754 return this.get(key); | |
1755 } | |
1756 return this.set(key, ifAbsent()); | |
1757 } | |
1758 containsKey(key) { | |
1759 return this.keys.contains(key); | |
1760 } | |
1761 get length() { | |
1762 return this.keys.length; | |
1763 } | |
1764 get isEmpty() { | |
1765 return this.keys.isEmpty; | |
1766 } | |
1767 get isNotEmpty() { | |
1768 return this.keys.isNotEmpty; | |
1769 } | |
1770 get values() { | |
1771 return new _MapBaseValueIterable(this); | |
1772 } | |
1773 toString() { | |
1774 return Maps.mapToString(this); | |
1775 } | |
1776 } | |
1777 return MapMixin; | |
1778 }); | |
1779 let MapMixin = MapMixin$(dart.dynamic, dart.dynamic); | |
1780 let MapBase$ = dart.generic(function(K, V) { | |
1781 class MapBase extends dart.mixin(MapMixin$(K, V)) { | |
1782 } | |
1783 return MapBase; | |
1784 }); | |
1785 let MapBase = MapBase$(dart.dynamic, dart.dynamic); | |
1786 let _UnmodifiableMapMixin$ = dart.generic(function(K, V) { | |
1787 class _UnmodifiableMapMixin extends core.Object { | |
1788 set(key, value) { | |
1789 throw new core.UnsupportedError("Cannot modify unmodifiable map"); | |
1790 } | |
1791 addAll(other) { | |
1792 throw new core.UnsupportedError("Cannot modify unmodifiable map"); | |
1793 } | |
1794 clear() { | |
1795 throw new core.UnsupportedError("Cannot modify unmodifiable map"); | |
1796 } | |
1797 remove(key) { | |
1798 throw new core.UnsupportedError("Cannot modify unmodifiable map"); | |
1799 } | |
1800 putIfAbsent(key, ifAbsent) { | |
1801 throw new core.UnsupportedError("Cannot modify unmodifiable map"); | |
1802 } | |
1803 } | |
1804 return _UnmodifiableMapMixin; | |
1805 }); | |
1806 let _UnmodifiableMapMixin = _UnmodifiableMapMixin$(dart.dynamic, dart.dynamic)
; | |
1807 let UnmodifiableMapBase$ = dart.generic(function(K, V) { | |
1808 class UnmodifiableMapBase extends dart.mixin(_UnmodifiableMapMixin$(K, V)) { | |
1809 } | |
1810 return UnmodifiableMapBase; | |
1811 }); | |
1812 let UnmodifiableMapBase = UnmodifiableMapBase$(dart.dynamic, dart.dynamic); | |
1813 let _map = Symbol('_map'); | |
1814 let _MapBaseValueIterable$ = dart.generic(function(V) { | |
1815 class _MapBaseValueIterable extends IterableBase$(V) { | |
1816 _MapBaseValueIterable($_map) { | |
1817 this[_map] = $_map; | |
1818 super.IterableBase(); | |
1819 } | |
1820 get length() { | |
1821 return this[_map].length; | |
1822 } | |
1823 get isEmpty() { | |
1824 return this[_map].isEmpty; | |
1825 } | |
1826 get isNotEmpty() { | |
1827 return this[_map].isNotEmpty; | |
1828 } | |
1829 get first() { | |
1830 return dart.as(this[_map].get(this[_map].keys.first), V); | |
1831 } | |
1832 get single() { | |
1833 return dart.as(this[_map].get(this[_map].keys.single), V); | |
1834 } | |
1835 get last() { | |
1836 return dart.as(this[_map].get(this[_map].keys.last), V); | |
1837 } | |
1838 get iterator() { | |
1839 return new _MapBaseValueIterator(this[_map]); | |
1840 } | |
1841 } | |
1842 return _MapBaseValueIterable; | |
1843 }); | |
1844 let _MapBaseValueIterable = _MapBaseValueIterable$(dart.dynamic); | |
1845 let _keys = Symbol('_keys'); | |
1846 let _MapBaseValueIterator$ = dart.generic(function(V) { | |
1847 class _MapBaseValueIterator extends core.Object { | |
1848 _MapBaseValueIterator(map) { | |
1849 this[_map] = map; | |
1850 this[_keys] = map.keys.iterator; | |
1851 this[_current] = null; | |
1852 } | |
1853 moveNext() { | |
1854 if (this[_keys].moveNext()) { | |
1855 this[_current] = dart.as(this[_map].get(this[_keys].current), V); | |
1856 return true; | |
1857 } | |
1858 this[_current] = null; | |
1859 return false; | |
1860 } | |
1861 get current() { | |
1862 return this[_current]; | |
1863 } | |
1864 } | |
1865 return _MapBaseValueIterator; | |
1866 }); | |
1867 let _MapBaseValueIterator = _MapBaseValueIterator$(dart.dynamic); | |
1868 let MapView$ = dart.generic(function(K, V) { | |
1869 class MapView extends core.Object { | |
1870 MapView(map) { | |
1871 this[_map] = map; | |
1872 } | |
1873 get(key) { | |
1874 return this[_map].get(key); | |
1875 } | |
1876 set(key, value) { | |
1877 this[_map].set(key, value); | |
1878 } | |
1879 addAll(other) { | |
1880 this[_map].addAll(other); | |
1881 } | |
1882 clear() { | |
1883 this[_map].clear(); | |
1884 } | |
1885 putIfAbsent(key, ifAbsent) { | |
1886 return this[_map].putIfAbsent(key, ifAbsent); | |
1887 } | |
1888 containsKey(key) { | |
1889 return this[_map].containsKey(key); | |
1890 } | |
1891 containsValue(value) { | |
1892 return this[_map].containsValue(value); | |
1893 } | |
1894 forEach(action) { | |
1895 this[_map].forEach(action); | |
1896 } | |
1897 get isEmpty() { | |
1898 return this[_map].isEmpty; | |
1899 } | |
1900 get isNotEmpty() { | |
1901 return this[_map].isNotEmpty; | |
1902 } | |
1903 get length() { | |
1904 return this[_map].length; | |
1905 } | |
1906 get keys() { | |
1907 return this[_map].keys; | |
1908 } | |
1909 remove(key) { | |
1910 return this[_map].remove(key); | |
1911 } | |
1912 toString() { | |
1913 return this[_map].toString(); | |
1914 } | |
1915 get values() { | |
1916 return this[_map].values; | |
1917 } | |
1918 } | |
1919 return MapView; | |
1920 }); | |
1921 let MapView = MapView$(dart.dynamic, dart.dynamic); | |
1922 let UnmodifiableMapView$ = dart.generic(function(K, V) { | |
1923 class UnmodifiableMapView extends dart.mixin(_UnmodifiableMapMixin$(K, V)) { | |
1924 } | |
1925 return UnmodifiableMapView; | |
1926 }); | |
1927 let UnmodifiableMapView = UnmodifiableMapView$(dart.dynamic, dart.dynamic); | |
1928 let _toStringVisiting = Symbol('_toStringVisiting'); | |
1929 let _id = Symbol('_id'); | |
1930 let _fillMapWithMappedIterable = Symbol('_fillMapWithMappedIterable'); | |
1931 let _fillMapWithIterables = Symbol('_fillMapWithIterables'); | |
1932 class Maps extends core.Object { | |
1933 static containsValue(map, value) { | |
1934 for (let v of map.values) { | |
1935 if (dart.equals(value, v)) { | |
1936 return true; | |
1937 } | |
1938 } | |
1939 return false; | |
1940 } | |
1941 static containsKey(map, key) { | |
1942 for (let k of map.keys) { | |
1943 if (dart.equals(key, k)) { | |
1944 return true; | |
1945 } | |
1946 } | |
1947 return false; | |
1948 } | |
1949 static putIfAbsent(map, key, ifAbsent) { | |
1950 if (map.containsKey(key)) { | |
1951 return map.get(key); | |
1952 } | |
1953 let v = ifAbsent(); | |
1954 map.set(key, v); | |
1955 return v; | |
1956 } | |
1957 static clear(map) { | |
1958 for (let k of map.keys.toList()) { | |
1959 map.remove(k); | |
1960 } | |
1961 } | |
1962 static forEach(map, f) { | |
1963 for (let k of map.keys) { | |
1964 dart.dinvokef(f, k, map.get(k)); | |
1965 } | |
1966 } | |
1967 static getValues(map) { | |
1968 return map.keys.map((key) => map.get(key)); | |
1969 } | |
1970 static length(map) { | |
1971 return map.keys.length; | |
1972 } | |
1973 static isEmpty(map) { | |
1974 return map.keys.isEmpty; | |
1975 } | |
1976 static isNotEmpty(map) { | |
1977 return map.keys.isNotEmpty; | |
1978 } | |
1979 static mapToString(m) { | |
1980 if (IterableBase._isToStringVisiting(m)) { | |
1981 return '{...}'; | |
1982 } | |
1983 let result = new core.StringBuffer(); | |
1984 try { | |
1985 IterableBase[_toStringVisiting].add(m); | |
1986 result.write('{'); | |
1987 let first = true; | |
1988 m.forEach(((k, v) => { | |
1989 if (!dart.notNull(first)) { | |
1990 result.write(', '); | |
1991 } | |
1992 first = false; | |
1993 result.write(k); | |
1994 result.write(': '); | |
1995 result.write(v); | |
1996 }).bind(this)); | |
1997 result.write('}'); | |
1998 } finally { | |
1999 dart.assert(core.identical(IterableBase[_toStringVisiting].last, m)); | |
2000 IterableBase[_toStringVisiting].removeLast(); | |
2001 } | |
2002 return result.toString(); | |
2003 } | |
2004 static [_id](x) { | |
2005 return x; | |
2006 } | |
2007 static [_fillMapWithMappedIterable](map, iterable, key, value) { | |
2008 if (key === null) | |
2009 key = _id; | |
2010 if (value === null) | |
2011 value = _id; | |
2012 for (let element of iterable) { | |
2013 map.set(dart.dinvokef(key, element), dart.dinvokef(value, element)); | |
2014 } | |
2015 } | |
2016 static [_fillMapWithIterables](map, keys, values) { | |
2017 let keyIterator = keys.iterator; | |
2018 let valueIterator = values.iterator; | |
2019 let hasNextKey = keyIterator.moveNext(); | |
2020 let hasNextValue = valueIterator.moveNext(); | |
2021 while (dart.notNull(hasNextKey) && dart.notNull(hasNextValue)) { | |
2022 map.set(keyIterator.current, valueIterator.current); | |
2023 hasNextKey = keyIterator.moveNext(); | |
2024 hasNextValue = valueIterator.moveNext(); | |
2025 } | |
2026 if (dart.notNull(hasNextKey) || dart.notNull(hasNextValue)) { | |
2027 throw new core.ArgumentError("Iterables do not have same length."); | |
2028 } | |
2029 } | |
2030 } | |
2031 let Queue$ = dart.generic(function(E) { | |
2032 class Queue extends core.Object { | |
2033 Queue() { | |
2034 return new ListQueue(); | |
2035 } | |
2036 Queue$from(elements) { | |
2037 return new ListQueue.from(elements); | |
2038 } | |
2039 } | |
2040 dart.defineNamedConstructor(Queue, 'from'); | |
2041 return Queue; | |
2042 }); | |
2043 let Queue = Queue$(dart.dynamic); | |
2044 let _element = Symbol('_element'); | |
2045 let _link = Symbol('_link'); | |
2046 let _asNonSentinelEntry = Symbol('_asNonSentinelEntry'); | |
2047 let DoubleLinkedQueueEntry$ = dart.generic(function(E) { | |
2048 class DoubleLinkedQueueEntry extends core.Object { | |
2049 DoubleLinkedQueueEntry(e) { | |
2050 this[_element] = e; | |
2051 this[_previous] = null; | |
2052 this[_next] = null; | |
2053 } | |
2054 [_link](previous, next) { | |
2055 this[_next] = next; | |
2056 this[_previous] = previous; | |
2057 previous[_next] = this; | |
2058 next[_previous] = this; | |
2059 } | |
2060 append(e) { | |
2061 new DoubleLinkedQueueEntry(e)._link(this, this[_next]); | |
2062 } | |
2063 prepend(e) { | |
2064 new DoubleLinkedQueueEntry(e)._link(this[_previous], this); | |
2065 } | |
2066 remove() { | |
2067 this[_previous][_next] = this[_next]; | |
2068 this[_next][_previous] = this[_previous]; | |
2069 this[_next] = null; | |
2070 this[_previous] = null; | |
2071 return this[_element]; | |
2072 } | |
2073 [_asNonSentinelEntry]() { | |
2074 return this; | |
2075 } | |
2076 previousEntry() { | |
2077 return this[_previous]._asNonSentinelEntry(); | |
2078 } | |
2079 nextEntry() { | |
2080 return this[_next]._asNonSentinelEntry(); | |
2081 } | |
2082 get element() { | |
2083 return this[_element]; | |
2084 } | |
2085 set element(e) { | |
2086 this[_element] = e; | |
2087 } | |
2088 } | |
2089 return DoubleLinkedQueueEntry; | |
2090 }); | |
2091 let DoubleLinkedQueueEntry = DoubleLinkedQueueEntry$(dart.dynamic); | |
2092 let _DoubleLinkedQueueEntrySentinel$ = dart.generic(function(E) { | |
2093 class _DoubleLinkedQueueEntrySentinel extends DoubleLinkedQueueEntry$(E) { | |
2094 _DoubleLinkedQueueEntrySentinel() { | |
2095 super.DoubleLinkedQueueEntry(null); | |
2096 this[_link](this, this); | |
2097 } | |
2098 remove() { | |
2099 throw _internal.IterableElementError.noElement(); | |
2100 } | |
2101 [_asNonSentinelEntry]() { | |
2102 return null; | |
2103 } | |
2104 set element(e) { | |
2105 dart.assert(false); | |
2106 } | |
2107 get element() { | |
2108 throw _internal.IterableElementError.noElement(); | |
2109 } | |
2110 } | |
2111 return _DoubleLinkedQueueEntrySentinel; | |
2112 }); | |
2113 let _DoubleLinkedQueueEntrySentinel = _DoubleLinkedQueueEntrySentinel$(dart.dy
namic); | |
2114 let _sentinel = Symbol('_sentinel'); | |
2115 let _elementCount = Symbol('_elementCount'); | |
2116 let DoubleLinkedQueue$ = dart.generic(function(E) { | |
2117 class DoubleLinkedQueue extends IterableBase$(E) { | |
2118 DoubleLinkedQueue() { | |
2119 this[_sentinel] = null; | |
2120 this[_elementCount] = 0; | |
2121 super.IterableBase(); | |
2122 this[_sentinel] = new _DoubleLinkedQueueEntrySentinel(); | |
2123 } | |
2124 DoubleLinkedQueue$from(elements) { | |
2125 let list = dart.as(new DoubleLinkedQueue(), Queue$(E)); | |
2126 for (let e of elements) { | |
2127 list.addLast(e); | |
2128 } | |
2129 return dart.as(list, DoubleLinkedQueue$(E)); | |
2130 } | |
2131 get length() { | |
2132 return this[_elementCount]; | |
2133 } | |
2134 addLast(value) { | |
2135 this[_sentinel].prepend(value); | |
2136 this[_elementCount] = dart.notNull(this[_elementCount]) + 1; | |
2137 } | |
2138 addFirst(value) { | |
2139 this[_sentinel].append(value); | |
2140 this[_elementCount] = dart.notNull(this[_elementCount]) + 1; | |
2141 } | |
2142 add(value) { | |
2143 this[_sentinel].prepend(value); | |
2144 this[_elementCount] = dart.notNull(this[_elementCount]) + 1; | |
2145 } | |
2146 addAll(iterable) { | |
2147 for (let value of iterable) { | |
2148 this[_sentinel].prepend(value); | |
2149 this[_elementCount] = dart.notNull(this[_elementCount]) + 1; | |
2150 } | |
2151 } | |
2152 removeLast() { | |
2153 let result = this[_sentinel][_previous].remove(); | |
2154 this[_elementCount] = dart.notNull(this[_elementCount]) - 1; | |
2155 return result; | |
2156 } | |
2157 removeFirst() { | |
2158 let result = this[_sentinel][_next].remove(); | |
2159 this[_elementCount] = dart.notNull(this[_elementCount]) - 1; | |
2160 return result; | |
2161 } | |
2162 remove(o) { | |
2163 let entry = this[_sentinel][_next]; | |
2164 while (!dart.notNull(core.identical(entry, this[_sentinel]))) { | |
2165 if (dart.equals(entry.element, o)) { | |
2166 entry.remove(); | |
2167 this[_elementCount] = dart.notNull(this[_elementCount]) - 1; | |
2168 return true; | |
2169 } | |
2170 entry = entry[_next]; | |
2171 } | |
2172 return false; | |
2173 } | |
2174 [_filter](test, removeMatching) { | |
2175 let entry = this[_sentinel][_next]; | |
2176 while (!dart.notNull(core.identical(entry, this[_sentinel]))) { | |
2177 let next = entry[_next]; | |
2178 if (core.identical(removeMatching, test(entry.element))) { | |
2179 entry.remove(); | |
2180 this[_elementCount] = dart.notNull(this[_elementCount]) - 1; | |
2181 } | |
2182 entry = next; | |
2183 } | |
2184 } | |
2185 removeWhere(test) { | |
2186 this[_filter](test, true); | |
2187 } | |
2188 retainWhere(test) { | |
2189 this[_filter](test, false); | |
2190 } | |
2191 get first() { | |
2192 return this[_sentinel][_next].element; | |
2193 } | |
2194 get last() { | |
2195 return this[_sentinel][_previous].element; | |
2196 } | |
2197 get single() { | |
2198 if (core.identical(this[_sentinel][_next], this[_sentinel][_previous]))
{ | |
2199 return this[_sentinel][_next].element; | |
2200 } | |
2201 throw _internal.IterableElementError.tooMany(); | |
2202 } | |
2203 lastEntry() { | |
2204 return this[_sentinel].previousEntry(); | |
2205 } | |
2206 firstEntry() { | |
2207 return this[_sentinel].nextEntry(); | |
2208 } | |
2209 get isEmpty() { | |
2210 return core.identical(this[_sentinel][_next], this[_sentinel]); | |
2211 } | |
2212 clear() { | |
2213 this[_sentinel][_next] = this[_sentinel]; | |
2214 this[_sentinel][_previous] = this[_sentinel]; | |
2215 this[_elementCount] = 0; | |
2216 } | |
2217 forEachEntry(f) { | |
2218 let entry = this[_sentinel][_next]; | |
2219 while (!dart.notNull(core.identical(entry, this[_sentinel]))) { | |
2220 let nextEntry = entry[_next]; | |
2221 f(entry); | |
2222 entry = nextEntry; | |
2223 } | |
2224 } | |
2225 get iterator() { | |
2226 return new _DoubleLinkedQueueIterator(this[_sentinel]); | |
2227 } | |
2228 toString() { | |
2229 return IterableBase.iterableToFullString(this, '{', '}'); | |
2230 } | |
2231 } | |
2232 dart.defineNamedConstructor(DoubleLinkedQueue, 'from'); | |
2233 return DoubleLinkedQueue; | |
2234 }); | |
2235 let DoubleLinkedQueue = DoubleLinkedQueue$(dart.dynamic); | |
2236 let _nextEntry = Symbol('_nextEntry'); | |
2237 let _DoubleLinkedQueueIterator$ = dart.generic(function(E) { | |
2238 class _DoubleLinkedQueueIterator extends core.Object { | |
2239 _DoubleLinkedQueueIterator(sentinel) { | |
2240 this[_sentinel] = sentinel; | |
2241 this[_nextEntry] = sentinel[_next]; | |
2242 this[_current] = null; | |
2243 } | |
2244 moveNext() { | |
2245 if (!dart.notNull(core.identical(this[_nextEntry], this[_sentinel]))) { | |
2246 this[_current] = this[_nextEntry][_element]; | |
2247 this[_nextEntry] = this[_nextEntry][_next]; | |
2248 return true; | |
2249 } | |
2250 this[_current] = null; | |
2251 this[_nextEntry] = this[_sentinel] = null; | |
2252 return false; | |
2253 } | |
2254 get current() { | |
2255 return this[_current]; | |
2256 } | |
2257 } | |
2258 return _DoubleLinkedQueueIterator; | |
2259 }); | |
2260 let _DoubleLinkedQueueIterator = _DoubleLinkedQueueIterator$(dart.dynamic); | |
2261 let _head = Symbol('_head'); | |
2262 let _tail = Symbol('_tail'); | |
2263 let _table = Symbol('_table'); | |
2264 let _checkModification = Symbol('_checkModification'); | |
2265 let _writeToList = Symbol('_writeToList'); | |
2266 let _add = Symbol('_add'); | |
2267 let _preGrow = Symbol('_preGrow'); | |
2268 let _remove = Symbol('_remove'); | |
2269 let _filterWhere = Symbol('_filterWhere'); | |
2270 let _grow = Symbol('_grow'); | |
2271 let _isPowerOf2 = Symbol('_isPowerOf2'); | |
2272 let _nextPowerOf2 = Symbol('_nextPowerOf2'); | |
2273 let ListQueue$ = dart.generic(function(E) { | |
2274 class ListQueue extends IterableBase$(E) { | |
2275 ListQueue(initialCapacity) { | |
2276 if (initialCapacity === void 0) | |
2277 initialCapacity = null; | |
2278 this[_head] = 0; | |
2279 this[_tail] = 0; | |
2280 this[_table] = null; | |
2281 this[_modificationCount] = 0; | |
2282 super.IterableBase(); | |
2283 if (initialCapacity === null || dart.notNull(initialCapacity) < dart.not
Null(ListQueue._INITIAL_CAPACITY)) { | |
2284 initialCapacity = ListQueue._INITIAL_CAPACITY; | |
2285 } else if (!dart.notNull(_isPowerOf2(initialCapacity))) { | |
2286 initialCapacity = _nextPowerOf2(initialCapacity); | |
2287 } | |
2288 dart.assert(_isPowerOf2(initialCapacity)); | |
2289 this[_table] = new core.List(initialCapacity); | |
2290 } | |
2291 ListQueue$from(elements) { | |
2292 if (dart.is(elements, core.List)) { | |
2293 let length = elements.length; | |
2294 let queue = dart.as(new ListQueue(dart.notNull(length) + 1), ListQueue
$(E)); | |
2295 dart.assert(dart.notNull(queue[_table].length) > dart.notNull(length))
; | |
2296 let sourceList = elements; | |
2297 queue[_table].setRange(0, length, dart.as(sourceList, core.Iterable$(E
)), 0); | |
2298 queue[_tail] = length; | |
2299 return queue; | |
2300 } else { | |
2301 let capacity = ListQueue._INITIAL_CAPACITY; | |
2302 if (dart.is(elements, _internal.EfficientLength)) { | |
2303 capacity = elements.length; | |
2304 } | |
2305 let result = new ListQueue(capacity); | |
2306 for (let element of elements) { | |
2307 result.addLast(element); | |
2308 } | |
2309 return result; | |
2310 } | |
2311 } | |
2312 get iterator() { | |
2313 return new _ListQueueIterator(this); | |
2314 } | |
2315 forEach(action) { | |
2316 let modificationCount = this[_modificationCount]; | |
2317 for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 & d
art.notNull(this[_table].length) - 1) { | |
2318 action(this[_table].get(i)); | |
2319 this[_checkModification](modificationCount); | |
2320 } | |
2321 } | |
2322 get isEmpty() { | |
2323 return this[_head] === this[_tail]; | |
2324 } | |
2325 get length() { | |
2326 return dart.notNull(this[_tail]) - dart.notNull(this[_head]) & dart.notN
ull(this[_table].length) - 1; | |
2327 } | |
2328 get first() { | |
2329 if (this[_head] === this[_tail]) | |
2330 throw _internal.IterableElementError.noElement(); | |
2331 return this[_table].get(this[_head]); | |
2332 } | |
2333 get last() { | |
2334 if (this[_head] === this[_tail]) | |
2335 throw _internal.IterableElementError.noElement(); | |
2336 return this[_table].get(dart.notNull(this[_tail]) - 1 & dart.notNull(thi
s[_table].length) - 1); | |
2337 } | |
2338 get single() { | |
2339 if (this[_head] === this[_tail]) | |
2340 throw _internal.IterableElementError.noElement(); | |
2341 if (dart.notNull(this.length) > 1) | |
2342 throw _internal.IterableElementError.tooMany(); | |
2343 return this[_table].get(this[_head]); | |
2344 } | |
2345 elementAt(index) { | |
2346 core.RangeError.checkValidIndex(index, this); | |
2347 return this[_table].get(dart.notNull(this[_head]) + dart.notNull(index)
& dart.notNull(this[_table].length) - 1); | |
2348 } | |
2349 toList(opt$) { | |
2350 let growable = opt$.growable === void 0 ? true : opt$.growable; | |
2351 let list = null; | |
2352 if (growable) { | |
2353 list = ((_) => { | |
2354 _.length = this.length; | |
2355 return _; | |
2356 }).bind(this)(new core.List()); | |
2357 } else { | |
2358 list = new core.List(this.length); | |
2359 } | |
2360 this[_writeToList](list); | |
2361 return list; | |
2362 } | |
2363 add(element) { | |
2364 this[_add](element); | |
2365 } | |
2366 addAll(elements) { | |
2367 if (dart.is(elements, core.List)) { | |
2368 let list = dart.as(elements, core.List); | |
2369 let addCount = list.length; | |
2370 let length = this.length; | |
2371 if (dart.notNull(length) + dart.notNull(addCount) >= dart.notNull(this
[_table].length)) { | |
2372 this[_preGrow](dart.notNull(length) + dart.notNull(addCount)); | |
2373 this[_table].setRange(length, dart.notNull(length) + dart.notNull(ad
dCount), dart.as(list, core.Iterable$(E)), 0); | |
2374 this[_tail] = addCount; | |
2375 } else { | |
2376 let endSpace = dart.notNull(this[_table].length) - dart.notNull(this
[_tail]); | |
2377 if (dart.notNull(addCount) < dart.notNull(endSpace)) { | |
2378 this[_table].setRange(this[_tail], dart.notNull(this[_tail]) + dar
t.notNull(addCount), dart.as(list, core.Iterable$(E)), 0); | |
2379 this[_tail] = addCount; | |
2380 } else { | |
2381 let preSpace = dart.notNull(addCount) - dart.notNull(endSpace); | |
2382 this[_table].setRange(this[_tail], dart.notNull(this[_tail]) + dar
t.notNull(endSpace), dart.as(list, core.Iterable$(E)), 0); | |
2383 this[_table].setRange(0, preSpace, dart.as(list, core.Iterable$(E)
), endSpace); | |
2384 this[_tail] = preSpace; | |
2385 } | |
2386 } | |
2387 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2388 } else { | |
2389 for (let element of elements) | |
2390 this[_add](element); | |
2391 } | |
2392 } | |
2393 remove(object) { | |
2394 for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 & d
art.notNull(this[_table].length) - 1) { | |
2395 let element = this[_table].get(i); | |
2396 if (dart.equals(element, object)) { | |
2397 this[_remove](i); | |
2398 this[_modificationCount] = dart.notNull(this[_modificationCount]) +
1; | |
2399 return true; | |
2400 } | |
2401 } | |
2402 return false; | |
2403 } | |
2404 [_filterWhere](test, removeMatching) { | |
2405 let index = this[_head]; | |
2406 let modificationCount = this[_modificationCount]; | |
2407 let i = this[_head]; | |
2408 while (i !== this[_tail]) { | |
2409 let element = this[_table].get(i); | |
2410 let remove = core.identical(removeMatching, test(element)); | |
2411 this[_checkModification](modificationCount); | |
2412 if (remove) { | |
2413 i = this[_remove](i); | |
2414 modificationCount = this[_modificationCount] = dart.notNull(this[_mo
dificationCount]) + 1; | |
2415 } else { | |
2416 i = dart.notNull(i) + 1 & dart.notNull(this[_table].length) - 1; | |
2417 } | |
2418 } | |
2419 } | |
2420 removeWhere(test) { | |
2421 this[_filterWhere](test, true); | |
2422 } | |
2423 retainWhere(test) { | |
2424 this[_filterWhere](test, false); | |
2425 } | |
2426 clear() { | |
2427 if (this[_head] !== this[_tail]) { | |
2428 for (let i = this[_head]; i !== this[_tail]; i = dart.notNull(i) + 1 &
dart.notNull(this[_table].length) - 1) { | |
2429 this[_table].set(i, null); | |
2430 } | |
2431 this[_head] = this[_tail] = 0; | |
2432 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2433 } | |
2434 } | |
2435 toString() { | |
2436 return IterableBase.iterableToFullString(this, "{", "}"); | |
2437 } | |
2438 addLast(element) { | |
2439 this[_add](element); | |
2440 } | |
2441 addFirst(element) { | |
2442 this[_head] = dart.notNull(this[_head]) - 1 & dart.notNull(this[_table].
length) - 1; | |
2443 this[_table].set(this[_head], element); | |
2444 if (this[_head] === this[_tail]) | |
2445 this[_grow](); | |
2446 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2447 } | |
2448 removeFirst() { | |
2449 if (this[_head] === this[_tail]) | |
2450 throw _internal.IterableElementError.noElement(); | |
2451 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2452 let result = this[_table].get(this[_head]); | |
2453 this[_table].set(this[_head], null); | |
2454 this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(this[_table].
length) - 1; | |
2455 return result; | |
2456 } | |
2457 removeLast() { | |
2458 if (this[_head] === this[_tail]) | |
2459 throw _internal.IterableElementError.noElement(); | |
2460 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2461 this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(this[_table].
length) - 1; | |
2462 let result = this[_table].get(this[_tail]); | |
2463 this[_table].set(this[_tail], null); | |
2464 return result; | |
2465 } | |
2466 static [_isPowerOf2](number) { | |
2467 return (dart.notNull(number) & dart.notNull(number) - 1) === 0; | |
2468 } | |
2469 static [_nextPowerOf2](number) { | |
2470 dart.assert(dart.notNull(number) > 0); | |
2471 number = (dart.notNull(number) << 1) - 1; | |
2472 for (;;) { | |
2473 let nextNumber = dart.notNull(number) & dart.notNull(number) - 1; | |
2474 if (nextNumber === 0) | |
2475 return number; | |
2476 number = nextNumber; | |
2477 } | |
2478 } | |
2479 [_checkModification](expectedModificationCount) { | |
2480 if (expectedModificationCount !== this[_modificationCount]) { | |
2481 throw new core.ConcurrentModificationError(this); | |
2482 } | |
2483 } | |
2484 [_add](element) { | |
2485 this[_table].set(this[_tail], element); | |
2486 this[_tail] = dart.notNull(this[_tail]) + 1 & dart.notNull(this[_table].
length) - 1; | |
2487 if (this[_head] === this[_tail]) | |
2488 this[_grow](); | |
2489 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2490 } | |
2491 [_remove](offset) { | |
2492 let mask = dart.notNull(this[_table].length) - 1; | |
2493 let startDistance = dart.notNull(offset) - dart.notNull(this[_head]) & d
art.notNull(mask); | |
2494 let endDistance = dart.notNull(this[_tail]) - dart.notNull(offset) & dar
t.notNull(mask); | |
2495 if (dart.notNull(startDistance) < dart.notNull(endDistance)) { | |
2496 let i = offset; | |
2497 while (i !== this[_head]) { | |
2498 let prevOffset = dart.notNull(i) - 1 & dart.notNull(mask); | |
2499 this[_table].set(i, this[_table].get(prevOffset)); | |
2500 i = prevOffset; | |
2501 } | |
2502 this[_table].set(this[_head], null); | |
2503 this[_head] = dart.notNull(this[_head]) + 1 & dart.notNull(mask); | |
2504 return dart.notNull(offset) + 1 & dart.notNull(mask); | |
2505 } else { | |
2506 this[_tail] = dart.notNull(this[_tail]) - 1 & dart.notNull(mask); | |
2507 let i = offset; | |
2508 while (i !== this[_tail]) { | |
2509 let nextOffset = dart.notNull(i) + 1 & dart.notNull(mask); | |
2510 this[_table].set(i, this[_table].get(nextOffset)); | |
2511 i = nextOffset; | |
2512 } | |
2513 this[_table].set(this[_tail], null); | |
2514 return offset; | |
2515 } | |
2516 } | |
2517 [_grow]() { | |
2518 let newTable = new core.List(dart.notNull(this[_table].length) * 2); | |
2519 let split = dart.notNull(this[_table].length) - dart.notNull(this[_head]
); | |
2520 newTable.setRange(0, split, this[_table], this[_head]); | |
2521 newTable.setRange(split, dart.notNull(split) + dart.notNull(this[_head])
, this[_table], 0); | |
2522 this[_head] = 0; | |
2523 this[_tail] = this[_table].length; | |
2524 this[_table] = newTable; | |
2525 } | |
2526 [_writeToList](target) { | |
2527 dart.assert(dart.notNull(target.length) >= dart.notNull(this.length)); | |
2528 if (dart.notNull(this[_head]) <= dart.notNull(this[_tail])) { | |
2529 let length = dart.notNull(this[_tail]) - dart.notNull(this[_head]); | |
2530 target.setRange(0, length, this[_table], this[_head]); | |
2531 return length; | |
2532 } else { | |
2533 let firstPartSize = dart.notNull(this[_table].length) - dart.notNull(t
his[_head]); | |
2534 target.setRange(0, firstPartSize, this[_table], this[_head]); | |
2535 target.setRange(firstPartSize, dart.notNull(firstPartSize) + dart.notN
ull(this[_tail]), this[_table], 0); | |
2536 return dart.notNull(this[_tail]) + dart.notNull(firstPartSize); | |
2537 } | |
2538 } | |
2539 [_preGrow](newElementCount) { | |
2540 dart.assert(dart.notNull(newElementCount) >= dart.notNull(this.length)); | |
2541 newElementCount = dart.notNull(newElementCount) >> 1; | |
2542 let newCapacity = _nextPowerOf2(newElementCount); | |
2543 let newTable = new core.List(newCapacity); | |
2544 this[_tail] = this[_writeToList](newTable); | |
2545 this[_table] = newTable; | |
2546 this[_head] = 0; | |
2547 } | |
2548 } | |
2549 dart.defineNamedConstructor(ListQueue, 'from'); | |
2550 ListQueue._INITIAL_CAPACITY = 8; | |
2551 return ListQueue; | |
2552 }); | |
2553 let ListQueue = ListQueue$(dart.dynamic); | |
2554 let _queue = Symbol('_queue'); | |
2555 let _end = Symbol('_end'); | |
2556 let _position = Symbol('_position'); | |
2557 let _ListQueueIterator$ = dart.generic(function(E) { | |
2558 class _ListQueueIterator extends core.Object { | |
2559 _ListQueueIterator(queue) { | |
2560 this[_queue] = queue; | |
2561 this[_end] = queue[_tail]; | |
2562 this[_modificationCount] = queue[_modificationCount]; | |
2563 this[_position] = queue[_head]; | |
2564 this[_current] = null; | |
2565 } | |
2566 get current() { | |
2567 return this[_current]; | |
2568 } | |
2569 moveNext() { | |
2570 this[_queue]._checkModification(this[_modificationCount]); | |
2571 if (this[_position] === this[_end]) { | |
2572 this[_current] = null; | |
2573 return false; | |
2574 } | |
2575 this[_current] = dart.as(this[_queue][_table].get(this[_position]), E); | |
2576 this[_position] = dart.notNull(this[_position]) + 1 & dart.notNull(this[
_queue][_table].length) - 1; | |
2577 return true; | |
2578 } | |
2579 } | |
2580 return _ListQueueIterator; | |
2581 }); | |
2582 let _ListQueueIterator = _ListQueueIterator$(dart.dynamic); | |
2583 let _SplayTreeNode$ = dart.generic(function(K) { | |
2584 class _SplayTreeNode extends core.Object { | |
2585 _SplayTreeNode(key) { | |
2586 this.key = key; | |
2587 this.left = null; | |
2588 this.right = null; | |
2589 } | |
2590 } | |
2591 return _SplayTreeNode; | |
2592 }); | |
2593 let _SplayTreeNode = _SplayTreeNode$(dart.dynamic); | |
2594 let _SplayTreeMapNode$ = dart.generic(function(K, V) { | |
2595 class _SplayTreeMapNode extends _SplayTreeNode$(K) { | |
2596 _SplayTreeMapNode(key, value) { | |
2597 this.value = value; | |
2598 super._SplayTreeNode(key); | |
2599 } | |
2600 } | |
2601 return _SplayTreeMapNode; | |
2602 }); | |
2603 let _SplayTreeMapNode = _SplayTreeMapNode$(dart.dynamic, dart.dynamic); | |
2604 let _dummy = Symbol('_dummy'); | |
2605 let _root = Symbol('_root'); | |
2606 let _count = Symbol('_count'); | |
2607 let _splayCount = Symbol('_splayCount'); | |
2608 let _splay = Symbol('_splay'); | |
2609 let _compare = Symbol('_compare'); | |
2610 let _splayMin = Symbol('_splayMin'); | |
2611 let _splayMax = Symbol('_splayMax'); | |
2612 let _addNewRoot = Symbol('_addNewRoot'); | |
2613 let _first = Symbol('_first'); | |
2614 let _last = Symbol('_last'); | |
2615 let _clear = Symbol('_clear'); | |
2616 let _SplayTree$ = dart.generic(function(K) { | |
2617 class _SplayTree extends core.Object { | |
2618 _SplayTree() { | |
2619 this[_dummy] = new _SplayTreeNode(null); | |
2620 this[_root] = null; | |
2621 this[_count] = 0; | |
2622 this[_modificationCount] = 0; | |
2623 this[_splayCount] = 0; | |
2624 } | |
2625 [_splay](key) { | |
2626 if (this[_root] === null) | |
2627 return -1; | |
2628 let left = this[_dummy]; | |
2629 let right = this[_dummy]; | |
2630 let current = this[_root]; | |
2631 let comp = null; | |
2632 while (true) { | |
2633 comp = this[_compare](current.key, key); | |
2634 if (dart.notNull(comp) > 0) { | |
2635 if (current.left === null) | |
2636 break; | |
2637 comp = this[_compare](current.left.key, key); | |
2638 if (dart.notNull(comp) > 0) { | |
2639 let tmp = current.left; | |
2640 current.left = tmp.right; | |
2641 tmp.right = current; | |
2642 current = tmp; | |
2643 if (current.left === null) | |
2644 break; | |
2645 } | |
2646 right.left = current; | |
2647 right = current; | |
2648 current = current.left; | |
2649 } else if (dart.notNull(comp) < 0) { | |
2650 if (current.right === null) | |
2651 break; | |
2652 comp = this[_compare](current.right.key, key); | |
2653 if (dart.notNull(comp) < 0) { | |
2654 let tmp = current.right; | |
2655 current.right = tmp.left; | |
2656 tmp.left = current; | |
2657 current = tmp; | |
2658 if (current.right === null) | |
2659 break; | |
2660 } | |
2661 left.right = current; | |
2662 left = current; | |
2663 current = current.right; | |
2664 } else { | |
2665 break; | |
2666 } | |
2667 } | |
2668 left.right = current.left; | |
2669 right.left = current.right; | |
2670 current.left = this[_dummy].right; | |
2671 current.right = this[_dummy].left; | |
2672 this[_root] = current; | |
2673 this[_dummy].right = null; | |
2674 this[_dummy].left = null; | |
2675 this[_splayCount] = dart.notNull(this[_splayCount]) + 1; | |
2676 return comp; | |
2677 } | |
2678 [_splayMin](node) { | |
2679 let current = node; | |
2680 while (current.left !== null) { | |
2681 let left = current.left; | |
2682 current.left = left.right; | |
2683 left.right = current; | |
2684 current = left; | |
2685 } | |
2686 return dart.as(current, _SplayTreeNode$(K)); | |
2687 } | |
2688 [_splayMax](node) { | |
2689 let current = node; | |
2690 while (current.right !== null) { | |
2691 let right = current.right; | |
2692 current.right = right.left; | |
2693 right.left = current; | |
2694 current = right; | |
2695 } | |
2696 return dart.as(current, _SplayTreeNode$(K)); | |
2697 } | |
2698 [_remove](key) { | |
2699 if (this[_root] === null) | |
2700 return null; | |
2701 let comp = this[_splay](key); | |
2702 if (comp !== 0) | |
2703 return null; | |
2704 let result = this[_root]; | |
2705 this[_count] = dart.notNull(this[_count]) - 1; | |
2706 if (this[_root].left === null) { | |
2707 this[_root] = this[_root].right; | |
2708 } else { | |
2709 let right = this[_root].right; | |
2710 this[_root] = this[_splayMax](this[_root].left); | |
2711 this[_root].right = right; | |
2712 } | |
2713 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2714 return result; | |
2715 } | |
2716 [_addNewRoot](node, comp) { | |
2717 this[_count] = dart.notNull(this[_count]) + 1; | |
2718 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2719 if (this[_root] === null) { | |
2720 this[_root] = node; | |
2721 return; | |
2722 } | |
2723 if (dart.notNull(comp) < 0) { | |
2724 node.left = this[_root]; | |
2725 node.right = this[_root].right; | |
2726 this[_root].right = null; | |
2727 } else { | |
2728 node.right = this[_root]; | |
2729 node.left = this[_root].left; | |
2730 this[_root].left = null; | |
2731 } | |
2732 this[_root] = node; | |
2733 } | |
2734 get [_first]() { | |
2735 if (this[_root] === null) | |
2736 return null; | |
2737 this[_root] = this[_splayMin](this[_root]); | |
2738 return this[_root]; | |
2739 } | |
2740 get [_last]() { | |
2741 if (this[_root] === null) | |
2742 return null; | |
2743 this[_root] = this[_splayMax](this[_root]); | |
2744 return this[_root]; | |
2745 } | |
2746 [_clear]() { | |
2747 this[_root] = null; | |
2748 this[_count] = 0; | |
2749 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
2750 } | |
2751 } | |
2752 return _SplayTree; | |
2753 }); | |
2754 let _SplayTree = _SplayTree$(dart.dynamic); | |
2755 let _TypeTest$ = dart.generic(function(T) { | |
2756 class _TypeTest extends core.Object { | |
2757 test(v) { | |
2758 return dart.is(v, T); | |
2759 } | |
2760 } | |
2761 return _TypeTest; | |
2762 }); | |
2763 let _TypeTest = _TypeTest$(dart.dynamic); | |
2764 let _comparator = Symbol('_comparator'); | |
2765 let _validKey = Symbol('_validKey'); | |
2766 let SplayTreeMap$ = dart.generic(function(K, V) { | |
2767 class SplayTreeMap extends _SplayTree$(K) { | |
2768 SplayTreeMap(compare, isValidKey) { | |
2769 if (compare === void 0) | |
2770 compare = null; | |
2771 if (isValidKey === void 0) | |
2772 isValidKey = null; | |
2773 this[_comparator] = dart.as(compare === null ? core.Comparable.compare :
compare, core.Comparator); | |
2774 this[_validKey] = dart.as(isValidKey !== null ? isValidKey : (v) => dart
.is(v, K), _Predicate); | |
2775 super._SplayTree(); | |
2776 } | |
2777 SplayTreeMap$from(other, compare, isValidKey) { | |
2778 if (compare === void 0) | |
2779 compare = null; | |
2780 if (isValidKey === void 0) | |
2781 isValidKey = null; | |
2782 let result = new SplayTreeMap(); | |
2783 other.forEach((k, v) => { | |
2784 result.set(k, dart.as(v, V)); | |
2785 }); | |
2786 return result; | |
2787 } | |
2788 SplayTreeMap$fromIterable(iterable, opt$) { | |
2789 let key = opt$.key === void 0 ? null : opt$.key; | |
2790 let value = opt$.value === void 0 ? null : opt$.value; | |
2791 let compare = opt$.compare === void 0 ? null : opt$.compare; | |
2792 let isValidKey = opt$.isValidKey === void 0 ? null : opt$.isValidKey; | |
2793 let map = new SplayTreeMap(compare, isValidKey); | |
2794 Maps._fillMapWithMappedIterable(map, iterable, key, value); | |
2795 return map; | |
2796 } | |
2797 SplayTreeMap$fromIterables(keys, values, compare, isValidKey) { | |
2798 if (compare === void 0) | |
2799 compare = null; | |
2800 if (isValidKey === void 0) | |
2801 isValidKey = null; | |
2802 let map = new SplayTreeMap(compare, isValidKey); | |
2803 Maps._fillMapWithIterables(map, keys, values); | |
2804 return map; | |
2805 } | |
2806 [_compare](key1, key2) { | |
2807 return this[_comparator](key1, key2); | |
2808 } | |
2809 SplayTreeMap$_internal() { | |
2810 this[_comparator] = null; | |
2811 this[_validKey] = null; | |
2812 super._SplayTree(); | |
2813 } | |
2814 get(key) { | |
2815 if (key === null) | |
2816 throw new core.ArgumentError(key); | |
2817 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
2818 return null; | |
2819 if (this[_root] !== null) { | |
2820 let comp = this[_splay](dart.as(key, K)); | |
2821 if (comp === 0) { | |
2822 let mapRoot = dart.as(this[_root], _SplayTreeMapNode); | |
2823 return dart.as(mapRoot.value, V); | |
2824 } | |
2825 } | |
2826 return null; | |
2827 } | |
2828 remove(key) { | |
2829 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
2830 return null; | |
2831 let mapRoot = dart.as(this[_remove](dart.as(key, K)), _SplayTreeMapNode)
; | |
2832 if (mapRoot !== null) | |
2833 return dart.as(mapRoot.value, V); | |
2834 return null; | |
2835 } | |
2836 set(key, value) { | |
2837 if (key === null) | |
2838 throw new core.ArgumentError(key); | |
2839 let comp = this[_splay](key); | |
2840 if (comp === 0) { | |
2841 let mapRoot = dart.as(this[_root], _SplayTreeMapNode); | |
2842 mapRoot.value = value; | |
2843 return; | |
2844 } | |
2845 this[_addNewRoot](dart.as(new _SplayTreeMapNode(key, value), _SplayTreeN
ode$(K)), comp); | |
2846 } | |
2847 putIfAbsent(key, ifAbsent) { | |
2848 if (key === null) | |
2849 throw new core.ArgumentError(key); | |
2850 let comp = this[_splay](key); | |
2851 if (comp === 0) { | |
2852 let mapRoot = dart.as(this[_root], _SplayTreeMapNode); | |
2853 return dart.as(mapRoot.value, V); | |
2854 } | |
2855 let modificationCount = this[_modificationCount]; | |
2856 let splayCount = this[_splayCount]; | |
2857 let value = ifAbsent(); | |
2858 if (modificationCount !== this[_modificationCount]) { | |
2859 throw new core.ConcurrentModificationError(this); | |
2860 } | |
2861 if (splayCount !== this[_splayCount]) { | |
2862 comp = this[_splay](key); | |
2863 dart.assert(comp !== 0); | |
2864 } | |
2865 this[_addNewRoot](dart.as(new _SplayTreeMapNode(key, value), _SplayTreeN
ode$(K)), comp); | |
2866 return value; | |
2867 } | |
2868 addAll(other) { | |
2869 other.forEach(((key, value) => { | |
2870 this.set(key, value); | |
2871 }).bind(this)); | |
2872 } | |
2873 get isEmpty() { | |
2874 return this[_root] === null; | |
2875 } | |
2876 get isNotEmpty() { | |
2877 return !dart.notNull(this.isEmpty); | |
2878 } | |
2879 forEach(f) { | |
2880 let nodes = new _SplayTreeNodeIterator(this); | |
2881 while (nodes.moveNext()) { | |
2882 let node = dart.as(nodes.current, _SplayTreeMapNode$(K, V)); | |
2883 f(node.key, node.value); | |
2884 } | |
2885 } | |
2886 get length() { | |
2887 return this[_count]; | |
2888 } | |
2889 clear() { | |
2890 this[_clear](); | |
2891 } | |
2892 containsKey(key) { | |
2893 return dart.notNull(dart.dinvokef(this[_validKey], key)) && this[_splay]
(dart.as(key, K)) === 0; | |
2894 } | |
2895 containsValue(value) { | |
2896 let found = false; | |
2897 let initialSplayCount = this[_splayCount]; | |
2898 // Function visit: (_SplayTreeMapNode<dynamic, dynamic>) → bool | |
2899 function visit(node) { | |
2900 while (node !== null) { | |
2901 if (dart.equals(node.value, value)) | |
2902 return true; | |
2903 if (initialSplayCount !== this[_splayCount]) { | |
2904 throw new core.ConcurrentModificationError(this); | |
2905 } | |
2906 if (dart.notNull(node.right !== null) && dart.notNull(visit(dart.as(
node.right, _SplayTreeMapNode)))) | |
2907 return true; | |
2908 node = dart.as(node.left, _SplayTreeMapNode); | |
2909 } | |
2910 return false; | |
2911 } | |
2912 return visit(dart.as(this[_root], _SplayTreeMapNode)); | |
2913 } | |
2914 get keys() { | |
2915 return new _SplayTreeKeyIterable(this); | |
2916 } | |
2917 get values() { | |
2918 return new _SplayTreeValueIterable(this); | |
2919 } | |
2920 toString() { | |
2921 return Maps.mapToString(this); | |
2922 } | |
2923 firstKey() { | |
2924 if (this[_root] === null) | |
2925 return null; | |
2926 return dart.as(this[_first].key, K); | |
2927 } | |
2928 lastKey() { | |
2929 if (this[_root] === null) | |
2930 return null; | |
2931 return dart.as(this[_last].key, K); | |
2932 } | |
2933 lastKeyBefore(key) { | |
2934 if (key === null) | |
2935 throw new core.ArgumentError(key); | |
2936 if (this[_root] === null) | |
2937 return null; | |
2938 let comp = this[_splay](key); | |
2939 if (dart.notNull(comp) < 0) | |
2940 return this[_root].key; | |
2941 let node = this[_root].left; | |
2942 if (node === null) | |
2943 return null; | |
2944 while (node.right !== null) { | |
2945 node = node.right; | |
2946 } | |
2947 return node.key; | |
2948 } | |
2949 firstKeyAfter(key) { | |
2950 if (key === null) | |
2951 throw new core.ArgumentError(key); | |
2952 if (this[_root] === null) | |
2953 return null; | |
2954 let comp = this[_splay](key); | |
2955 if (dart.notNull(comp) > 0) | |
2956 return this[_root].key; | |
2957 let node = this[_root].right; | |
2958 if (node === null) | |
2959 return null; | |
2960 while (node.left !== null) { | |
2961 node = node.left; | |
2962 } | |
2963 return node.key; | |
2964 } | |
2965 } | |
2966 dart.defineNamedConstructor(SplayTreeMap, 'from'); | |
2967 dart.defineNamedConstructor(SplayTreeMap, 'fromIterable'); | |
2968 dart.defineNamedConstructor(SplayTreeMap, 'fromIterables'); | |
2969 dart.defineNamedConstructor(SplayTreeMap, '_internal'); | |
2970 return SplayTreeMap; | |
2971 }); | |
2972 let SplayTreeMap = SplayTreeMap$(dart.dynamic, dart.dynamic); | |
2973 let _workList = Symbol('_workList'); | |
2974 let _tree = Symbol('_tree'); | |
2975 let _currentNode = Symbol('_currentNode'); | |
2976 let _findLeftMostDescendent = Symbol('_findLeftMostDescendent'); | |
2977 let _getValue = Symbol('_getValue'); | |
2978 let _rebuildWorkList = Symbol('_rebuildWorkList'); | |
2979 let _SplayTreeIterator$ = dart.generic(function(T) { | |
2980 class _SplayTreeIterator extends core.Object { | |
2981 _SplayTreeIterator(tree) { | |
2982 this[_workList] = new List.from([]); | |
2983 this[_tree] = tree; | |
2984 this[_modificationCount] = tree[_modificationCount]; | |
2985 this[_splayCount] = tree[_splayCount]; | |
2986 this[_currentNode] = null; | |
2987 this[_findLeftMostDescendent](tree[_root]); | |
2988 } | |
2989 _SplayTreeIterator$startAt(tree, startKey) { | |
2990 this[_workList] = new List.from([]); | |
2991 this[_tree] = tree; | |
2992 this[_modificationCount] = tree[_modificationCount]; | |
2993 this[_splayCount] = null; | |
2994 this[_currentNode] = null; | |
2995 if (tree[_root] === null) | |
2996 return; | |
2997 let compare = tree._splay(startKey); | |
2998 this[_splayCount] = tree[_splayCount]; | |
2999 if (dart.notNull(compare) < 0) { | |
3000 this[_findLeftMostDescendent](tree[_root].right); | |
3001 } else { | |
3002 this[_workList].add(tree[_root]); | |
3003 } | |
3004 } | |
3005 get current() { | |
3006 if (this[_currentNode] === null) | |
3007 return null; | |
3008 return this[_getValue](this[_currentNode]); | |
3009 } | |
3010 [_findLeftMostDescendent](node) { | |
3011 while (node !== null) { | |
3012 this[_workList].add(node); | |
3013 node = node.left; | |
3014 } | |
3015 } | |
3016 [_rebuildWorkList](currentNode) { | |
3017 dart.assert(!dart.notNull(this[_workList].isEmpty)); | |
3018 this[_workList].clear(); | |
3019 if (currentNode === null) { | |
3020 this[_findLeftMostDescendent](this[_tree][_root]); | |
3021 } else { | |
3022 this[_tree]._splay(currentNode.key); | |
3023 this[_findLeftMostDescendent](this[_tree][_root].right); | |
3024 dart.assert(!dart.notNull(this[_workList].isEmpty)); | |
3025 } | |
3026 } | |
3027 moveNext() { | |
3028 if (this[_modificationCount] !== this[_tree][_modificationCount]) { | |
3029 throw new core.ConcurrentModificationError(this[_tree]); | |
3030 } | |
3031 if (this[_workList].isEmpty) { | |
3032 this[_currentNode] = null; | |
3033 return false; | |
3034 } | |
3035 if (this[_tree][_splayCount] !== this[_splayCount] && dart.notNull(this[
_currentNode] !== null)) { | |
3036 this[_rebuildWorkList](this[_currentNode]); | |
3037 } | |
3038 this[_currentNode] = this[_workList].removeLast(); | |
3039 this[_findLeftMostDescendent](this[_currentNode].right); | |
3040 return true; | |
3041 } | |
3042 } | |
3043 dart.defineNamedConstructor(_SplayTreeIterator, 'startAt'); | |
3044 return _SplayTreeIterator; | |
3045 }); | |
3046 let _SplayTreeIterator = _SplayTreeIterator$(dart.dynamic); | |
3047 let _SplayTreeKeyIterable$ = dart.generic(function(K) { | |
3048 class _SplayTreeKeyIterable extends IterableBase$(K) { | |
3049 _SplayTreeKeyIterable($_tree) { | |
3050 this[_tree] = $_tree; | |
3051 super.IterableBase(); | |
3052 } | |
3053 get length() { | |
3054 return this[_tree][_count]; | |
3055 } | |
3056 get isEmpty() { | |
3057 return this[_tree][_count] === 0; | |
3058 } | |
3059 get iterator() { | |
3060 return new _SplayTreeKeyIterator(this[_tree]); | |
3061 } | |
3062 toSet() { | |
3063 let setOrMap = this[_tree]; | |
3064 let set = new SplayTreeSet(dart.as(setOrMap[_comparator], dart.throw_("U
nimplemented type (K, K) → int")), dart.as(setOrMap[_validKey], dart.throw_("Uni
mplemented type (dynamic) → bool"))); | |
3065 set[_count] = this[_tree][_count]; | |
3066 set[_root] = set._copyNode(this[_tree][_root]); | |
3067 return set; | |
3068 } | |
3069 } | |
3070 return _SplayTreeKeyIterable; | |
3071 }); | |
3072 let _SplayTreeKeyIterable = _SplayTreeKeyIterable$(dart.dynamic); | |
3073 let _SplayTreeValueIterable$ = dart.generic(function(K, V) { | |
3074 class _SplayTreeValueIterable extends IterableBase$(V) { | |
3075 _SplayTreeValueIterable($_map) { | |
3076 this[_map] = $_map; | |
3077 super.IterableBase(); | |
3078 } | |
3079 get length() { | |
3080 return this[_map][_count]; | |
3081 } | |
3082 get isEmpty() { | |
3083 return this[_map][_count] === 0; | |
3084 } | |
3085 get iterator() { | |
3086 return new _SplayTreeValueIterator(this[_map]); | |
3087 } | |
3088 } | |
3089 return _SplayTreeValueIterable; | |
3090 }); | |
3091 let _SplayTreeValueIterable = _SplayTreeValueIterable$(dart.dynamic, dart.dyna
mic); | |
3092 let _SplayTreeKeyIterator$ = dart.generic(function(K) { | |
3093 class _SplayTreeKeyIterator extends _SplayTreeIterator$(K) { | |
3094 _SplayTreeKeyIterator(map) { | |
3095 super._SplayTreeIterator(map); | |
3096 } | |
3097 [_getValue](node) { | |
3098 return dart.as(node.key, K); | |
3099 } | |
3100 } | |
3101 return _SplayTreeKeyIterator; | |
3102 }); | |
3103 let _SplayTreeKeyIterator = _SplayTreeKeyIterator$(dart.dynamic); | |
3104 let _SplayTreeValueIterator$ = dart.generic(function(K, V) { | |
3105 class _SplayTreeValueIterator extends _SplayTreeIterator$(V) { | |
3106 _SplayTreeValueIterator(map) { | |
3107 super._SplayTreeIterator(map); | |
3108 } | |
3109 [_getValue](node) { | |
3110 return dart.as(node.value, V); | |
3111 } | |
3112 } | |
3113 return _SplayTreeValueIterator; | |
3114 }); | |
3115 let _SplayTreeValueIterator = _SplayTreeValueIterator$(dart.dynamic, dart.dyna
mic); | |
3116 let _SplayTreeNodeIterator$ = dart.generic(function(K) { | |
3117 class _SplayTreeNodeIterator extends _SplayTreeIterator$(_SplayTreeNode$(K))
{ | |
3118 _SplayTreeNodeIterator(tree) { | |
3119 super._SplayTreeIterator(tree); | |
3120 } | |
3121 _SplayTreeNodeIterator$startAt(tree, startKey) { | |
3122 super._SplayTreeIterator$startAt(tree, startKey); | |
3123 } | |
3124 [_getValue](node) { | |
3125 return dart.as(node, _SplayTreeNode$(K)); | |
3126 } | |
3127 } | |
3128 dart.defineNamedConstructor(_SplayTreeNodeIterator, 'startAt'); | |
3129 return _SplayTreeNodeIterator; | |
3130 }); | |
3131 let _SplayTreeNodeIterator = _SplayTreeNodeIterator$(dart.dynamic); | |
3132 let _clone = Symbol('_clone'); | |
3133 let _copyNode = Symbol('_copyNode'); | |
3134 let SplayTreeSet$ = dart.generic(function(E) { | |
3135 class SplayTreeSet extends dart.mixin(_SplayTree$(E), IterableMixin$(E), Set
Mixin$(E)) { | |
3136 SplayTreeSet(compare, isValidKey) { | |
3137 if (compare === void 0) | |
3138 compare = null; | |
3139 if (isValidKey === void 0) | |
3140 isValidKey = null; | |
3141 this[_comparator] = dart.as(compare === null ? core.Comparable.compare :
compare, core.Comparator); | |
3142 this[_validKey] = dart.as(isValidKey !== null ? isValidKey : (v) => dart
.is(v, E), _Predicate); | |
3143 super._SplayTree(); | |
3144 } | |
3145 SplayTreeSet$from(elements, compare, isValidKey) { | |
3146 if (compare === void 0) | |
3147 compare = null; | |
3148 if (isValidKey === void 0) | |
3149 isValidKey = null; | |
3150 let result = new SplayTreeSet(compare, isValidKey); | |
3151 for (let element of elements) { | |
3152 result.add(element); | |
3153 } | |
3154 return result; | |
3155 } | |
3156 [_compare](e1, e2) { | |
3157 return dart.dinvokef(this[_comparator], e1, e2); | |
3158 } | |
3159 get iterator() { | |
3160 return new _SplayTreeKeyIterator(this); | |
3161 } | |
3162 get length() { | |
3163 return this[_count]; | |
3164 } | |
3165 get isEmpty() { | |
3166 return this[_root] === null; | |
3167 } | |
3168 get isNotEmpty() { | |
3169 return this[_root] !== null; | |
3170 } | |
3171 get first() { | |
3172 if (this[_count] === 0) | |
3173 throw _internal.IterableElementError.noElement(); | |
3174 return dart.as(this[_first].key, E); | |
3175 } | |
3176 get last() { | |
3177 if (this[_count] === 0) | |
3178 throw _internal.IterableElementError.noElement(); | |
3179 return dart.as(this[_last].key, E); | |
3180 } | |
3181 get single() { | |
3182 if (this[_count] === 0) | |
3183 throw _internal.IterableElementError.noElement(); | |
3184 if (dart.notNull(this[_count]) > 1) | |
3185 throw _internal.IterableElementError.tooMany(); | |
3186 return this[_root].key; | |
3187 } | |
3188 contains(object) { | |
3189 return dart.notNull(dart.dinvokef(this[_validKey], object)) && this[_spl
ay](dart.as(object, E)) === 0; | |
3190 } | |
3191 add(element) { | |
3192 let compare = this[_splay](element); | |
3193 if (compare === 0) | |
3194 return false; | |
3195 this[_addNewRoot](dart.as(new _SplayTreeNode(element), _SplayTreeNode$(E
)), compare); | |
3196 return true; | |
3197 } | |
3198 remove(object) { | |
3199 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
3200 return false; | |
3201 return this[_remove](dart.as(object, E)) !== null; | |
3202 } | |
3203 addAll(elements) { | |
3204 for (let element of elements) { | |
3205 let compare = this[_splay](element); | |
3206 if (compare !== 0) { | |
3207 this[_addNewRoot](dart.as(new _SplayTreeNode(element), _SplayTreeNod
e$(E)), compare); | |
3208 } | |
3209 } | |
3210 } | |
3211 removeAll(elements) { | |
3212 for (let element of elements) { | |
3213 if (dart.dinvokef(this[_validKey], element)) | |
3214 this[_remove](dart.as(element, E)); | |
3215 } | |
3216 } | |
3217 retainAll(elements) { | |
3218 let retainSet = new SplayTreeSet(dart.closureWrap(this[_comparator], "(E
, E) → int"), this[_validKey]); | |
3219 let modificationCount = this[_modificationCount]; | |
3220 for (let object of elements) { | |
3221 if (modificationCount !== this[_modificationCount]) { | |
3222 throw new core.ConcurrentModificationError(this); | |
3223 } | |
3224 if (dart.notNull(dart.dinvokef(this[_validKey], object)) && this[_spla
y](dart.as(object, E)) === 0) | |
3225 retainSet.add(this[_root].key); | |
3226 } | |
3227 if (retainSet[_count] !== this[_count]) { | |
3228 this[_root] = retainSet[_root]; | |
3229 this[_count] = retainSet[_count]; | |
3230 this[_modificationCount] = dart.notNull(this[_modificationCount]) + 1; | |
3231 } | |
3232 } | |
3233 lookup(object) { | |
3234 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
3235 return null; | |
3236 let comp = this[_splay](dart.as(object, E)); | |
3237 if (comp !== 0) | |
3238 return null; | |
3239 return this[_root].key; | |
3240 } | |
3241 intersection(other) { | |
3242 let result = new SplayTreeSet(dart.closureWrap(this[_comparator], "(E, E
) → int"), this[_validKey]); | |
3243 for (let element of this) { | |
3244 if (other.contains(element)) | |
3245 result.add(element); | |
3246 } | |
3247 return result; | |
3248 } | |
3249 difference(other) { | |
3250 let result = new SplayTreeSet(dart.closureWrap(this[_comparator], "(E, E
) → int"), this[_validKey]); | |
3251 for (let element of this) { | |
3252 if (!dart.notNull(other.contains(element))) | |
3253 result.add(element); | |
3254 } | |
3255 return result; | |
3256 } | |
3257 union(other) { | |
3258 return ((_) => { | |
3259 _.addAll(other); | |
3260 return _; | |
3261 }).bind(this)(this[_clone]()); | |
3262 } | |
3263 [_clone]() { | |
3264 let set = new SplayTreeSet(dart.closureWrap(this[_comparator], "(E, E) →
int"), this[_validKey]); | |
3265 set[_count] = this[_count]; | |
3266 set[_root] = this[_copyNode](this[_root]); | |
3267 return set; | |
3268 } | |
3269 [_copyNode](node) { | |
3270 if (node === null) | |
3271 return null; | |
3272 return ((_) => { | |
3273 _.left = this[_copyNode](node.left); | |
3274 _.right = this[_copyNode](node.right); | |
3275 return _; | |
3276 }).bind(this)(new _SplayTreeNode(node.key)); | |
3277 } | |
3278 clear() { | |
3279 this[_clear](); | |
3280 } | |
3281 toSet() { | |
3282 return this[_clone](); | |
3283 } | |
3284 toString() { | |
3285 return IterableBase.iterableToFullString(this, '{', '}'); | |
3286 } | |
3287 } | |
3288 dart.defineNamedConstructor(SplayTreeSet, 'from'); | |
3289 return SplayTreeSet; | |
3290 }); | |
3291 let SplayTreeSet = SplayTreeSet$(dart.dynamic); | |
3292 let _strings = Symbol('_strings'); | |
3293 let _nums = Symbol('_nums'); | |
3294 let _rest = Symbol('_rest'); | |
3295 let _containsKey = Symbol('_containsKey'); | |
3296 let _getBucket = Symbol('_getBucket'); | |
3297 let _findBucketIndex = Symbol('_findBucketIndex'); | |
3298 let _computeKeys = Symbol('_computeKeys'); | |
3299 let _get = Symbol('_get'); | |
3300 let _addHashTableEntry = Symbol('_addHashTableEntry'); | |
3301 let _set = Symbol('_set'); | |
3302 let _computeHashCode = Symbol('_computeHashCode'); | |
3303 let _removeHashTableEntry = Symbol('_removeHashTableEntry'); | |
3304 let _isStringKey = Symbol('_isStringKey'); | |
3305 let _isNumericKey = Symbol('_isNumericKey'); | |
3306 let _hasTableEntry = Symbol('_hasTableEntry'); | |
3307 let _getTableEntry = Symbol('_getTableEntry'); | |
3308 let _setTableEntry = Symbol('_setTableEntry'); | |
3309 let _deleteTableEntry = Symbol('_deleteTableEntry'); | |
3310 let _newHashTable = Symbol('_newHashTable'); | |
3311 let _HashMap$ = dart.generic(function(K, V) { | |
3312 class _HashMap extends core.Object { | |
3313 _HashMap() { | |
3314 this[_length] = 0; | |
3315 this[_strings] = null; | |
3316 this[_nums] = null; | |
3317 this[_rest] = null; | |
3318 this[_keys] = null; | |
3319 } | |
3320 get length() { | |
3321 return this[_length]; | |
3322 } | |
3323 get isEmpty() { | |
3324 return this[_length] === 0; | |
3325 } | |
3326 get isNotEmpty() { | |
3327 return !dart.notNull(this.isEmpty); | |
3328 } | |
3329 get keys() { | |
3330 return new HashMapKeyIterable(this); | |
3331 } | |
3332 get values() { | |
3333 return new _internal.MappedIterable(this.keys, dart.closureWrap(((each)
=> this.get(each)).bind(this), "(K) → V")); | |
3334 } | |
3335 containsKey(key) { | |
3336 if (_isStringKey(key)) { | |
3337 let strings = this[_strings]; | |
3338 return strings === null ? false : _hasTableEntry(strings, key); | |
3339 } else if (_isNumericKey(key)) { | |
3340 let nums = this[_nums]; | |
3341 return nums === null ? false : _hasTableEntry(nums, key); | |
3342 } else { | |
3343 return this[_containsKey](key); | |
3344 } | |
3345 } | |
3346 [_containsKey](key) { | |
3347 let rest = this[_rest]; | |
3348 if (rest === null) | |
3349 return false; | |
3350 let bucket = this[_getBucket](rest, key); | |
3351 return dart.notNull(this[_findBucketIndex](bucket, key)) >= 0; | |
3352 } | |
3353 containsValue(value) { | |
3354 return this[_computeKeys]().any(((each) => dart.equals(this.get(each), v
alue)).bind(this)); | |
3355 } | |
3356 addAll(other) { | |
3357 other.forEach(((key, value) => { | |
3358 this.set(key, value); | |
3359 }).bind(this)); | |
3360 } | |
3361 get(key) { | |
3362 if (_isStringKey(key)) { | |
3363 let strings = this[_strings]; | |
3364 return dart.as(strings === null ? null : _getTableEntry(strings, key),
V); | |
3365 } else if (_isNumericKey(key)) { | |
3366 let nums = this[_nums]; | |
3367 return dart.as(nums === null ? null : _getTableEntry(nums, key), V); | |
3368 } else { | |
3369 return this[_get](key); | |
3370 } | |
3371 } | |
3372 [_get](key) { | |
3373 let rest = this[_rest]; | |
3374 if (rest === null) | |
3375 return null; | |
3376 let bucket = this[_getBucket](rest, key); | |
3377 let index = this[_findBucketIndex](bucket, key); | |
3378 return dart.as(dart.notNull(index) < 0 ? null : bucket[dart.notNull(inde
x) + 1], V); | |
3379 } | |
3380 set(key, value) { | |
3381 if (_isStringKey(key)) { | |
3382 let strings = this[_strings]; | |
3383 if (strings === null) | |
3384 this[_strings] = strings = _newHashTable(); | |
3385 this[_addHashTableEntry](strings, key, value); | |
3386 } else if (_isNumericKey(key)) { | |
3387 let nums = this[_nums]; | |
3388 if (nums === null) | |
3389 this[_nums] = nums = _newHashTable(); | |
3390 this[_addHashTableEntry](nums, key, value); | |
3391 } else { | |
3392 this[_set](key, value); | |
3393 } | |
3394 } | |
3395 [_set](key, value) { | |
3396 let rest = this[_rest]; | |
3397 if (rest === null) | |
3398 this[_rest] = rest = _newHashTable(); | |
3399 let hash = this[_computeHashCode](key); | |
3400 let bucket = rest[hash]; | |
3401 if (bucket === null) { | |
3402 _setTableEntry(rest, hash, [key, value]); | |
3403 this[_length] = dart.notNull(this[_length]) + 1; | |
3404 this[_keys] = null; | |
3405 } else { | |
3406 let index = this[_findBucketIndex](bucket, key); | |
3407 if (dart.notNull(index) >= 0) { | |
3408 bucket[dart.notNull(index) + 1] = value; | |
3409 } else { | |
3410 bucket.push(key, value); | |
3411 this[_length] = dart.notNull(this[_length]) + 1; | |
3412 this[_keys] = null; | |
3413 } | |
3414 } | |
3415 } | |
3416 putIfAbsent(key, ifAbsent) { | |
3417 if (this.containsKey(key)) | |
3418 return this.get(key); | |
3419 let value = ifAbsent(); | |
3420 this.set(key, value); | |
3421 return value; | |
3422 } | |
3423 remove(key) { | |
3424 if (_isStringKey(key)) { | |
3425 return this[_removeHashTableEntry](this[_strings], key); | |
3426 } else if (_isNumericKey(key)) { | |
3427 return this[_removeHashTableEntry](this[_nums], key); | |
3428 } else { | |
3429 return this[_remove](key); | |
3430 } | |
3431 } | |
3432 [_remove](key) { | |
3433 let rest = this[_rest]; | |
3434 if (rest === null) | |
3435 return null; | |
3436 let bucket = this[_getBucket](rest, key); | |
3437 let index = this[_findBucketIndex](bucket, key); | |
3438 if (dart.notNull(index) < 0) | |
3439 return null; | |
3440 this[_length] = dart.notNull(this[_length]) - 1; | |
3441 this[_keys] = null; | |
3442 return dart.as(bucket.splice(index, 2)[1], V); | |
3443 } | |
3444 clear() { | |
3445 if (dart.notNull(this[_length]) > 0) { | |
3446 this[_strings] = this[_nums] = this[_rest] = this[_keys] = null; | |
3447 this[_length] = 0; | |
3448 } | |
3449 } | |
3450 forEach(action) { | |
3451 let keys = this[_computeKeys](); | |
3452 for (let i = 0, length = keys.length; dart.notNull(i) < dart.notNull(len
gth); i = dart.notNull(i) + 1) { | |
3453 let key = keys[i]; | |
3454 action(dart.as(key, K), this.get(key)); | |
3455 if (keys !== this[_keys]) { | |
3456 throw new core.ConcurrentModificationError(this); | |
3457 } | |
3458 } | |
3459 } | |
3460 [_computeKeys]() { | |
3461 if (this[_keys] !== null) | |
3462 return this[_keys]; | |
3463 let result = new core.List(this[_length]); | |
3464 let index = 0; | |
3465 let strings = this[_strings]; | |
3466 if (strings !== null) { | |
3467 let names = Object.getOwnPropertyNames(strings); | |
3468 let entries = names.length; | |
3469 for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notN
ull(i) + 1) { | |
3470 let key = names[i]; | |
3471 result[index] = key; | |
3472 index = dart.notNull(index) + 1; | |
3473 } | |
3474 } | |
3475 let nums = this[_nums]; | |
3476 if (nums !== null) { | |
3477 let names = Object.getOwnPropertyNames(nums); | |
3478 let entries = names.length; | |
3479 for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notN
ull(i) + 1) { | |
3480 let key = +names[i]; | |
3481 result[index] = key; | |
3482 index = dart.notNull(index) + 1; | |
3483 } | |
3484 } | |
3485 let rest = this[_rest]; | |
3486 if (rest !== null) { | |
3487 let names = Object.getOwnPropertyNames(rest); | |
3488 let entries = names.length; | |
3489 for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notN
ull(i) + 1) { | |
3490 let key = names[i]; | |
3491 let bucket = rest[key]; | |
3492 let length = bucket.length; | |
3493 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = 2) { | |
3494 let key = bucket[i]; | |
3495 result[index] = key; | |
3496 index = dart.notNull(index) + 1; | |
3497 } | |
3498 } | |
3499 } | |
3500 dart.assert(index === this[_length]); | |
3501 return this[_keys] = result; | |
3502 } | |
3503 [_addHashTableEntry](table, key, value) { | |
3504 if (!dart.notNull(_hasTableEntry(table, key))) { | |
3505 this[_length] = dart.notNull(this[_length]) + 1; | |
3506 this[_keys] = null; | |
3507 } | |
3508 _setTableEntry(table, key, value); | |
3509 } | |
3510 [_removeHashTableEntry](table, key) { | |
3511 if (dart.notNull(table !== null) && dart.notNull(_hasTableEntry(table, k
ey))) { | |
3512 let value = dart.as(_getTableEntry(table, key), V); | |
3513 _deleteTableEntry(table, key); | |
3514 this[_length] = dart.notNull(this[_length]) - 1; | |
3515 this[_keys] = null; | |
3516 return value; | |
3517 } else { | |
3518 return null; | |
3519 } | |
3520 } | |
3521 static [_isStringKey](key) { | |
3522 return dart.notNull(typeof key == string) && dart.notNull(!dart.equals(k
ey, '__proto__')); | |
3523 } | |
3524 static [_isNumericKey](key) { | |
3525 return dart.notNull(dart.is(key, core.num)) && (key & 0x3ffffff) === key
; | |
3526 } | |
3527 [_computeHashCode](key) { | |
3528 return dart.dload(key, 'hashCode') & 0x3ffffff; | |
3529 } | |
3530 static [_hasTableEntry](table, key) { | |
3531 let entry = table[key]; | |
3532 return entry !== null; | |
3533 } | |
3534 static [_getTableEntry](table, key) { | |
3535 let entry = table[key]; | |
3536 return entry === table ? null : entry; | |
3537 } | |
3538 static [_setTableEntry](table, key, value) { | |
3539 if (value === null) { | |
3540 table[key] = table; | |
3541 } else { | |
3542 table[key] = value; | |
3543 } | |
3544 } | |
3545 static [_deleteTableEntry](table, key) { | |
3546 delete table[key]; | |
3547 } | |
3548 [_getBucket](table, key) { | |
3549 let hash = this[_computeHashCode](key); | |
3550 return dart.as(table[hash], core.List); | |
3551 } | |
3552 [_findBucketIndex](bucket, key) { | |
3553 if (bucket === null) | |
3554 return -1; | |
3555 let length = bucket.length; | |
3556 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = 2) { | |
3557 if (dart.equals(bucket[i], key)) | |
3558 return i; | |
3559 } | |
3560 return -1; | |
3561 } | |
3562 static [_newHashTable]() { | |
3563 let table = Object.create(null); | |
3564 let temporaryKey = '<non-identifier-key>'; | |
3565 _setTableEntry(table, temporaryKey, table); | |
3566 _deleteTableEntry(table, temporaryKey); | |
3567 return table; | |
3568 } | |
3569 } | |
3570 return _HashMap; | |
3571 }); | |
3572 let _HashMap = _HashMap$(dart.dynamic, dart.dynamic); | |
3573 let _IdentityHashMap$ = dart.generic(function(K, V) { | |
3574 class _IdentityHashMap extends _HashMap$(K, V) { | |
3575 [_computeHashCode](key) { | |
3576 return core.identityHashCode(key) & 0x3ffffff; | |
3577 } | |
3578 [_findBucketIndex](bucket, key) { | |
3579 if (bucket === null) | |
3580 return -1; | |
3581 let length = bucket.length; | |
3582 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = 2) { | |
3583 if (core.identical(bucket[i], key)) | |
3584 return i; | |
3585 } | |
3586 return -1; | |
3587 } | |
3588 } | |
3589 return _IdentityHashMap; | |
3590 }); | |
3591 let _IdentityHashMap = _IdentityHashMap$(dart.dynamic, dart.dynamic); | |
3592 let _equals = Symbol('_equals'); | |
3593 let _hashCode = Symbol('_hashCode'); | |
3594 let _CustomHashMap$ = dart.generic(function(K, V) { | |
3595 class _CustomHashMap extends _HashMap$(K, V) { | |
3596 _CustomHashMap($_equals, $_hashCode, validKey) { | |
3597 this[_equals] = $_equals; | |
3598 this[_hashCode] = $_hashCode; | |
3599 this[_validKey] = dart.as(validKey !== null ? validKey : (v) => dart.is(
v, K), _Predicate); | |
3600 super._HashMap(); | |
3601 } | |
3602 get(key) { | |
3603 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
3604 return null; | |
3605 return super._get(key); | |
3606 } | |
3607 set(key, value) { | |
3608 super._set(key, value); | |
3609 } | |
3610 containsKey(key) { | |
3611 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
3612 return false; | |
3613 return super._containsKey(key); | |
3614 } | |
3615 remove(key) { | |
3616 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
3617 return null; | |
3618 return super._remove(key); | |
3619 } | |
3620 [_computeHashCode](key) { | |
3621 return this[_hashCode](dart.as(key, K)) & 0x3ffffff; | |
3622 } | |
3623 [_findBucketIndex](bucket, key) { | |
3624 if (bucket === null) | |
3625 return -1; | |
3626 let length = bucket.length; | |
3627 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = 2) { | |
3628 if (this[_equals](dart.as(bucket[i], K), dart.as(key, K))) | |
3629 return i; | |
3630 } | |
3631 return -1; | |
3632 } | |
3633 toString() { | |
3634 return Maps.mapToString(this); | |
3635 } | |
3636 } | |
3637 return _CustomHashMap; | |
3638 }); | |
3639 let _CustomHashMap = _CustomHashMap$(dart.dynamic, dart.dynamic); | |
3640 let HashMapKeyIterable$ = dart.generic(function(E) { | |
3641 class HashMapKeyIterable extends IterableBase$(E) { | |
3642 HashMapKeyIterable($_map) { | |
3643 this[_map] = $_map; | |
3644 super.IterableBase(); | |
3645 } | |
3646 get length() { | |
3647 return dart.as(dart.dload(this[_map], '_length'), core.int); | |
3648 } | |
3649 get isEmpty() { | |
3650 return dart.equals(dart.dload(this[_map], '_length'), 0); | |
3651 } | |
3652 get iterator() { | |
3653 return new HashMapKeyIterator(this[_map], dart.as(dart.dinvoke(this[_map
], '_computeKeys'), core.List)); | |
3654 } | |
3655 contains(element) { | |
3656 return dart.as(dart.dinvoke(this[_map], 'containsKey', element), core.bo
ol); | |
3657 } | |
3658 forEach(f) { | |
3659 let keys = dart.as(dart.dinvoke(this[_map], '_computeKeys'), core.List); | |
3660 for (let i = 0, length = keys.length; dart.notNull(i) < dart.notNull(len
gth); i = dart.notNull(i) + 1) { | |
3661 f(dart.as(keys[i], E)); | |
3662 if (keys !== dart.dload(this[_map], '_keys')) { | |
3663 throw new core.ConcurrentModificationError(this[_map]); | |
3664 } | |
3665 } | |
3666 } | |
3667 } | |
3668 return HashMapKeyIterable; | |
3669 }); | |
3670 let HashMapKeyIterable = HashMapKeyIterable$(dart.dynamic); | |
3671 let _offset = Symbol('_offset'); | |
3672 let HashMapKeyIterator$ = dart.generic(function(E) { | |
3673 class HashMapKeyIterator extends core.Object { | |
3674 HashMapKeyIterator($_map, $_keys) { | |
3675 this[_map] = $_map; | |
3676 this[_keys] = $_keys; | |
3677 this[_offset] = 0; | |
3678 this[_current] = null; | |
3679 } | |
3680 get current() { | |
3681 return this[_current]; | |
3682 } | |
3683 moveNext() { | |
3684 let keys = this[_keys]; | |
3685 let offset = this[_offset]; | |
3686 if (keys !== dart.dload(this[_map], '_keys')) { | |
3687 throw new core.ConcurrentModificationError(this[_map]); | |
3688 } else if (dart.notNull(offset) >= keys.length) { | |
3689 this[_current] = null; | |
3690 return false; | |
3691 } else { | |
3692 this[_current] = dart.as(keys[offset], E); | |
3693 this[_offset] = dart.notNull(offset) + 1; | |
3694 return true; | |
3695 } | |
3696 } | |
3697 } | |
3698 return HashMapKeyIterator; | |
3699 }); | |
3700 let HashMapKeyIterator = HashMapKeyIterator$(dart.dynamic); | |
3701 let _modifications = Symbol('_modifications'); | |
3702 let _value = Symbol('_value'); | |
3703 let _newLinkedCell = Symbol('_newLinkedCell'); | |
3704 let _unlinkCell = Symbol('_unlinkCell'); | |
3705 let _modified = Symbol('_modified'); | |
3706 let _key = Symbol('_key'); | |
3707 let _LinkedHashMap$ = dart.generic(function(K, V) { | |
3708 class _LinkedHashMap extends core.Object { | |
3709 _LinkedHashMap() { | |
3710 this[_length] = 0; | |
3711 this[_strings] = null; | |
3712 this[_nums] = null; | |
3713 this[_rest] = null; | |
3714 this[_first] = null; | |
3715 this[_last] = null; | |
3716 this[_modifications] = 0; | |
3717 } | |
3718 get length() { | |
3719 return this[_length]; | |
3720 } | |
3721 get isEmpty() { | |
3722 return this[_length] === 0; | |
3723 } | |
3724 get isNotEmpty() { | |
3725 return !dart.notNull(this.isEmpty); | |
3726 } | |
3727 get keys() { | |
3728 return new LinkedHashMapKeyIterable(this); | |
3729 } | |
3730 get values() { | |
3731 return new _internal.MappedIterable(this.keys, dart.closureWrap(((each)
=> this.get(each)).bind(this), "(K) → V")); | |
3732 } | |
3733 containsKey(key) { | |
3734 if (_isStringKey(key)) { | |
3735 let strings = this[_strings]; | |
3736 if (strings === null) | |
3737 return false; | |
3738 let cell = dart.as(_getTableEntry(strings, key), LinkedHashMapCell); | |
3739 return cell !== null; | |
3740 } else if (_isNumericKey(key)) { | |
3741 let nums = this[_nums]; | |
3742 if (nums === null) | |
3743 return false; | |
3744 let cell = dart.as(_getTableEntry(nums, key), LinkedHashMapCell); | |
3745 return cell !== null; | |
3746 } else { | |
3747 return this[_containsKey](key); | |
3748 } | |
3749 } | |
3750 [_containsKey](key) { | |
3751 let rest = this[_rest]; | |
3752 if (rest === null) | |
3753 return false; | |
3754 let bucket = this[_getBucket](rest, key); | |
3755 return dart.notNull(this[_findBucketIndex](bucket, key)) >= 0; | |
3756 } | |
3757 containsValue(value) { | |
3758 return this.keys.any(dart.closureWrap(((each) => dart.equals(this.get(ea
ch), value)).bind(this), "(K) → bool")); | |
3759 } | |
3760 addAll(other) { | |
3761 other.forEach(((key, value) => { | |
3762 this.set(key, value); | |
3763 }).bind(this)); | |
3764 } | |
3765 get(key) { | |
3766 if (_isStringKey(key)) { | |
3767 let strings = this[_strings]; | |
3768 if (strings === null) | |
3769 return null; | |
3770 let cell = dart.as(_getTableEntry(strings, key), LinkedHashMapCell); | |
3771 return dart.as(cell === null ? null : cell[_value], V); | |
3772 } else if (_isNumericKey(key)) { | |
3773 let nums = this[_nums]; | |
3774 if (nums === null) | |
3775 return null; | |
3776 let cell = dart.as(_getTableEntry(nums, key), LinkedHashMapCell); | |
3777 return dart.as(cell === null ? null : cell[_value], V); | |
3778 } else { | |
3779 return this[_get](key); | |
3780 } | |
3781 } | |
3782 [_get](key) { | |
3783 let rest = this[_rest]; | |
3784 if (rest === null) | |
3785 return null; | |
3786 let bucket = this[_getBucket](rest, key); | |
3787 let index = this[_findBucketIndex](bucket, key); | |
3788 if (dart.notNull(index) < 0) | |
3789 return null; | |
3790 let cell = dart.as(bucket[index], LinkedHashMapCell); | |
3791 return dart.as(cell[_value], V); | |
3792 } | |
3793 set(key, value) { | |
3794 if (_isStringKey(key)) { | |
3795 let strings = this[_strings]; | |
3796 if (strings === null) | |
3797 this[_strings] = strings = _newHashTable(); | |
3798 this[_addHashTableEntry](strings, key, value); | |
3799 } else if (_isNumericKey(key)) { | |
3800 let nums = this[_nums]; | |
3801 if (nums === null) | |
3802 this[_nums] = nums = _newHashTable(); | |
3803 this[_addHashTableEntry](nums, key, value); | |
3804 } else { | |
3805 this[_set](key, value); | |
3806 } | |
3807 } | |
3808 [_set](key, value) { | |
3809 let rest = this[_rest]; | |
3810 if (rest === null) | |
3811 this[_rest] = rest = _newHashTable(); | |
3812 let hash = this[_computeHashCode](key); | |
3813 let bucket = rest[hash]; | |
3814 if (bucket === null) { | |
3815 let cell = this[_newLinkedCell](key, value); | |
3816 _setTableEntry(rest, hash, [cell]); | |
3817 } else { | |
3818 let index = this[_findBucketIndex](bucket, key); | |
3819 if (dart.notNull(index) >= 0) { | |
3820 let cell = dart.as(bucket[index], LinkedHashMapCell); | |
3821 cell[_value] = value; | |
3822 } else { | |
3823 let cell = this[_newLinkedCell](key, value); | |
3824 bucket.push(cell); | |
3825 } | |
3826 } | |
3827 } | |
3828 putIfAbsent(key, ifAbsent) { | |
3829 if (this.containsKey(key)) | |
3830 return this.get(key); | |
3831 let value = ifAbsent(); | |
3832 this.set(key, value); | |
3833 return value; | |
3834 } | |
3835 remove(key) { | |
3836 if (_isStringKey(key)) { | |
3837 return this[_removeHashTableEntry](this[_strings], key); | |
3838 } else if (_isNumericKey(key)) { | |
3839 return this[_removeHashTableEntry](this[_nums], key); | |
3840 } else { | |
3841 return this[_remove](key); | |
3842 } | |
3843 } | |
3844 [_remove](key) { | |
3845 let rest = this[_rest]; | |
3846 if (rest === null) | |
3847 return null; | |
3848 let bucket = this[_getBucket](rest, key); | |
3849 let index = this[_findBucketIndex](bucket, key); | |
3850 if (dart.notNull(index) < 0) | |
3851 return null; | |
3852 let cell = dart.as(bucket.splice(index, 1)[0], LinkedHashMapCell); | |
3853 this[_unlinkCell](cell); | |
3854 return dart.as(cell[_value], V); | |
3855 } | |
3856 clear() { | |
3857 if (dart.notNull(this[_length]) > 0) { | |
3858 this[_strings] = this[_nums] = this[_rest] = this[_first] = this[_last
] = null; | |
3859 this[_length] = 0; | |
3860 this[_modified](); | |
3861 } | |
3862 } | |
3863 forEach(action) { | |
3864 let cell = this[_first]; | |
3865 let modifications = this[_modifications]; | |
3866 while (cell !== null) { | |
3867 action(dart.as(cell[_key], K), dart.as(cell[_value], V)); | |
3868 if (modifications !== this[_modifications]) { | |
3869 throw new core.ConcurrentModificationError(this); | |
3870 } | |
3871 cell = cell[_next]; | |
3872 } | |
3873 } | |
3874 [_addHashTableEntry](table, key, value) { | |
3875 let cell = dart.as(_getTableEntry(table, key), LinkedHashMapCell); | |
3876 if (cell === null) { | |
3877 _setTableEntry(table, key, this[_newLinkedCell](key, value)); | |
3878 } else { | |
3879 cell[_value] = value; | |
3880 } | |
3881 } | |
3882 [_removeHashTableEntry](table, key) { | |
3883 if (table === null) | |
3884 return null; | |
3885 let cell = dart.as(_getTableEntry(table, key), LinkedHashMapCell); | |
3886 if (cell === null) | |
3887 return null; | |
3888 this[_unlinkCell](cell); | |
3889 _deleteTableEntry(table, key); | |
3890 return dart.as(cell[_value], V); | |
3891 } | |
3892 [_modified]() { | |
3893 this[_modifications] = dart.notNull(this[_modifications]) + 1 & 67108863
; | |
3894 } | |
3895 [_newLinkedCell](key, value) { | |
3896 let cell = new LinkedHashMapCell(key, value); | |
3897 if (this[_first] === null) { | |
3898 this[_first] = this[_last] = cell; | |
3899 } else { | |
3900 let last = this[_last]; | |
3901 cell[_previous] = last; | |
3902 this[_last] = last[_next] = cell; | |
3903 } | |
3904 this[_length] = dart.notNull(this[_length]) + 1; | |
3905 this[_modified](); | |
3906 return cell; | |
3907 } | |
3908 [_unlinkCell](cell) { | |
3909 let previous = cell[_previous]; | |
3910 let next = cell[_next]; | |
3911 if (previous === null) { | |
3912 dart.assert(dart.equals(cell, this[_first])); | |
3913 this[_first] = next; | |
3914 } else { | |
3915 previous[_next] = next; | |
3916 } | |
3917 if (next === null) { | |
3918 dart.assert(dart.equals(cell, this[_last])); | |
3919 this[_last] = previous; | |
3920 } else { | |
3921 next[_previous] = previous; | |
3922 } | |
3923 this[_length] = dart.notNull(this[_length]) - 1; | |
3924 this[_modified](); | |
3925 } | |
3926 static [_isStringKey](key) { | |
3927 return dart.notNull(typeof key == string) && dart.notNull(!dart.equals(k
ey, '__proto__')); | |
3928 } | |
3929 static [_isNumericKey](key) { | |
3930 return dart.notNull(dart.is(key, core.num)) && (key & 0x3ffffff) === key
; | |
3931 } | |
3932 [_computeHashCode](key) { | |
3933 return dart.dload(key, 'hashCode') & 0x3ffffff; | |
3934 } | |
3935 static [_getTableEntry](table, key) { | |
3936 return table[key]; | |
3937 } | |
3938 static [_setTableEntry](table, key, value) { | |
3939 dart.assert(value !== null); | |
3940 table[key] = value; | |
3941 } | |
3942 static [_deleteTableEntry](table, key) { | |
3943 delete table[key]; | |
3944 } | |
3945 [_getBucket](table, key) { | |
3946 let hash = this[_computeHashCode](key); | |
3947 return dart.as(table[hash], core.List); | |
3948 } | |
3949 [_findBucketIndex](bucket, key) { | |
3950 if (bucket === null) | |
3951 return -1; | |
3952 let length = bucket.length; | |
3953 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
3954 let cell = dart.as(bucket[i], LinkedHashMapCell); | |
3955 if (dart.equals(cell[_key], key)) | |
3956 return i; | |
3957 } | |
3958 return -1; | |
3959 } | |
3960 static [_newHashTable]() { | |
3961 let table = Object.create(null); | |
3962 let temporaryKey = '<non-identifier-key>'; | |
3963 _setTableEntry(table, temporaryKey, table); | |
3964 _deleteTableEntry(table, temporaryKey); | |
3965 return table; | |
3966 } | |
3967 toString() { | |
3968 return Maps.mapToString(this); | |
3969 } | |
3970 } | |
3971 return _LinkedHashMap; | |
3972 }); | |
3973 let _LinkedHashMap = _LinkedHashMap$(dart.dynamic, dart.dynamic); | |
3974 let _LinkedIdentityHashMap$ = dart.generic(function(K, V) { | |
3975 class _LinkedIdentityHashMap extends _LinkedHashMap$(K, V) { | |
3976 [_computeHashCode](key) { | |
3977 return core.identityHashCode(key) & 0x3ffffff; | |
3978 } | |
3979 [_findBucketIndex](bucket, key) { | |
3980 if (bucket === null) | |
3981 return -1; | |
3982 let length = bucket.length; | |
3983 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
3984 let cell = dart.as(bucket[i], LinkedHashMapCell); | |
3985 if (core.identical(cell[_key], key)) | |
3986 return i; | |
3987 } | |
3988 return -1; | |
3989 } | |
3990 } | |
3991 return _LinkedIdentityHashMap; | |
3992 }); | |
3993 let _LinkedIdentityHashMap = _LinkedIdentityHashMap$(dart.dynamic, dart.dynami
c); | |
3994 let _LinkedCustomHashMap$ = dart.generic(function(K, V) { | |
3995 class _LinkedCustomHashMap extends _LinkedHashMap$(K, V) { | |
3996 _LinkedCustomHashMap($_equals, $_hashCode, validKey) { | |
3997 this[_equals] = $_equals; | |
3998 this[_hashCode] = $_hashCode; | |
3999 this[_validKey] = dart.as(validKey !== null ? validKey : (v) => dart.is(
v, K), _Predicate); | |
4000 super._LinkedHashMap(); | |
4001 } | |
4002 get(key) { | |
4003 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
4004 return null; | |
4005 return super._get(key); | |
4006 } | |
4007 set(key, value) { | |
4008 super._set(key, value); | |
4009 } | |
4010 containsKey(key) { | |
4011 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
4012 return false; | |
4013 return super._containsKey(key); | |
4014 } | |
4015 remove(key) { | |
4016 if (!dart.notNull(dart.dinvokef(this[_validKey], key))) | |
4017 return null; | |
4018 return super._remove(key); | |
4019 } | |
4020 [_computeHashCode](key) { | |
4021 return this[_hashCode](dart.as(key, K)) & 0x3ffffff; | |
4022 } | |
4023 [_findBucketIndex](bucket, key) { | |
4024 if (bucket === null) | |
4025 return -1; | |
4026 let length = bucket.length; | |
4027 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4028 let cell = dart.as(bucket[i], LinkedHashMapCell); | |
4029 if (this[_equals](dart.as(cell[_key], K), dart.as(key, K))) | |
4030 return i; | |
4031 } | |
4032 return -1; | |
4033 } | |
4034 } | |
4035 return _LinkedCustomHashMap; | |
4036 }); | |
4037 let _LinkedCustomHashMap = _LinkedCustomHashMap$(dart.dynamic, dart.dynamic); | |
4038 class LinkedHashMapCell extends core.Object { | |
4039 LinkedHashMapCell($_key, $_value) { | |
4040 this[_key] = $_key; | |
4041 this[_value] = $_value; | |
4042 this[_next] = null; | |
4043 this[_previous] = null; | |
4044 } | |
4045 } | |
4046 let LinkedHashMapKeyIterable$ = dart.generic(function(E) { | |
4047 class LinkedHashMapKeyIterable extends IterableBase$(E) { | |
4048 LinkedHashMapKeyIterable($_map) { | |
4049 this[_map] = $_map; | |
4050 super.IterableBase(); | |
4051 } | |
4052 get length() { | |
4053 return dart.as(dart.dload(this[_map], '_length'), core.int); | |
4054 } | |
4055 get isEmpty() { | |
4056 return dart.equals(dart.dload(this[_map], '_length'), 0); | |
4057 } | |
4058 get iterator() { | |
4059 return new LinkedHashMapKeyIterator(this[_map], dart.as(dart.dload(this[
_map], '_modifications'), core.int)); | |
4060 } | |
4061 contains(element) { | |
4062 return dart.as(dart.dinvoke(this[_map], 'containsKey', element), core.bo
ol); | |
4063 } | |
4064 forEach(f) { | |
4065 let cell = dart.as(dart.dload(this[_map], '_first'), LinkedHashMapCell); | |
4066 let modifications = dart.as(dart.dload(this[_map], '_modifications'), co
re.int); | |
4067 while (cell !== null) { | |
4068 f(dart.as(cell[_key], E)); | |
4069 if (modifications !== dart.dload(this[_map], '_modifications')) { | |
4070 throw new core.ConcurrentModificationError(this[_map]); | |
4071 } | |
4072 cell = cell[_next]; | |
4073 } | |
4074 } | |
4075 } | |
4076 return LinkedHashMapKeyIterable; | |
4077 }); | |
4078 let LinkedHashMapKeyIterable = LinkedHashMapKeyIterable$(dart.dynamic); | |
4079 let _cell = Symbol('_cell'); | |
4080 let LinkedHashMapKeyIterator$ = dart.generic(function(E) { | |
4081 class LinkedHashMapKeyIterator extends core.Object { | |
4082 LinkedHashMapKeyIterator($_map, $_modifications) { | |
4083 this[_map] = $_map; | |
4084 this[_modifications] = $_modifications; | |
4085 this[_cell] = null; | |
4086 this[_current] = null; | |
4087 this[_cell] = dart.as(dart.dload(this[_map], '_first'), LinkedHashMapCel
l); | |
4088 } | |
4089 get current() { | |
4090 return this[_current]; | |
4091 } | |
4092 moveNext() { | |
4093 if (this[_modifications] !== dart.dload(this[_map], '_modifications')) { | |
4094 throw new core.ConcurrentModificationError(this[_map]); | |
4095 } else if (this[_cell] === null) { | |
4096 this[_current] = null; | |
4097 return false; | |
4098 } else { | |
4099 this[_current] = dart.as(this[_cell][_key], E); | |
4100 this[_cell] = this[_cell][_next]; | |
4101 return true; | |
4102 } | |
4103 } | |
4104 } | |
4105 return LinkedHashMapKeyIterator; | |
4106 }); | |
4107 let LinkedHashMapKeyIterator = LinkedHashMapKeyIterator$(dart.dynamic); | |
4108 let _elements = Symbol('_elements'); | |
4109 let _computeElements = Symbol('_computeElements'); | |
4110 let _contains = Symbol('_contains'); | |
4111 let _lookup = Symbol('_lookup'); | |
4112 let _isStringElement = Symbol('_isStringElement'); | |
4113 let _isNumericElement = Symbol('_isNumericElement'); | |
4114 let _HashSet$ = dart.generic(function(E) { | |
4115 class _HashSet extends _HashSetBase$(E) { | |
4116 _HashSet() { | |
4117 this[_length] = 0; | |
4118 this[_strings] = null; | |
4119 this[_nums] = null; | |
4120 this[_rest] = null; | |
4121 this[_elements] = null; | |
4122 super._HashSetBase(); | |
4123 } | |
4124 [_newSet]() { | |
4125 return new _HashSet(); | |
4126 } | |
4127 get iterator() { | |
4128 return new HashSetIterator(this, this[_computeElements]()); | |
4129 } | |
4130 get length() { | |
4131 return this[_length]; | |
4132 } | |
4133 get isEmpty() { | |
4134 return this[_length] === 0; | |
4135 } | |
4136 get isNotEmpty() { | |
4137 return !dart.notNull(this.isEmpty); | |
4138 } | |
4139 contains(object) { | |
4140 if (_isStringElement(object)) { | |
4141 let strings = this[_strings]; | |
4142 return strings === null ? false : _hasTableEntry(strings, object); | |
4143 } else if (_isNumericElement(object)) { | |
4144 let nums = this[_nums]; | |
4145 return nums === null ? false : _hasTableEntry(nums, object); | |
4146 } else { | |
4147 return this[_contains](object); | |
4148 } | |
4149 } | |
4150 [_contains](object) { | |
4151 let rest = this[_rest]; | |
4152 if (rest === null) | |
4153 return false; | |
4154 let bucket = this[_getBucket](rest, object); | |
4155 return dart.notNull(this[_findBucketIndex](bucket, object)) >= 0; | |
4156 } | |
4157 lookup(object) { | |
4158 if (dart.notNull(_isStringElement(object)) || dart.notNull(_isNumericEle
ment(object))) { | |
4159 return dart.as(this.contains(object) ? object : null, E); | |
4160 } | |
4161 return this[_lookup](object); | |
4162 } | |
4163 [_lookup](object) { | |
4164 let rest = this[_rest]; | |
4165 if (rest === null) | |
4166 return null; | |
4167 let bucket = this[_getBucket](rest, object); | |
4168 let index = this[_findBucketIndex](bucket, object); | |
4169 if (dart.notNull(index) < 0) | |
4170 return null; | |
4171 return dart.as(bucket.get(index), E); | |
4172 } | |
4173 add(element) { | |
4174 if (_isStringElement(element)) { | |
4175 let strings = this[_strings]; | |
4176 if (strings === null) | |
4177 this[_strings] = strings = _newHashTable(); | |
4178 return this[_addHashTableEntry](strings, element); | |
4179 } else if (_isNumericElement(element)) { | |
4180 let nums = this[_nums]; | |
4181 if (nums === null) | |
4182 this[_nums] = nums = _newHashTable(); | |
4183 return this[_addHashTableEntry](nums, element); | |
4184 } else { | |
4185 return this[_add](element); | |
4186 } | |
4187 } | |
4188 [_add](element) { | |
4189 let rest = this[_rest]; | |
4190 if (rest === null) | |
4191 this[_rest] = rest = _newHashTable(); | |
4192 let hash = this[_computeHashCode](element); | |
4193 let bucket = rest[hash]; | |
4194 if (bucket === null) { | |
4195 _setTableEntry(rest, hash, [element]); | |
4196 } else { | |
4197 let index = this[_findBucketIndex](bucket, element); | |
4198 if (dart.notNull(index) >= 0) | |
4199 return false; | |
4200 bucket.push(element); | |
4201 } | |
4202 this[_length] = dart.notNull(this[_length]) + 1; | |
4203 this[_elements] = null; | |
4204 return true; | |
4205 } | |
4206 addAll(objects) { | |
4207 for (let each of objects) { | |
4208 this.add(each); | |
4209 } | |
4210 } | |
4211 remove(object) { | |
4212 if (_isStringElement(object)) { | |
4213 return this[_removeHashTableEntry](this[_strings], object); | |
4214 } else if (_isNumericElement(object)) { | |
4215 return this[_removeHashTableEntry](this[_nums], object); | |
4216 } else { | |
4217 return this[_remove](object); | |
4218 } | |
4219 } | |
4220 [_remove](object) { | |
4221 let rest = this[_rest]; | |
4222 if (rest === null) | |
4223 return false; | |
4224 let bucket = this[_getBucket](rest, object); | |
4225 let index = this[_findBucketIndex](bucket, object); | |
4226 if (dart.notNull(index) < 0) | |
4227 return false; | |
4228 this[_length] = dart.notNull(this[_length]) - 1; | |
4229 this[_elements] = null; | |
4230 bucket.splice(index, 1); | |
4231 return true; | |
4232 } | |
4233 clear() { | |
4234 if (dart.notNull(this[_length]) > 0) { | |
4235 this[_strings] = this[_nums] = this[_rest] = this[_elements] = null; | |
4236 this[_length] = 0; | |
4237 } | |
4238 } | |
4239 [_computeElements]() { | |
4240 if (this[_elements] !== null) | |
4241 return this[_elements]; | |
4242 let result = new core.List(this[_length]); | |
4243 let index = 0; | |
4244 let strings = this[_strings]; | |
4245 if (strings !== null) { | |
4246 let names = Object.getOwnPropertyNames(strings); | |
4247 let entries = names.length; | |
4248 for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notN
ull(i) + 1) { | |
4249 let element = names[i]; | |
4250 result[index] = element; | |
4251 index = dart.notNull(index) + 1; | |
4252 } | |
4253 } | |
4254 let nums = this[_nums]; | |
4255 if (nums !== null) { | |
4256 let names = Object.getOwnPropertyNames(nums); | |
4257 let entries = names.length; | |
4258 for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notN
ull(i) + 1) { | |
4259 let element = +names[i]; | |
4260 result[index] = element; | |
4261 index = dart.notNull(index) + 1; | |
4262 } | |
4263 } | |
4264 let rest = this[_rest]; | |
4265 if (rest !== null) { | |
4266 let names = Object.getOwnPropertyNames(rest); | |
4267 let entries = names.length; | |
4268 for (let i = 0; dart.notNull(i) < dart.notNull(entries); i = dart.notN
ull(i) + 1) { | |
4269 let entry = names[i]; | |
4270 let bucket = rest[entry]; | |
4271 let length = bucket.length; | |
4272 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.not
Null(i) + 1) { | |
4273 result[index] = bucket[i]; | |
4274 index = dart.notNull(index) + 1; | |
4275 } | |
4276 } | |
4277 } | |
4278 dart.assert(index === this[_length]); | |
4279 return this[_elements] = result; | |
4280 } | |
4281 [_addHashTableEntry](table, element) { | |
4282 if (_hasTableEntry(table, element)) | |
4283 return false; | |
4284 _setTableEntry(table, element, 0); | |
4285 this[_length] = dart.notNull(this[_length]) + 1; | |
4286 this[_elements] = null; | |
4287 return true; | |
4288 } | |
4289 [_removeHashTableEntry](table, element) { | |
4290 if (dart.notNull(table !== null) && dart.notNull(_hasTableEntry(table, e
lement))) { | |
4291 _deleteTableEntry(table, element); | |
4292 this[_length] = dart.notNull(this[_length]) - 1; | |
4293 this[_elements] = null; | |
4294 return true; | |
4295 } else { | |
4296 return false; | |
4297 } | |
4298 } | |
4299 static [_isStringElement](element) { | |
4300 return dart.notNull(typeof element == string) && dart.notNull(!dart.equa
ls(element, '__proto__')); | |
4301 } | |
4302 static [_isNumericElement](element) { | |
4303 return dart.notNull(dart.is(element, core.num)) && (element & 0x3ffffff)
=== element; | |
4304 } | |
4305 [_computeHashCode](element) { | |
4306 return dart.dload(element, 'hashCode') & 0x3ffffff; | |
4307 } | |
4308 static [_hasTableEntry](table, key) { | |
4309 let entry = table[key]; | |
4310 return entry !== null; | |
4311 } | |
4312 static [_setTableEntry](table, key, value) { | |
4313 dart.assert(value !== null); | |
4314 table[key] = value; | |
4315 } | |
4316 static [_deleteTableEntry](table, key) { | |
4317 delete table[key]; | |
4318 } | |
4319 [_getBucket](table, element) { | |
4320 let hash = this[_computeHashCode](element); | |
4321 return dart.as(table[hash], core.List); | |
4322 } | |
4323 [_findBucketIndex](bucket, element) { | |
4324 if (bucket === null) | |
4325 return -1; | |
4326 let length = bucket.length; | |
4327 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4328 if (dart.equals(bucket[i], element)) | |
4329 return i; | |
4330 } | |
4331 return -1; | |
4332 } | |
4333 static [_newHashTable]() { | |
4334 let table = Object.create(null); | |
4335 let temporaryKey = '<non-identifier-key>'; | |
4336 _setTableEntry(table, temporaryKey, table); | |
4337 _deleteTableEntry(table, temporaryKey); | |
4338 return table; | |
4339 } | |
4340 } | |
4341 return _HashSet; | |
4342 }); | |
4343 let _HashSet = _HashSet$(dart.dynamic); | |
4344 let _IdentityHashSet$ = dart.generic(function(E) { | |
4345 class _IdentityHashSet extends _HashSet$(E) { | |
4346 [_newSet]() { | |
4347 return new _IdentityHashSet(); | |
4348 } | |
4349 [_computeHashCode](key) { | |
4350 return core.identityHashCode(key) & 0x3ffffff; | |
4351 } | |
4352 [_findBucketIndex](bucket, element) { | |
4353 if (bucket === null) | |
4354 return -1; | |
4355 let length = bucket.length; | |
4356 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4357 if (core.identical(bucket[i], element)) | |
4358 return i; | |
4359 } | |
4360 return -1; | |
4361 } | |
4362 } | |
4363 return _IdentityHashSet; | |
4364 }); | |
4365 let _IdentityHashSet = _IdentityHashSet$(dart.dynamic); | |
4366 let _equality = Symbol('_equality'); | |
4367 let _hasher = Symbol('_hasher'); | |
4368 let _CustomHashSet$ = dart.generic(function(E) { | |
4369 class _CustomHashSet extends _HashSet$(E) { | |
4370 _CustomHashSet($_equality, $_hasher, validKey) { | |
4371 this[_equality] = $_equality; | |
4372 this[_hasher] = $_hasher; | |
4373 this[_validKey] = dart.as(validKey !== null ? validKey : (x) => dart.is(
x, E), _Predicate); | |
4374 super._HashSet(); | |
4375 } | |
4376 [_newSet]() { | |
4377 return new _CustomHashSet(this[_equality], this[_hasher], this[_validKey
]); | |
4378 } | |
4379 [_findBucketIndex](bucket, element) { | |
4380 if (bucket === null) | |
4381 return -1; | |
4382 let length = bucket.length; | |
4383 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4384 if (this[_equality](dart.as(bucket[i], E), dart.as(element, E))) | |
4385 return i; | |
4386 } | |
4387 return -1; | |
4388 } | |
4389 [_computeHashCode](element) { | |
4390 return this[_hasher](dart.as(element, E)) & 0x3ffffff; | |
4391 } | |
4392 add(object) { | |
4393 return super._add(object); | |
4394 } | |
4395 contains(object) { | |
4396 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
4397 return false; | |
4398 return super._contains(object); | |
4399 } | |
4400 lookup(object) { | |
4401 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
4402 return null; | |
4403 return super._lookup(object); | |
4404 } | |
4405 remove(object) { | |
4406 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
4407 return false; | |
4408 return super._remove(object); | |
4409 } | |
4410 } | |
4411 return _CustomHashSet; | |
4412 }); | |
4413 let _CustomHashSet = _CustomHashSet$(dart.dynamic); | |
4414 let HashSetIterator$ = dart.generic(function(E) { | |
4415 class HashSetIterator extends core.Object { | |
4416 HashSetIterator($_set, $_elements) { | |
4417 this[_set] = $_set; | |
4418 this[_elements] = $_elements; | |
4419 this[_offset] = 0; | |
4420 this[_current] = null; | |
4421 } | |
4422 get current() { | |
4423 return this[_current]; | |
4424 } | |
4425 moveNext() { | |
4426 let elements = this[_elements]; | |
4427 let offset = this[_offset]; | |
4428 if (elements !== dart.dload(this[_set], '_elements')) { | |
4429 throw new core.ConcurrentModificationError(this[_set]); | |
4430 } else if (dart.notNull(offset) >= elements.length) { | |
4431 this[_current] = null; | |
4432 return false; | |
4433 } else { | |
4434 this[_current] = dart.as(elements[offset], E); | |
4435 this[_offset] = dart.notNull(offset) + 1; | |
4436 return true; | |
4437 } | |
4438 } | |
4439 } | |
4440 return HashSetIterator; | |
4441 }); | |
4442 let HashSetIterator = HashSetIterator$(dart.dynamic); | |
4443 let _unsupported = Symbol('_unsupported'); | |
4444 let _LinkedHashSet$ = dart.generic(function(E) { | |
4445 class _LinkedHashSet extends _HashSetBase$(E) { | |
4446 _LinkedHashSet() { | |
4447 this[_length] = 0; | |
4448 this[_strings] = null; | |
4449 this[_nums] = null; | |
4450 this[_rest] = null; | |
4451 this[_first] = null; | |
4452 this[_last] = null; | |
4453 this[_modifications] = 0; | |
4454 super._HashSetBase(); | |
4455 } | |
4456 [_newSet]() { | |
4457 return new _LinkedHashSet(); | |
4458 } | |
4459 [_unsupported](operation) { | |
4460 throw `LinkedHashSet: unsupported ${operation}`; | |
4461 } | |
4462 get iterator() { | |
4463 return dart.as(new LinkedHashSetIterator(this, this[_modifications]), co
re.Iterator$(E)); | |
4464 } | |
4465 get length() { | |
4466 return this[_length]; | |
4467 } | |
4468 get isEmpty() { | |
4469 return this[_length] === 0; | |
4470 } | |
4471 get isNotEmpty() { | |
4472 return !dart.notNull(this.isEmpty); | |
4473 } | |
4474 contains(object) { | |
4475 if (_isStringElement(object)) { | |
4476 let strings = this[_strings]; | |
4477 if (strings === null) | |
4478 return false; | |
4479 let cell = dart.as(_getTableEntry(strings, object), LinkedHashSetCell)
; | |
4480 return cell !== null; | |
4481 } else if (_isNumericElement(object)) { | |
4482 let nums = this[_nums]; | |
4483 if (nums === null) | |
4484 return false; | |
4485 let cell = dart.as(_getTableEntry(nums, object), LinkedHashSetCell); | |
4486 return cell !== null; | |
4487 } else { | |
4488 return this[_contains](object); | |
4489 } | |
4490 } | |
4491 [_contains](object) { | |
4492 let rest = this[_rest]; | |
4493 if (rest === null) | |
4494 return false; | |
4495 let bucket = this[_getBucket](rest, object); | |
4496 return dart.notNull(this[_findBucketIndex](bucket, object)) >= 0; | |
4497 } | |
4498 lookup(object) { | |
4499 if (dart.notNull(_isStringElement(object)) || dart.notNull(_isNumericEle
ment(object))) { | |
4500 return dart.as(this.contains(object) ? object : null, E); | |
4501 } else { | |
4502 return this[_lookup](object); | |
4503 } | |
4504 } | |
4505 [_lookup](object) { | |
4506 let rest = this[_rest]; | |
4507 if (rest === null) | |
4508 return null; | |
4509 let bucket = this[_getBucket](rest, object); | |
4510 let index = this[_findBucketIndex](bucket, object); | |
4511 if (dart.notNull(index) < 0) | |
4512 return null; | |
4513 return dart.as(dart.dload(bucket.get(index), '_element'), E); | |
4514 } | |
4515 forEach(action) { | |
4516 let cell = this[_first]; | |
4517 let modifications = this[_modifications]; | |
4518 while (cell !== null) { | |
4519 action(dart.as(cell[_element], E)); | |
4520 if (modifications !== this[_modifications]) { | |
4521 throw new core.ConcurrentModificationError(this); | |
4522 } | |
4523 cell = cell[_next]; | |
4524 } | |
4525 } | |
4526 get first() { | |
4527 if (this[_first] === null) | |
4528 throw new core.StateError("No elements"); | |
4529 return dart.as(this[_first][_element], E); | |
4530 } | |
4531 get last() { | |
4532 if (this[_last] === null) | |
4533 throw new core.StateError("No elements"); | |
4534 return dart.as(this[_last][_element], E); | |
4535 } | |
4536 add(element) { | |
4537 if (_isStringElement(element)) { | |
4538 let strings = this[_strings]; | |
4539 if (strings === null) | |
4540 this[_strings] = strings = _newHashTable(); | |
4541 return this[_addHashTableEntry](strings, element); | |
4542 } else if (_isNumericElement(element)) { | |
4543 let nums = this[_nums]; | |
4544 if (nums === null) | |
4545 this[_nums] = nums = _newHashTable(); | |
4546 return this[_addHashTableEntry](nums, element); | |
4547 } else { | |
4548 return this[_add](element); | |
4549 } | |
4550 } | |
4551 [_add](element) { | |
4552 let rest = this[_rest]; | |
4553 if (rest === null) | |
4554 this[_rest] = rest = _newHashTable(); | |
4555 let hash = this[_computeHashCode](element); | |
4556 let bucket = rest[hash]; | |
4557 if (bucket === null) { | |
4558 let cell = this[_newLinkedCell](element); | |
4559 _setTableEntry(rest, hash, [cell]); | |
4560 } else { | |
4561 let index = this[_findBucketIndex](bucket, element); | |
4562 if (dart.notNull(index) >= 0) | |
4563 return false; | |
4564 let cell = this[_newLinkedCell](element); | |
4565 bucket.push(cell); | |
4566 } | |
4567 return true; | |
4568 } | |
4569 remove(object) { | |
4570 if (_isStringElement(object)) { | |
4571 return this[_removeHashTableEntry](this[_strings], object); | |
4572 } else if (_isNumericElement(object)) { | |
4573 return this[_removeHashTableEntry](this[_nums], object); | |
4574 } else { | |
4575 return this[_remove](object); | |
4576 } | |
4577 } | |
4578 [_remove](object) { | |
4579 let rest = this[_rest]; | |
4580 if (rest === null) | |
4581 return false; | |
4582 let bucket = this[_getBucket](rest, object); | |
4583 let index = this[_findBucketIndex](bucket, object); | |
4584 if (dart.notNull(index) < 0) | |
4585 return false; | |
4586 let cell = dart.as(bucket.splice(index, 1)[0], LinkedHashSetCell); | |
4587 this[_unlinkCell](cell); | |
4588 return true; | |
4589 } | |
4590 removeWhere(test) { | |
4591 this[_filterWhere](test, true); | |
4592 } | |
4593 retainWhere(test) { | |
4594 this[_filterWhere](test, false); | |
4595 } | |
4596 [_filterWhere](test, removeMatching) { | |
4597 let cell = this[_first]; | |
4598 while (cell !== null) { | |
4599 let element = dart.as(cell[_element], E); | |
4600 let next = cell[_next]; | |
4601 let modifications = this[_modifications]; | |
4602 let shouldRemove = removeMatching === test(element); | |
4603 if (modifications !== this[_modifications]) { | |
4604 throw new core.ConcurrentModificationError(this); | |
4605 } | |
4606 if (shouldRemove) | |
4607 this.remove(element); | |
4608 cell = next; | |
4609 } | |
4610 } | |
4611 clear() { | |
4612 if (dart.notNull(this[_length]) > 0) { | |
4613 this[_strings] = this[_nums] = this[_rest] = this[_first] = this[_last
] = null; | |
4614 this[_length] = 0; | |
4615 this[_modified](); | |
4616 } | |
4617 } | |
4618 [_addHashTableEntry](table, element) { | |
4619 let cell = dart.as(_getTableEntry(table, element), LinkedHashSetCell); | |
4620 if (cell !== null) | |
4621 return false; | |
4622 _setTableEntry(table, element, this[_newLinkedCell](element)); | |
4623 return true; | |
4624 } | |
4625 [_removeHashTableEntry](table, element) { | |
4626 if (table === null) | |
4627 return false; | |
4628 let cell = dart.as(_getTableEntry(table, element), LinkedHashSetCell); | |
4629 if (cell === null) | |
4630 return false; | |
4631 this[_unlinkCell](cell); | |
4632 _deleteTableEntry(table, element); | |
4633 return true; | |
4634 } | |
4635 [_modified]() { | |
4636 this[_modifications] = dart.notNull(this[_modifications]) + 1 & 67108863
; | |
4637 } | |
4638 [_newLinkedCell](element) { | |
4639 let cell = new LinkedHashSetCell(element); | |
4640 if (this[_first] === null) { | |
4641 this[_first] = this[_last] = cell; | |
4642 } else { | |
4643 let last = this[_last]; | |
4644 cell[_previous] = last; | |
4645 this[_last] = last[_next] = cell; | |
4646 } | |
4647 this[_length] = dart.notNull(this[_length]) + 1; | |
4648 this[_modified](); | |
4649 return cell; | |
4650 } | |
4651 [_unlinkCell](cell) { | |
4652 let previous = cell[_previous]; | |
4653 let next = cell[_next]; | |
4654 if (previous === null) { | |
4655 dart.assert(dart.equals(cell, this[_first])); | |
4656 this[_first] = next; | |
4657 } else { | |
4658 previous[_next] = next; | |
4659 } | |
4660 if (next === null) { | |
4661 dart.assert(dart.equals(cell, this[_last])); | |
4662 this[_last] = previous; | |
4663 } else { | |
4664 next[_previous] = previous; | |
4665 } | |
4666 this[_length] = dart.notNull(this[_length]) - 1; | |
4667 this[_modified](); | |
4668 } | |
4669 static [_isStringElement](element) { | |
4670 return dart.notNull(typeof element == string) && dart.notNull(!dart.equa
ls(element, '__proto__')); | |
4671 } | |
4672 static [_isNumericElement](element) { | |
4673 return dart.notNull(dart.is(element, core.num)) && (element & 0x3ffffff)
=== element; | |
4674 } | |
4675 [_computeHashCode](element) { | |
4676 return dart.dload(element, 'hashCode') & 0x3ffffff; | |
4677 } | |
4678 static [_getTableEntry](table, key) { | |
4679 return table[key]; | |
4680 } | |
4681 static [_setTableEntry](table, key, value) { | |
4682 dart.assert(value !== null); | |
4683 table[key] = value; | |
4684 } | |
4685 static [_deleteTableEntry](table, key) { | |
4686 delete table[key]; | |
4687 } | |
4688 [_getBucket](table, element) { | |
4689 let hash = this[_computeHashCode](element); | |
4690 return dart.as(table[hash], core.List); | |
4691 } | |
4692 [_findBucketIndex](bucket, element) { | |
4693 if (bucket === null) | |
4694 return -1; | |
4695 let length = bucket.length; | |
4696 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4697 let cell = dart.as(bucket[i], LinkedHashSetCell); | |
4698 if (dart.equals(cell[_element], element)) | |
4699 return i; | |
4700 } | |
4701 return -1; | |
4702 } | |
4703 static [_newHashTable]() { | |
4704 let table = Object.create(null); | |
4705 let temporaryKey = '<non-identifier-key>'; | |
4706 _setTableEntry(table, temporaryKey, table); | |
4707 _deleteTableEntry(table, temporaryKey); | |
4708 return table; | |
4709 } | |
4710 } | |
4711 return _LinkedHashSet; | |
4712 }); | |
4713 let _LinkedHashSet = _LinkedHashSet$(dart.dynamic); | |
4714 let _LinkedIdentityHashSet$ = dart.generic(function(E) { | |
4715 class _LinkedIdentityHashSet extends _LinkedHashSet$(E) { | |
4716 [_newSet]() { | |
4717 return new _LinkedIdentityHashSet(); | |
4718 } | |
4719 [_computeHashCode](key) { | |
4720 return core.identityHashCode(key) & 0x3ffffff; | |
4721 } | |
4722 [_findBucketIndex](bucket, element) { | |
4723 if (bucket === null) | |
4724 return -1; | |
4725 let length = bucket.length; | |
4726 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4727 let cell = dart.as(bucket[i], LinkedHashSetCell); | |
4728 if (core.identical(cell[_element], element)) | |
4729 return i; | |
4730 } | |
4731 return -1; | |
4732 } | |
4733 } | |
4734 return _LinkedIdentityHashSet; | |
4735 }); | |
4736 let _LinkedIdentityHashSet = _LinkedIdentityHashSet$(dart.dynamic); | |
4737 let _LinkedCustomHashSet$ = dart.generic(function(E) { | |
4738 class _LinkedCustomHashSet extends _LinkedHashSet$(E) { | |
4739 _LinkedCustomHashSet($_equality, $_hasher, validKey) { | |
4740 this[_equality] = $_equality; | |
4741 this[_hasher] = $_hasher; | |
4742 this[_validKey] = dart.as(validKey !== null ? validKey : (x) => dart.is(
x, E), _Predicate); | |
4743 super._LinkedHashSet(); | |
4744 } | |
4745 [_newSet]() { | |
4746 return new _LinkedCustomHashSet(this[_equality], this[_hasher], this[_va
lidKey]); | |
4747 } | |
4748 [_findBucketIndex](bucket, element) { | |
4749 if (bucket === null) | |
4750 return -1; | |
4751 let length = bucket.length; | |
4752 for (let i = 0; dart.notNull(i) < dart.notNull(length); i = dart.notNull
(i) + 1) { | |
4753 let cell = dart.as(bucket[i], LinkedHashSetCell); | |
4754 if (this[_equality](dart.as(cell[_element], E), dart.as(element, E))) | |
4755 return i; | |
4756 } | |
4757 return -1; | |
4758 } | |
4759 [_computeHashCode](element) { | |
4760 return this[_hasher](dart.as(element, E)) & 0x3ffffff; | |
4761 } | |
4762 add(element) { | |
4763 return super._add(element); | |
4764 } | |
4765 contains(object) { | |
4766 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
4767 return false; | |
4768 return super._contains(object); | |
4769 } | |
4770 lookup(object) { | |
4771 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
4772 return null; | |
4773 return super._lookup(object); | |
4774 } | |
4775 remove(object) { | |
4776 if (!dart.notNull(dart.dinvokef(this[_validKey], object))) | |
4777 return false; | |
4778 return super._remove(object); | |
4779 } | |
4780 containsAll(elements) { | |
4781 for (let element of elements) { | |
4782 if (!dart.notNull(dart.dinvokef(this[_validKey], element)) || !dart.no
tNull(this.contains(element))) | |
4783 return false; | |
4784 } | |
4785 return true; | |
4786 } | |
4787 removeAll(elements) { | |
4788 for (let element of elements) { | |
4789 if (dart.dinvokef(this[_validKey], element)) { | |
4790 super._remove(element); | |
4791 } | |
4792 } | |
4793 } | |
4794 } | |
4795 return _LinkedCustomHashSet; | |
4796 }); | |
4797 let _LinkedCustomHashSet = _LinkedCustomHashSet$(dart.dynamic); | |
4798 class LinkedHashSetCell extends core.Object { | |
4799 LinkedHashSetCell($_element) { | |
4800 this[_element] = $_element; | |
4801 this[_next] = null; | |
4802 this[_previous] = null; | |
4803 } | |
4804 } | |
4805 let LinkedHashSetIterator$ = dart.generic(function(E) { | |
4806 class LinkedHashSetIterator extends core.Object { | |
4807 LinkedHashSetIterator($_set, $_modifications) { | |
4808 this[_set] = $_set; | |
4809 this[_modifications] = $_modifications; | |
4810 this[_cell] = null; | |
4811 this[_current] = null; | |
4812 this[_cell] = dart.as(dart.dload(this[_set], '_first'), LinkedHashSetCel
l); | |
4813 } | |
4814 get current() { | |
4815 return this[_current]; | |
4816 } | |
4817 moveNext() { | |
4818 if (this[_modifications] !== dart.dload(this[_set], '_modifications')) { | |
4819 throw new core.ConcurrentModificationError(this[_set]); | |
4820 } else if (this[_cell] === null) { | |
4821 this[_current] = null; | |
4822 return false; | |
4823 } else { | |
4824 this[_current] = dart.as(this[_cell][_element], E); | |
4825 this[_cell] = this[_cell][_next]; | |
4826 return true; | |
4827 } | |
4828 } | |
4829 } | |
4830 return LinkedHashSetIterator; | |
4831 }); | |
4832 let LinkedHashSetIterator = LinkedHashSetIterator$(dart.dynamic); | |
4833 // Exports: | |
4834 exports.UnmodifiableListView = UnmodifiableListView; | |
4835 exports.UnmodifiableListView$ = UnmodifiableListView$; | |
4836 exports.HashMap = HashMap; | |
4837 exports.HashMap$ = HashMap$; | |
4838 exports.SetBase = SetBase; | |
4839 exports.SetBase$ = SetBase$; | |
4840 exports.SetMixin = SetMixin; | |
4841 exports.SetMixin$ = SetMixin$; | |
4842 exports.HashSet = HashSet; | |
4843 exports.HashSet$ = HashSet$; | |
4844 exports.IterableMixin = IterableMixin; | |
4845 exports.IterableMixin$ = IterableMixin$; | |
4846 exports.IterableBase = IterableBase; | |
4847 exports.IterableBase$ = IterableBase$; | |
4848 exports.HasNextIterator = HasNextIterator; | |
4849 exports.HasNextIterator$ = HasNextIterator$; | |
4850 exports.LinkedHashMap = LinkedHashMap; | |
4851 exports.LinkedHashMap$ = LinkedHashMap$; | |
4852 exports.LinkedHashSet = LinkedHashSet; | |
4853 exports.LinkedHashSet$ = LinkedHashSet$; | |
4854 exports.LinkedList = LinkedList; | |
4855 exports.LinkedList$ = LinkedList$; | |
4856 exports.LinkedListEntry = LinkedListEntry; | |
4857 exports.LinkedListEntry$ = LinkedListEntry$; | |
4858 exports.ListBase = ListBase; | |
4859 exports.ListBase$ = ListBase$; | |
4860 exports.ListMixin = ListMixin; | |
4861 exports.ListMixin$ = ListMixin$; | |
4862 exports.MapBase = MapBase; | |
4863 exports.MapBase$ = MapBase$; | |
4864 exports.MapMixin = MapMixin; | |
4865 exports.MapMixin$ = MapMixin$; | |
4866 exports.UnmodifiableMapBase = UnmodifiableMapBase; | |
4867 exports.UnmodifiableMapBase$ = UnmodifiableMapBase$; | |
4868 exports.MapView = MapView; | |
4869 exports.MapView$ = MapView$; | |
4870 exports.UnmodifiableMapView = UnmodifiableMapView; | |
4871 exports.UnmodifiableMapView$ = UnmodifiableMapView$; | |
4872 exports.Maps = Maps; | |
4873 exports.Queue = Queue; | |
4874 exports.Queue$ = Queue$; | |
4875 exports.DoubleLinkedQueueEntry = DoubleLinkedQueueEntry; | |
4876 exports.DoubleLinkedQueueEntry$ = DoubleLinkedQueueEntry$; | |
4877 exports.DoubleLinkedQueue = DoubleLinkedQueue; | |
4878 exports.DoubleLinkedQueue$ = DoubleLinkedQueue$; | |
4879 exports.ListQueue = ListQueue; | |
4880 exports.ListQueue$ = ListQueue$; | |
4881 exports.SplayTreeMap = SplayTreeMap; | |
4882 exports.SplayTreeMap$ = SplayTreeMap$; | |
4883 exports.SplayTreeSet = SplayTreeSet; | |
4884 exports.SplayTreeSet$ = SplayTreeSet$; | |
4885 exports.HashMapKeyIterable = HashMapKeyIterable; | |
4886 exports.HashMapKeyIterable$ = HashMapKeyIterable$; | |
4887 exports.HashMapKeyIterator = HashMapKeyIterator; | |
4888 exports.HashMapKeyIterator$ = HashMapKeyIterator$; | |
4889 exports.LinkedHashMapCell = LinkedHashMapCell; | |
4890 exports.LinkedHashMapKeyIterable = LinkedHashMapKeyIterable; | |
4891 exports.LinkedHashMapKeyIterable$ = LinkedHashMapKeyIterable$; | |
4892 exports.LinkedHashMapKeyIterator = LinkedHashMapKeyIterator; | |
4893 exports.LinkedHashMapKeyIterator$ = LinkedHashMapKeyIterator$; | |
4894 exports.HashSetIterator = HashSetIterator; | |
4895 exports.HashSetIterator$ = HashSetIterator$; | |
4896 exports.LinkedHashSetCell = LinkedHashSetCell; | |
4897 exports.LinkedHashSetIterator = LinkedHashSetIterator; | |
4898 exports.LinkedHashSetIterator$ = LinkedHashSetIterator$; | |
4899 })(collection || (collection = {})); | |
OLD | NEW |