OLD | NEW |
---|---|
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart._internal; | 5 part of dart._internal; |
6 | 6 |
7 /** | 7 /** |
8 * Marker interface for [Iterable] subclasses that have an efficient | 8 * Marker interface for [Iterable] subclasses that have an efficient |
9 * [length] implementation. | 9 * [length] implementation. |
10 */ | 10 */ |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
540 } | 540 } |
541 | 541 |
542 E get current { | 542 E get current { |
543 if (_remaining < 0) return null; | 543 if (_remaining < 0) return null; |
544 return _iterator.current; | 544 return _iterator.current; |
545 } | 545 } |
546 } | 546 } |
547 | 547 |
548 class TakeWhileIterable<E> extends IterableBase<E> { | 548 class TakeWhileIterable<E> extends IterableBase<E> { |
549 final Iterable<E> _iterable; | 549 final Iterable<E> _iterable; |
550 final _ElementPredicate _f; | 550 final _ElementPredicate<E> _f; |
Jennifer Messerly
2015/06/10 18:22:20
caught these because my first attempt was propagat
| |
551 | 551 |
552 TakeWhileIterable(this._iterable, bool this._f(E element)); | 552 TakeWhileIterable(this._iterable, bool this._f(E element)); |
553 | 553 |
554 Iterator<E> get iterator { | 554 Iterator<E> get iterator { |
555 return new TakeWhileIterator<E>(_iterable.iterator, _f); | 555 return new TakeWhileIterator<E>(_iterable.iterator, _f); |
556 } | 556 } |
557 } | 557 } |
558 | 558 |
559 class TakeWhileIterator<E> extends Iterator<E> { | 559 class TakeWhileIterator<E> extends Iterator<E> { |
560 final Iterator<E> _iterator; | 560 final Iterator<E> _iterator; |
561 final _ElementPredicate _f; | 561 final _ElementPredicate<E> _f; |
562 bool _isFinished = false; | 562 bool _isFinished = false; |
563 | 563 |
564 TakeWhileIterator(this._iterator, bool this._f(E element)); | 564 TakeWhileIterator(this._iterator, bool this._f(E element)); |
565 | 565 |
566 bool moveNext() { | 566 bool moveNext() { |
567 if (_isFinished) return false; | 567 if (_isFinished) return false; |
568 if (!_iterator.moveNext() || !_f(_iterator.current)) { | 568 if (!_iterator.moveNext() || !_f(_iterator.current)) { |
569 _isFinished = true; | 569 _isFinished = true; |
570 return false; | 570 return false; |
571 } | 571 } |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
633 for (int i = 0; i < _skipCount; i++) _iterator.moveNext(); | 633 for (int i = 0; i < _skipCount; i++) _iterator.moveNext(); |
634 _skipCount = 0; | 634 _skipCount = 0; |
635 return _iterator.moveNext(); | 635 return _iterator.moveNext(); |
636 } | 636 } |
637 | 637 |
638 E get current => _iterator.current; | 638 E get current => _iterator.current; |
639 } | 639 } |
640 | 640 |
641 class SkipWhileIterable<E> extends IterableBase<E> { | 641 class SkipWhileIterable<E> extends IterableBase<E> { |
642 final Iterable<E> _iterable; | 642 final Iterable<E> _iterable; |
643 final _ElementPredicate _f; | 643 final _ElementPredicate<E> _f; |
644 | 644 |
645 SkipWhileIterable(this._iterable, bool this._f(E element)); | 645 SkipWhileIterable(this._iterable, bool this._f(E element)); |
646 | 646 |
647 Iterator<E> get iterator { | 647 Iterator<E> get iterator { |
648 return new SkipWhileIterator<E>(_iterable.iterator, _f); | 648 return new SkipWhileIterator<E>(_iterable.iterator, _f); |
649 } | 649 } |
650 } | 650 } |
651 | 651 |
652 class SkipWhileIterator<E> extends Iterator<E> { | 652 class SkipWhileIterator<E> extends Iterator<E> { |
653 final Iterator<E> _iterator; | 653 final Iterator<E> _iterator; |
654 final _ElementPredicate _f; | 654 final _ElementPredicate<E> _f; |
655 bool _hasSkipped = false; | 655 bool _hasSkipped = false; |
656 | 656 |
657 SkipWhileIterator(this._iterator, bool this._f(E element)); | 657 SkipWhileIterator(this._iterator, bool this._f(E element)); |
658 | 658 |
659 bool moveNext() { | 659 bool moveNext() { |
660 if (!_hasSkipped) { | 660 if (!_hasSkipped) { |
661 _hasSkipped = true; | 661 _hasSkipped = true; |
662 while (_iterator.moveNext()) { | 662 while (_iterator.moveNext()) { |
663 if (!_f(_iterator.current)) return true; | 663 if (!_f(_iterator.current)) return true; |
664 } | 664 } |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1160 * Creates errors throw by [Iterable] when the element count is wrong. | 1160 * Creates errors throw by [Iterable] when the element count is wrong. |
1161 */ | 1161 */ |
1162 abstract class IterableElementError { | 1162 abstract class IterableElementError { |
1163 /** Error thrown thrown by, e.g., [Iterable.first] when there is no result. */ | 1163 /** Error thrown thrown by, e.g., [Iterable.first] when there is no result. */ |
1164 static StateError noElement() => new StateError("No element"); | 1164 static StateError noElement() => new StateError("No element"); |
1165 /** Error thrown by, e.g., [Iterable.single] if there are too many results. */ | 1165 /** Error thrown by, e.g., [Iterable.single] if there are too many results. */ |
1166 static StateError tooMany() => new StateError("Too many elements"); | 1166 static StateError tooMany() => new StateError("Too many elements"); |
1167 /** Error thrown by, e.g., [List.setRange] if there are too few elements. */ | 1167 /** Error thrown by, e.g., [List.setRange] if there are too few elements. */ |
1168 static StateError tooFew() => new StateError("Too few elements"); | 1168 static StateError tooFew() => new StateError("Too few elements"); |
1169 } | 1169 } |
OLD | NEW |