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.async; | 5 part of dart.async; |
6 | 6 |
7 // ------------------------------------------------------------------- | 7 // ------------------------------------------------------------------- |
8 // Core Stream types | 8 // Core Stream types |
9 // ------------------------------------------------------------------- | 9 // ------------------------------------------------------------------- |
10 | 10 |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 } | 310 } |
311 | 311 |
312 /** | 312 /** |
313 * Creates a new stream that converts each element of this stream | 313 * Creates a new stream that converts each element of this stream |
314 * to a new value using the [convert] function. | 314 * to a new value using the [convert] function. |
315 * | 315 * |
316 * The returned stream is a broadcast stream if this stream is. | 316 * The returned stream is a broadcast stream if this stream is. |
317 * If a broadcast stream is listened to more than once, each subscription | 317 * If a broadcast stream is listened to more than once, each subscription |
318 * will individually execute `map` for each event. | 318 * will individually execute `map` for each event. |
319 */ | 319 */ |
320 Stream map(convert(T event)) { | 320 Stream/*<S>*/ map/*<S>*/(/*=S*/ convert(T event)) { |
321 return new _MapStream<T, dynamic>(this, convert); | 321 return new _MapStream<T, dynamic/*=S*/>(this, convert); |
322 } | 322 } |
323 | 323 |
324 /** | 324 /** |
325 * Creates a new stream with each data event of this stream asynchronously | 325 * Creates a new stream with each data event of this stream asynchronously |
326 * mapped to a new event. | 326 * mapped to a new event. |
327 * | 327 * |
328 * This acts like [map], except that [convert] may return a [Future], | 328 * This acts like [map], except that [convert] may return a [Future], |
329 * and in that case, the stream waits for that future to complete before | 329 * and in that case, the stream waits for that future to complete before |
330 * continuing with its result. | 330 * continuing with its result. |
331 * | 331 * |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 * into zero or more events. | 472 * into zero or more events. |
473 * | 473 * |
474 * Each incoming event is converted to an [Iterable] of new events, | 474 * Each incoming event is converted to an [Iterable] of new events, |
475 * and each of these new events are then sent by the returned stream | 475 * and each of these new events are then sent by the returned stream |
476 * in order. | 476 * in order. |
477 * | 477 * |
478 * The returned stream is a broadcast stream if this stream is. | 478 * The returned stream is a broadcast stream if this stream is. |
479 * If a broadcast stream is listened to more than once, each subscription | 479 * If a broadcast stream is listened to more than once, each subscription |
480 * will individually call `convert` and expand the events. | 480 * will individually call `convert` and expand the events. |
481 */ | 481 */ |
482 Stream expand(Iterable convert(T value)) { | 482 Stream/*<S>*/ expand(Iterable/*<S>*/ convert(T value)) { |
483 return new _ExpandStream<T, dynamic>(this, convert); | 483 return new _ExpandStream<T, dynamic/*=S*/>(this, convert); |
484 } | 484 } |
485 | 485 |
486 /** | 486 /** |
487 * Pipe the events of this stream into [streamConsumer]. | 487 * Pipe the events of this stream into [streamConsumer]. |
488 * | 488 * |
489 * The events of this stream are added to `streamConsumer` using | 489 * The events of this stream are added to `streamConsumer` using |
490 * [StreamConsumer.addStream]. | 490 * [StreamConsumer.addStream]. |
491 * The `streamConsumer` is closed when this stream has been successfully added | 491 * The `streamConsumer` is closed when this stream has been successfully added |
492 * to it - when the future returned by `addStream` completes without an error. | 492 * to it - when the future returned by `addStream` completes without an error. |
493 * | 493 * |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 } else { | 547 } else { |
548 result._complete(value); | 548 result._complete(value); |
549 } | 549 } |
550 }, | 550 }, |
551 cancelOnError: true | 551 cancelOnError: true |
552 ); | 552 ); |
553 return result; | 553 return result; |
554 } | 554 } |
555 | 555 |
556 /** Reduces a sequence of values by repeatedly applying [combine]. */ | 556 /** Reduces a sequence of values by repeatedly applying [combine]. */ |
557 Future fold(var initialValue, combine(var previous, T element)) { | 557 Future/*<S>*/ fold/*<S>*/(var/*=S*/ initialValue, |
| 558 /*=S*/ combine(var/*=S*/ previous, T element)) { |
| 559 |
558 _Future result = new _Future(); | 560 _Future result = new _Future(); |
559 var value = initialValue; | 561 var value = initialValue; |
560 StreamSubscription subscription; | 562 StreamSubscription subscription; |
561 subscription = this.listen( | 563 subscription = this.listen( |
562 (T element) { | 564 (T element) { |
563 _runUserCode( | 565 _runUserCode( |
564 () => combine(value, element), | 566 () => combine(value, element), |
565 (newValue) { value = newValue; }, | 567 (newValue) { value = newValue; }, |
566 _cancelAndErrorClosure(subscription, result) | 568 _cancelAndErrorClosure(subscription, result) |
567 ); | 569 ); |
(...skipping 1173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1741 class _ControllerEventSinkWrapper<T> implements EventSink<T> { | 1743 class _ControllerEventSinkWrapper<T> implements EventSink<T> { |
1742 EventSink _sink; | 1744 EventSink _sink; |
1743 _ControllerEventSinkWrapper(this._sink); | 1745 _ControllerEventSinkWrapper(this._sink); |
1744 | 1746 |
1745 void add(T data) { _sink.add(data); } | 1747 void add(T data) { _sink.add(data); } |
1746 void addError(error, [StackTrace stackTrace]) { | 1748 void addError(error, [StackTrace stackTrace]) { |
1747 _sink.addError(error, stackTrace); | 1749 _sink.addError(error, stackTrace); |
1748 } | 1750 } |
1749 void close() { _sink.close(); } | 1751 void close() { _sink.close(); } |
1750 } | 1752 } |
OLD | NEW |