Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(744)

Side by Side Diff: sdk/lib/internal/iterable.dart

Issue 2529393002: Make core libraries use generic method syntax. (Closed)
Patch Set: Update status files. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sdk/lib/core/iterable.dart ('k') | sdk/lib/internal/sort.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 if (length != this.length) { 165 if (length != this.length) {
166 throw new ConcurrentModificationError(this); 166 throw new ConcurrentModificationError(this);
167 } 167 }
168 } 168 }
169 return buffer.toString(); 169 return buffer.toString();
170 } 170 }
171 } 171 }
172 172
173 Iterable<E> where(bool test(E element)) => super.where(test); 173 Iterable<E> where(bool test(E element)) => super.where(test);
174 174
175 Iterable/*<T>*/ map/*<T>*/(/*=T*/ f(E element)) => 175 Iterable<T> map<T>(T f(E element)) => new MappedListIterable<E, T>(this, f);
176 new MappedListIterable<E, dynamic/*=T*/ >(this, f);
177 176
178 E reduce(E combine(var value, E element)) { 177 E reduce(E combine(var value, E element)) {
179 int length = this.length; 178 int length = this.length;
180 if (length == 0) throw IterableElementError.noElement(); 179 if (length == 0) throw IterableElementError.noElement();
181 E value = elementAt(0); 180 E value = elementAt(0);
182 for (int i = 1; i < length; i++) { 181 for (int i = 1; i < length; i++) {
183 value = combine(value, elementAt(i)); 182 value = combine(value, elementAt(i));
184 if (length != this.length) { 183 if (length != this.length) {
185 throw new ConcurrentModificationError(this); 184 throw new ConcurrentModificationError(this);
186 } 185 }
187 186
188 } 187 }
189 return value; 188 return value;
190 } 189 }
191 190
192 /*=T*/ fold/*<T>*/( 191 T fold<T>(T initialValue, T combine(T previousValue, E element)) {
193 var/*=T*/ initialValue, /*=T*/ combine(
194 var/*=T*/ previousValue, E element)) {
195 var value = initialValue; 192 var value = initialValue;
196 int length = this.length; 193 int length = this.length;
197 for (int i = 0; i < length; i++) { 194 for (int i = 0; i < length; i++) {
198 value = combine(value, elementAt(i)); 195 value = combine(value, elementAt(i));
199 if (length != this.length) { 196 if (length != this.length) {
200 throw new ConcurrentModificationError(this); 197 throw new ConcurrentModificationError(this);
201 } 198 }
202 } 199 }
203 return value; 200 return value;
204 } 201 }
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 418
422 class WhereIterable<E> extends Iterable<E> { 419 class WhereIterable<E> extends Iterable<E> {
423 final Iterable<E> _iterable; 420 final Iterable<E> _iterable;
424 final _ElementPredicate<E> _f; 421 final _ElementPredicate<E> _f;
425 422
426 WhereIterable(this._iterable, bool this._f(E element)); 423 WhereIterable(this._iterable, bool this._f(E element));
427 424
428 Iterator<E> get iterator => new WhereIterator<E>(_iterable.iterator, _f); 425 Iterator<E> get iterator => new WhereIterator<E>(_iterable.iterator, _f);
429 426
430 // Specialization of [Iterable.map] to non-EfficientLengthIterable. 427 // Specialization of [Iterable.map] to non-EfficientLengthIterable.
431 Iterable/*<T>*/ map/*<T>*/(/*=T*/ f(E element)) => 428 Iterable<T> map<T>(T f(E element)) => new MappedIterable<E, T>._(this, f);
432 new MappedIterable<E, dynamic/*=T*/>._(this, f);
433 } 429 }
434 430
435 class WhereIterator<E> extends Iterator<E> { 431 class WhereIterator<E> extends Iterator<E> {
436 final Iterator<E> _iterator; 432 final Iterator<E> _iterator;
437 final _ElementPredicate _f; 433 final _ElementPredicate _f;
438 434
439 WhereIterator(this._iterator, bool this._f(E element)); 435 WhereIterator(this._iterator, bool this._f(E element));
440 436
441 bool moveNext() { 437 bool moveNext() {
442 while (_iterator.moveNext()) { 438 while (_iterator.moveNext()) {
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 709
714 E singleWhere(bool test(E element), { E orElse() }) { 710 E singleWhere(bool test(E element), { E orElse() }) {
715 if (orElse != null) return orElse(); 711 if (orElse != null) return orElse();
716 throw IterableElementError.noElement(); 712 throw IterableElementError.noElement();
717 } 713 }
718 714
719 String join([String separator = ""]) => ""; 715 String join([String separator = ""]) => "";
720 716
721 Iterable<E> where(bool test(E element)) => this; 717 Iterable<E> where(bool test(E element)) => this;
722 718
723 Iterable/*<T>*/ map/*<T>*/(/*=T*/ f(E element)) => const EmptyIterable(); 719 Iterable<T> map<T>(T f(E element)) => const EmptyIterable();
724 720
725 E reduce(E combine(E value, E element)) { 721 E reduce(E combine(E value, E element)) {
726 throw IterableElementError.noElement(); 722 throw IterableElementError.noElement();
727 } 723 }
728 724
729 /*=T*/ fold/*<T>*/( 725 T fold<T>(T initialValue, T combine(T previousValue, E element)) {
730 var/*=T*/ initialValue, /*=T*/ combine(
731 var/*=T*/ previousValue, E element)) {
732 return initialValue; 726 return initialValue;
733 } 727 }
734 728
735 Iterable<E> skip(int count) { 729 Iterable<E> skip(int count) {
736 RangeError.checkNotNegative(count, "count"); 730 RangeError.checkNotNegative(count, "count");
737 return this; 731 return this;
738 } 732 }
739 733
740 Iterable<E> skipWhile(bool test(E element)) => this; 734 Iterable<E> skipWhile(bool test(E element)) => this;
741 735
(...skipping 20 matching lines...) Expand all
762 * Creates errors throw by [Iterable] when the element count is wrong. 756 * Creates errors throw by [Iterable] when the element count is wrong.
763 */ 757 */
764 abstract class IterableElementError { 758 abstract class IterableElementError {
765 /** Error thrown thrown by, e.g., [Iterable.first] when there is no result. */ 759 /** Error thrown thrown by, e.g., [Iterable.first] when there is no result. */
766 static StateError noElement() => new StateError("No element"); 760 static StateError noElement() => new StateError("No element");
767 /** Error thrown by, e.g., [Iterable.single] if there are too many results. */ 761 /** Error thrown by, e.g., [Iterable.single] if there are too many results. */
768 static StateError tooMany() => new StateError("Too many elements"); 762 static StateError tooMany() => new StateError("Too many elements");
769 /** Error thrown by, e.g., [List.setRange] if there are too few elements. */ 763 /** Error thrown by, e.g., [List.setRange] if there are too few elements. */
770 static StateError tooFew() => new StateError("Too few elements"); 764 static StateError tooFew() => new StateError("Too few elements");
771 } 765 }
OLDNEW
« no previous file with comments | « sdk/lib/core/iterable.dart ('k') | sdk/lib/internal/sort.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698