| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart._collection.dev; | 5 part of dart._collection.dev; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Base implementation of a [List] class. | 8 * Base implementation of a [List] class. |
| 9 * | 9 * |
| 10 * This class can be used as a mixin. | 10 * This class can be used as a mixin. |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 throw new UnsupportedError( | 612 throw new UnsupportedError( |
| 613 "Cannot remove from an unmodifiable list"); | 613 "Cannot remove from an unmodifiable list"); |
| 614 } | 614 } |
| 615 | 615 |
| 616 void insertRange(int start, int length, [E initialValue]) { | 616 void insertRange(int start, int length, [E initialValue]) { |
| 617 throw new UnsupportedError( | 617 throw new UnsupportedError( |
| 618 "Cannot insert range in an unmodifiable list"); | 618 "Cannot insert range in an unmodifiable list"); |
| 619 } | 619 } |
| 620 } | 620 } |
| 621 | 621 |
| 622 | |
| 623 /** | |
| 624 * Abstract implementation of a list. | |
| 625 * | |
| 626 * All operations are defined in terms of `length`, `operator[]`, | |
| 627 * `operator[]=` and `length=`, which need to be implemented. | |
| 628 */ | |
| 629 abstract class ListBase<E> extends ListMixin<E> implements List<E> {} | |
| 630 | |
| 631 /** | |
| 632 * Abstract implementation of a fixed-length list. | |
| 633 * | |
| 634 * All operations are defined in terms of `length`, `operator[]` and | |
| 635 * `operator[]=`, which need to be implemented. | |
| 636 */ | |
| 637 abstract class FixedLengthListBase<E> extends ListBase<E> | |
| 638 with FixedLengthListMixin<E> {} | |
| 639 | |
| 640 /** | |
| 641 * Abstract implementation of an unmodifiable list. | |
| 642 * | |
| 643 * All operations are defined in terms of `length` and `operator[]`, | |
| 644 * which need to be implemented. | |
| 645 */ | |
| 646 abstract class UnmodifiableListBase<E> extends ListBase<E> | |
| 647 with UnmodifiableListMixin<E> {} | |
| 648 | |
| 649 /** An empty fixed-length (and therefore unmodifiable) list. */ | |
| 650 class EmptyList<E> extends FixedLengthListBase<E> { | |
| 651 int get length => 0; | |
| 652 E operator[](int index) { throw new RangeError.value(index); } | |
| 653 void operator []=(int index, E value) { throw new RangeError.value(index); } | |
| 654 Iterable<E> skip(int count) => const EmptyIterable(); | |
| 655 Iterable<E> take(int count) => const EmptyIterable(); | |
| 656 Iterable<E> get reversed => const EmptyIterable(); | |
| 657 void sort([int compare(E a, E b)]) {} | |
| 658 } | |
| 659 | |
| 660 class ReversedListIterable<E> extends ListIterable<E> { | 622 class ReversedListIterable<E> extends ListIterable<E> { |
| 661 Iterable<E> _source; | 623 Iterable<E> _source; |
| 662 ReversedListIterable(this._source); | 624 ReversedListIterable(this._source); |
| 663 | 625 |
| 664 int get length => _source.length; | 626 int get length => _source.length; |
| 665 | 627 |
| 666 E elementAt(int index) => _source.elementAt(_source.length - 1 - index); | 628 E elementAt(int index) => _source.elementAt(_source.length - 1 - index); |
| 667 } | 629 } |
| 668 | 630 |
| 669 /** | 631 /** |
| 670 * An [Iterable] of the UTF-16 code units of a [String] in index order. | 632 * An [Iterable] of the UTF-16 code units of a [String] in index order. |
| 671 */ | 633 */ |
| 672 class CodeUnits extends UnmodifiableListBase<int> { | 634 class CodeUnits extends ListMixin<int> with UnmodifiableListMixin<int> { |
| 673 /** The string that this is the code units of. */ | 635 /** The string that this is the code units of. */ |
| 674 String _string; | 636 String _string; |
| 675 | 637 |
| 676 CodeUnits(this._string); | 638 CodeUnits(this._string); |
| 677 | 639 |
| 678 int get length => _string.length; | 640 int get length => _string.length; |
| 679 int operator[](int i) => _string.codeUnitAt(i); | 641 int operator[](int i) => _string.codeUnitAt(i); |
| 680 } | 642 } |
| 681 | 643 |
| 682 class _ListIndicesIterable extends ListIterable<int> { | 644 class _ListIndicesIterable extends ListIterable<int> { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 } | 689 } |
| 728 | 690 |
| 729 E remove(int key) { | 691 E remove(int key) { |
| 730 throw new UnsupportedError("Cannot modify an unmodifiable map"); | 692 throw new UnsupportedError("Cannot modify an unmodifiable map"); |
| 731 } | 693 } |
| 732 | 694 |
| 733 void clear() { | 695 void clear() { |
| 734 throw new UnsupportedError("Cannot modify an unmodifiable map"); | 696 throw new UnsupportedError("Cannot modify an unmodifiable map"); |
| 735 } | 697 } |
| 736 } | 698 } |
| OLD | NEW |