| 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._collection.dev; | 5 part of dart._collection.dev; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * An [Iterable] for classes that have efficient [length] and [elementAt]. | 8 * An [Iterable] for classes that have efficient [length] and [elementAt]. |
| 9 * | 9 * |
| 10 * All other methods are implemented in terms of [length] and [elementAt], | 10 * All other methods are implemented in terms of [length] and [elementAt], |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 if (length == 0) throw new StateError("No elements"); | 39 if (length == 0) throw new StateError("No elements"); |
| 40 return elementAt(length - 1); | 40 return elementAt(length - 1); |
| 41 } | 41 } |
| 42 | 42 |
| 43 E get single { | 43 E get single { |
| 44 if (length == 0) throw new StateError("No elements"); | 44 if (length == 0) throw new StateError("No elements"); |
| 45 if (length > 1) throw new StateError("Too many elements"); | 45 if (length > 1) throw new StateError("Too many elements"); |
| 46 return elementAt(0); | 46 return elementAt(0); |
| 47 } | 47 } |
| 48 | 48 |
| 49 bool contains(E element) { | 49 bool contains(Object element) { |
| 50 int length = this.length; | 50 int length = this.length; |
| 51 for (int i = 0; i < length; i++) { | 51 for (int i = 0; i < length; i++) { |
| 52 if (elementAt(i) == element) return true; | 52 if (elementAt(i) == element) return true; |
| 53 if (length != this.length) { | 53 if (length != this.length) { |
| 54 throw new ConcurrentModificationError(this); | 54 throw new ConcurrentModificationError(this); |
| 55 } | 55 } |
| 56 } | 56 } |
| 57 return false; | 57 return false; |
| 58 } | 58 } |
| 59 | 59 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 72 int length = this.length; | 72 int length = this.length; |
| 73 for (int i = 0; i < length; i++) { | 73 for (int i = 0; i < length; i++) { |
| 74 if (test(elementAt(i))) return true; | 74 if (test(elementAt(i))) return true; |
| 75 if (length != this.length) { | 75 if (length != this.length) { |
| 76 throw new ConcurrentModificationError(this); | 76 throw new ConcurrentModificationError(this); |
| 77 } | 77 } |
| 78 } | 78 } |
| 79 return false; | 79 return false; |
| 80 } | 80 } |
| 81 | 81 |
| 82 E firstWhere(bool test(E element), { E orElse() }) { | 82 dynamic firstWhere(bool test(E element), { Object orElse() }) { |
| 83 int length = this.length; | 83 int length = this.length; |
| 84 for (int i = 0; i < length; i++) { | 84 for (int i = 0; i < length; i++) { |
| 85 E element = elementAt(i); | 85 E element = elementAt(i); |
| 86 if (test(element)) return element; | 86 if (test(element)) return element; |
| 87 if (length != this.length) { | 87 if (length != this.length) { |
| 88 throw new ConcurrentModificationError(this); | 88 throw new ConcurrentModificationError(this); |
| 89 } | 89 } |
| 90 } | 90 } |
| 91 if (orElse != null) return orElse(); | 91 if (orElse != null) return orElse(); |
| 92 throw new StateError("No matching element"); | 92 throw new StateError("No matching element"); |
| 93 } | 93 } |
| 94 | 94 |
| 95 E lastWhere(bool test(E element), { E orElse() }) { | 95 dynamic lastWhere(bool test(E element), { Object orElse() }) { |
| 96 int length = this.length; | 96 int length = this.length; |
| 97 for (int i = length - 1; i >= 0; i--) { | 97 for (int i = length - 1; i >= 0; i--) { |
| 98 E element = elementAt(i); | 98 E element = elementAt(i); |
| 99 if (test(element)) return element; | 99 if (test(element)) return element; |
| 100 if (length != this.length) { | 100 if (length != this.length) { |
| 101 throw new ConcurrentModificationError(this); | 101 throw new ConcurrentModificationError(this); |
| 102 } | 102 } |
| 103 } | 103 } |
| 104 if (orElse != null) return orElse(); | 104 if (orElse != null) return orElse(); |
| 105 throw new StateError("No matching element"); | 105 throw new StateError("No matching element"); |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 int get length => 0; | 613 int get length => 0; |
| 614 | 614 |
| 615 E get first { throw new StateError("No elements"); } | 615 E get first { throw new StateError("No elements"); } |
| 616 | 616 |
| 617 E get last { throw new StateError("No elements"); } | 617 E get last { throw new StateError("No elements"); } |
| 618 | 618 |
| 619 E get single { throw new StateError("No elements"); } | 619 E get single { throw new StateError("No elements"); } |
| 620 | 620 |
| 621 E elementAt(int index) { throw new RangeError.value(index); } | 621 E elementAt(int index) { throw new RangeError.value(index); } |
| 622 | 622 |
| 623 bool contains(E element) => false; | 623 bool contains(Object element) => false; |
| 624 | 624 |
| 625 bool every(bool test(E element)) => true; | 625 bool every(bool test(E element)) => true; |
| 626 | 626 |
| 627 bool any(bool test(E element)) => false; | 627 bool any(bool test(E element)) => false; |
| 628 | 628 |
| 629 E firstWhere(bool test(E element), { E orElse() }) { | 629 E firstWhere(bool test(E element), { E orElse() }) { |
| 630 if (orElse != null) return orElse(); | 630 if (orElse != null) return orElse(); |
| 631 throw new StateError("No matching element"); | 631 throw new StateError("No matching element"); |
| 632 } | 632 } |
| 633 | 633 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 | 791 |
| 792 static dynamic single(Iterable iterable) { | 792 static dynamic single(Iterable iterable) { |
| 793 Iterator it = iterable.iterator; | 793 Iterator it = iterable.iterator; |
| 794 if (!it.moveNext()) throw new StateError("No elements"); | 794 if (!it.moveNext()) throw new StateError("No elements"); |
| 795 dynamic result = it.current; | 795 dynamic result = it.current; |
| 796 if (it.moveNext()) throw new StateError("More than one element"); | 796 if (it.moveNext()) throw new StateError("More than one element"); |
| 797 return result; | 797 return result; |
| 798 } | 798 } |
| 799 | 799 |
| 800 static dynamic firstWhere(Iterable iterable, | 800 static dynamic firstWhere(Iterable iterable, |
| 801 bool test(dynamic value), | 801 bool test(dynamic value), |
| 802 dynamic orElse()) { | 802 dynamic orElse()) { |
| 803 for (dynamic element in iterable) { | 803 for (dynamic element in iterable) { |
| 804 if (test(element)) return element; | 804 if (test(element)) return element; |
| 805 } | 805 } |
| 806 if (orElse != null) return orElse(); | 806 if (orElse != null) return orElse(); |
| 807 throw new StateError("No matching element"); | 807 throw new StateError("No matching element"); |
| 808 } | 808 } |
| 809 | 809 |
| 810 static dynamic lastWhere(Iterable iterable, | 810 static dynamic lastWhere(Iterable iterable, |
| 811 bool test(dynamic value), | 811 bool test(dynamic value), |
| 812 dynamic orElse()) { | 812 dynamic orElse()) { |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1054 | 1054 |
| 1055 static Set setDifference(Set set, Set other, Set result) { | 1055 static Set setDifference(Set set, Set other, Set result) { |
| 1056 for (var element in set) { | 1056 for (var element in set) { |
| 1057 if (!other.contains(element)) { | 1057 if (!other.contains(element)) { |
| 1058 result.add(element); | 1058 result.add(element); |
| 1059 } | 1059 } |
| 1060 } | 1060 } |
| 1061 return result; | 1061 return result; |
| 1062 } | 1062 } |
| 1063 } | 1063 } |
| OLD | NEW |