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

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

Issue 11773043: More cuddling dart2js checked mode. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « dart/sdk/lib/async/stream_impl.dart ('k') | dart/sdk/lib/core/list.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.core; 5 part of dart.core;
6 6
7 /** 7 /**
8 * The [Iterable] interface allows to get an [Iterator] out of an 8 * The [Iterable] interface allows to get an [Iterator] out of an
9 * [Iterable] object. 9 * [Iterable] object.
10 * 10 *
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 366 }
367 throw new RangeError.value(index); 367 throw new RangeError.value(index);
368 } 368 }
369 } 369 }
370 370
371 typedef T _Transformation<S, T>(S value); 371 typedef T _Transformation<S, T>(S value);
372 372
373 class MappedIterable<S, T> extends Iterable<T> { 373 class MappedIterable<S, T> extends Iterable<T> {
374 final Iterable<S> _iterable; 374 final Iterable<S> _iterable;
375 // TODO(ahe): Restore type when feature is implemented in dart2js 375 // TODO(ahe): Restore type when feature is implemented in dart2js
376 // checked mode. 376 // checked mode. http://dartbug.com/7733
377 final /* _Transformation<S, T> */ _f; 377 final /* _Transformation<S, T> */ _f;
378 378
379 MappedIterable(this._iterable, T this._f(S element)); 379 MappedIterable(this._iterable, T this._f(S element));
380 380
381 Iterator<T> get iterator => new MappedIterator<S, T>(_iterable.iterator, _f); 381 Iterator<T> get iterator => new MappedIterator<S, T>(_iterable.iterator, _f);
382 382
383 // Length related functions are independent of the mapping. 383 // Length related functions are independent of the mapping.
384 int get length => _iterable.length; 384 int get length => _iterable.length;
385 bool get isEmpty => _iterable.isEmpty; 385 bool get isEmpty => _iterable.isEmpty;
386 } 386 }
387 387
388 class MappedIterator<S, T> extends Iterator<T> { 388 class MappedIterator<S, T> extends Iterator<T> {
389 T _current; 389 T _current;
390 final Iterator<S> _iterator; 390 final Iterator<S> _iterator;
391 // TODO(ahe): Restore type when feature is implemented in dart2js 391 // TODO(ahe): Restore type when feature is implemented in dart2js
392 // checked mode. 392 // checked mode. http://dartbug.com/7733
393 final /* _Transformation<S, T> */ _f; 393 final /* _Transformation<S, T> */ _f;
394 394
395 MappedIterator(this._iterator, T this._f(S element)); 395 MappedIterator(this._iterator, T this._f(S element));
396 396
397 bool moveNext() { 397 bool moveNext() {
398 if (_iterator.moveNext()) { 398 if (_iterator.moveNext()) {
399 _current = _f(_iterator.current); 399 _current = _f(_iterator.current);
400 return true; 400 return true;
401 } else { 401 } else {
402 _current = null; 402 _current = null;
403 return false; 403 return false;
404 } 404 }
405 } 405 }
406 406
407 T get current => _current; 407 T get current => _current;
408 } 408 }
409 409
410 typedef bool _ElementPredicate<E>(E element); 410 typedef bool _ElementPredicate<E>(E element);
411 411
412 class WhereIterable<E> extends Iterable<E> { 412 class WhereIterable<E> extends Iterable<E> {
413 final Iterable<E> _iterable; 413 final Iterable<E> _iterable;
414 final _ElementPredicate _f; 414 // TODO(ahe): Restore type when feature is implemented in dart2js
415 // checked mode. http://dartbug.com/7733
416 final /* _ElementPredicate */ _f;
415 417
416 WhereIterable(this._iterable, bool this._f(E element)); 418 WhereIterable(this._iterable, bool this._f(E element));
417 419
418 Iterator<E> get iterator => new WhereIterator<E>(_iterable.iterator, _f); 420 Iterator<E> get iterator => new WhereIterator<E>(_iterable.iterator, _f);
419 } 421 }
420 422
421 class WhereIterator<E> extends Iterator<E> { 423 class WhereIterator<E> extends Iterator<E> {
422 final Iterator<E> _iterator; 424 final Iterator<E> _iterator;
423 final _ElementPredicate _f; 425 // TODO(ahe): Restore type when feature is implemented in dart2js
426 // checked mode. http://dartbug.com/7733
427 final /* _ElementPredicate */ _f;
424 428
425 WhereIterator(this._iterator, bool this._f(E element)); 429 WhereIterator(this._iterator, bool this._f(E element));
426 430
427 bool moveNext() { 431 bool moveNext() {
428 while (_iterator.moveNext()) { 432 while (_iterator.moveNext()) {
429 if (_f(_iterator.current)) { 433 if (_f(_iterator.current)) {
430 return true; 434 return true;
431 } 435 }
432 } 436 }
433 return false; 437 return false;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 } 473 }
470 474
471 E get current { 475 E get current {
472 if (_remaining < 0) return null; 476 if (_remaining < 0) return null;
473 return _iterator.current; 477 return _iterator.current;
474 } 478 }
475 } 479 }
476 480
477 class TakeWhileIterable<E> extends Iterable<E> { 481 class TakeWhileIterable<E> extends Iterable<E> {
478 final Iterable<E> _iterable; 482 final Iterable<E> _iterable;
479 final _ElementPredicate _f; 483 // TODO(ahe): Restore type when feature is implemented in dart2js
484 // checked mode. http://dartbug.com/7733
485 final /* _ElementPredicate */ _f;
480 486
481 TakeWhileIterable(this._iterable, bool this._f(E element)); 487 TakeWhileIterable(this._iterable, bool this._f(E element));
482 488
483 Iterator<E> get iterator { 489 Iterator<E> get iterator {
484 return new TakeWhileIterator<E>(_iterable.iterator, _f); 490 return new TakeWhileIterator<E>(_iterable.iterator, _f);
485 } 491 }
486 } 492 }
487 493
488 class TakeWhileIterator<E> extends Iterator<E> { 494 class TakeWhileIterator<E> extends Iterator<E> {
489 final Iterator<E> _iterator; 495 final Iterator<E> _iterator;
490 final _ElementPredicate _f; 496 // TODO(ahe): Restore type when feature is implemented in dart2js
497 // checked mode. http://dartbug.com/7733
498 final /* _ElementPredicate */ _f;
491 bool _isFinished = false; 499 bool _isFinished = false;
492 500
493 TakeWhileIterator(this._iterator, bool this._f(E element)); 501 TakeWhileIterator(this._iterator, bool this._f(E element));
494 502
495 bool moveNext() { 503 bool moveNext() {
496 if (_isFinished) return false; 504 if (_isFinished) return false;
497 if (!_iterator.moveNext() || !_f(_iterator.current)) { 505 if (!_iterator.moveNext() || !_f(_iterator.current)) {
498 _isFinished = true; 506 _isFinished = true;
499 return false; 507 return false;
500 } 508 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 for (int i = 0; i < _skipCount; i++) _iterator.moveNext(); 549 for (int i = 0; i < _skipCount; i++) _iterator.moveNext();
542 _skipCount = 0; 550 _skipCount = 0;
543 return _iterator.moveNext(); 551 return _iterator.moveNext();
544 } 552 }
545 553
546 E get current => _iterator.current; 554 E get current => _iterator.current;
547 } 555 }
548 556
549 class SkipWhileIterable<E> extends Iterable<E> { 557 class SkipWhileIterable<E> extends Iterable<E> {
550 final Iterable<E> _iterable; 558 final Iterable<E> _iterable;
551 final _ElementPredicate _f; 559 // TODO(ahe): Restore type when feature is implemented in dart2js
560 // checked mode. http://dartbug.com/7733
561 final /* _ElementPredicate */ _f;
552 562
553 SkipWhileIterable(this._iterable, bool this._f(E element)); 563 SkipWhileIterable(this._iterable, bool this._f(E element));
554 564
555 Iterator<E> get iterator { 565 Iterator<E> get iterator {
556 return new SkipWhileIterator<E>(_iterable.iterator, _f); 566 return new SkipWhileIterator<E>(_iterable.iterator, _f);
557 } 567 }
558 } 568 }
559 569
560 class SkipWhileIterator<E> extends Iterator<E> { 570 class SkipWhileIterator<E> extends Iterator<E> {
561 final Iterator<E> _iterator; 571 final Iterator<E> _iterator;
562 final _ElementPredicate _f; 572 // TODO(ahe): Restore type when feature is implemented in dart2js
573 // checked mode. http://dartbug.com/7733
574 final /* _ElementPredicate */ _f;
563 bool _hasSkipped = false; 575 bool _hasSkipped = false;
564 576
565 SkipWhileIterator(this._iterator, bool this._f(E element)); 577 SkipWhileIterator(this._iterator, bool this._f(E element));
566 578
567 bool moveNext() { 579 bool moveNext() {
568 if (!_hasSkipped) { 580 if (!_hasSkipped) {
569 _hasSkipped = true; 581 _hasSkipped = true;
570 while (_iterator.moveNext()) { 582 while (_iterator.moveNext()) {
571 if (!_f(_iterator.current)) return true; 583 if (!_f(_iterator.current)) return true;
572 } 584 }
573 } 585 }
574 return _iterator.moveNext(); 586 return _iterator.moveNext();
575 } 587 }
576 588
577 E get current => _iterator.current; 589 E get current => _iterator.current;
578 } 590 }
OLDNEW
« no previous file with comments | « dart/sdk/lib/async/stream_impl.dart ('k') | dart/sdk/lib/core/list.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698