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

Side by Side Diff: sdk/lib/async/stream.dart

Issue 2975583002: Update docs on Stream.skip/take/skipWhile/takeWhile. (Closed)
Patch Set: Address comment. Created 3 years, 5 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 | « no previous file | no next file » | 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) 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 "async.dart"; 5 part of "async.dart";
6 6
7 // ------------------------------------------------------------------- 7 // -------------------------------------------------------------------
8 // Core Stream types 8 // Core Stream types
9 // ------------------------------------------------------------------- 9 // -------------------------------------------------------------------
10 10
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 * 980 *
981 * In case of a `done` event the future completes with the given 981 * In case of a `done` event the future completes with the given
982 * [futureValue]. 982 * [futureValue].
983 */ 983 */
984 Future<E> drain<E>([E futureValue]) => 984 Future<E> drain<E>([E futureValue]) =>
985 listen(null, cancelOnError: true).asFuture<E>(futureValue); 985 listen(null, cancelOnError: true).asFuture<E>(futureValue);
986 986
987 /** 987 /**
988 * Provides at most the first [count] data events of this stream. 988 * Provides at most the first [count] data events of this stream.
989 * 989 *
990 * Forwards all events of this stream to the returned stream 990 * Returns a stream that emits the same events that this stream would
991 * until [count] data events have been forwarded or this stream ends, 991 * if listened to at the same time,
992 * then ends the returned stream with a done event. 992 * until either this stream ends or it has emitted [count] data events,
993 * at which point the returned stream is done.
993 * 994 *
994 * If this stream produces fewer than [count] data events before it's done, 995 * If this stream produces fewer than [count] data events before it's done,
995 * so will the returned stream. 996 * so will the returned stream.
996 * 997 *
997 * Starts listening to this stream when the returned stream is listened to 998 * Starts listening to this stream when the returned stream is listened to
998 * and stops listening when the first [count] data events have been received. 999 * and stops listening when the first [count] data events have been received.
999 * 1000 *
1000 * This means that if this is a single-subscription (non-broadcast) streams 1001 * This means that if this is a single-subscription (non-broadcast) streams
1001 * it cannot be reused after the returned stream has been listened to. 1002 * it cannot be reused after the returned stream has been listened to.
1002 * 1003 *
1003 * If this is a broadcast stream, the returned stream is a broadcast stream. 1004 * If this is a broadcast stream, the returned stream is a broadcast stream.
1004 * In that case, the events are only counted from the time 1005 * In that case, the events are only counted from the time
1005 * the returned stream is listened to. 1006 * the returned stream is listened to.
1006 */ 1007 */
1007 Stream<T> take(int count) { 1008 Stream<T> take(int count) {
1008 return new _TakeStream<T>(this, count); 1009 return new _TakeStream<T>(this, count);
1009 } 1010 }
1010 1011
1011 /** 1012 /**
1012 * Forwards data events while [test] is successful. 1013 * Forwards data events while [test] is successful.
1013 * 1014 *
1014 * The returned stream provides the same events as this stream as long 1015 * Returns a stream that provides the same events as this stream
1015 * as [test] returns `true` for the event data. The stream is done 1016 * until [test] fails for a data event.
1016 * when either this stream is done, or when this stream first provides 1017 * The returned stream is done when either this stream is done,
1017 * a value that [test] doesn't accept. 1018 * or when this stream first emits a data event that fails [test].
1018 * 1019 *
1019 * Stops listening to the stream after the accepted elements. 1020 * The `test` call is considered failing if it returns a non-`true` value
1021 * or if it throws. If the `test` call throws, the error is emitted as the
1022 * last event on the returned streams.
1023 *
1024 * Stops listening to this stream after the accepted elements.
1020 * 1025 *
1021 * Internally the method cancels its subscription after these elements. This 1026 * Internally the method cancels its subscription after these elements. This
1022 * means that single-subscription (non-broadcast) streams are closed and 1027 * means that single-subscription (non-broadcast) streams are closed and
1023 * cannot be reused after a call to this method. 1028 * cannot be reused after a call to this method.
1024 * 1029 *
1025 * The returned stream is a broadcast stream if this stream is. 1030 * The returned stream is a broadcast stream if this stream is.
1026 * For a broadcast stream, the events are only tested from the time 1031 * For a broadcast stream, the events are only tested from the time
1027 * the returned stream is listened to. 1032 * the returned stream is listened to.
1028 */ 1033 */
1029 Stream<T> takeWhile(bool test(T element)) { 1034 Stream<T> takeWhile(bool test(T element)) {
1030 return new _TakeWhileStream<T>(this, test); 1035 return new _TakeWhileStream<T>(this, test);
1031 } 1036 }
1032 1037
1033 /** 1038 /**
1034 * Skips the first [count] data events from this stream. 1039 * Skips the first [count] data events from this stream.
1035 * 1040 *
1041 * Returns a stream that emits the same events as this stream would
1042 * if listened to at the same time, except that the first [count]
1043 * data events are not emitted.
1044 * The returned stream is done when this stream is.
1045 *
1046 * If this stream emits fewer than [count] data events
1047 * before being done, the returned stream emits no data events.
1048 *
1036 * The returned stream is a broadcast stream if this stream is. 1049 * The returned stream is a broadcast stream if this stream is.
1037 * For a broadcast stream, the events are only counted from the time 1050 * For a broadcast stream, the events are only counted from the time
1038 * the returned stream is listened to. 1051 * the returned stream is listened to.
1039 */ 1052 */
1040 Stream<T> skip(int count) { 1053 Stream<T> skip(int count) {
1041 return new _SkipStream<T>(this, count); 1054 return new _SkipStream<T>(this, count);
1042 } 1055 }
1043 1056
1044 /** 1057 /**
1045 * Skip data events from this stream while they are matched by [test]. 1058 * Skip data events from this stream while they are matched by [test].
1046 * 1059 *
1060 * Returns a stream that emits the same events as this stream,
1061 * except that data events are not emitted until a data event fails `test`.
1062 * The test fails when called with a data event
1063 * if it returns a non-`true` value or if the call to `test` throws.
1064 * If the call throws, the error is emitted as an error event
1065 * on the returned stream instead of the data event,
1066 * otherwise the event that made `test` return non-true is emitted as the
1067 * first data event.
1068 *
1047 * Error and done events are provided by the returned stream unmodified. 1069 * Error and done events are provided by the returned stream unmodified.
1048 * 1070 *
1049 * Starting with the first data event where [test] returns false for the
1050 * event data, the returned stream will have the same events as this stream.
1051 *
1052 * The returned stream is a broadcast stream if this stream is. 1071 * The returned stream is a broadcast stream if this stream is.
1053 * For a broadcast stream, the events are only tested from the time 1072 * For a broadcast stream, the events are only tested from the time
1054 * the returned stream is listened to. 1073 * the returned stream is listened to.
1055 */ 1074 */
1056 Stream<T> skipWhile(bool test(T element)) { 1075 Stream<T> skipWhile(bool test(T element)) {
1057 return new _SkipWhileStream<T>(this, test); 1076 return new _SkipWhileStream<T>(this, test);
1058 } 1077 }
1059 1078
1060 /** 1079 /**
1061 * Skips data events if they are equal to the previous data event. 1080 * Skips data events if they are equal to the previous data event.
1062 * 1081 *
1063 * The returned stream provides the same events as this stream, except 1082 * The returned stream provides the same events as this stream, except
1064 * that it never provides two consecutive data events that are equal. 1083 * that it never provides two consecutive data events that are equal.
1065 * That is, errors are passed through to the returned stream, and 1084 * That is, errors are passed through to the returned stream, and
1066 * data events are passed through if they are distinct from the most 1085 * data events are passed through if they are distinct from the most
1067 * recently emitted data event. 1086 * recently emitted data event.
1068 * 1087 *
1069 * Equality is determined by the provided [equals] method. If that is 1088 * Equality is determined by the provided [equals] method. If that is
1070 * omitted, the '==' operator on the last provided data element is used. 1089 * omitted, the '==' operator on the last provided data element is used.
1071 * 1090 *
1072 * If [equals] throws, the data event is replaced by an error event 1091 * If [equals] throws, the data event is replaced by an error event
1073 * containing the thrown error. The behavior is equivalent to the 1092 * containing the thrown error. The behavior is equivalent to the
1074 * original stream emitting the error event. 1093 * original stream emitting the error event, and it doesn't change
1094 * the what the most recently emitted data event is.
1075 * 1095 *
1076 * The returned stream is a broadcast stream if this stream is. 1096 * The returned stream is a broadcast stream if this stream is.
1077 * If a broadcast stream is listened to more than once, each subscription 1097 * If a broadcast stream is listened to more than once, each subscription
1078 * will individually perform the `equals` test. 1098 * will individually perform the `equals` test.
1079 */ 1099 */
1080 Stream<T> distinct([bool equals(T previous, T next)]) { 1100 Stream<T> distinct([bool equals(T previous, T next)]) {
1081 return new _DistinctStream<T>(this, equals); 1101 return new _DistinctStream<T>(this, equals);
1082 } 1102 }
1083 1103
1084 /** 1104 /**
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 new RangeError.index(index, this, "index", null, elementIndex)); 1394 new RangeError.index(index, this, "index", null, elementIndex));
1375 }, 1395 },
1376 cancelOnError: true); 1396 cancelOnError: true);
1377 return future; 1397 return future;
1378 } 1398 }
1379 1399
1380 /** 1400 /**
1381 * Creates a new stream with the same events as this stream. 1401 * Creates a new stream with the same events as this stream.
1382 * 1402 *
1383 * Whenever more than [timeLimit] passes between two events from this stream, 1403 * Whenever more than [timeLimit] passes between two events from this stream,
1384 * the [onTimeout] function is called. 1404 * the [onTimeout] function is called, which can emit further events on
1405 * the returned stream.
1385 * 1406 *
1386 * The countdown doesn't start until the returned stream is listened to. 1407 * The countdown doesn't start until the returned stream is listened to.
1387 * The countdown is reset every time an event is forwarded from this stream, 1408 * The countdown is reset every time an event is forwarded from this stream,
1388 * or when the stream is paused and resumed. 1409 * or when the stream is paused and resumed.
1389 * 1410 *
1390 * The [onTimeout] function is called with one argument: an 1411 * The [onTimeout] function is called with one argument: an
1391 * [EventSink] that allows putting events into the returned stream. 1412 * [EventSink] that allows putting events into the returned stream.
1392 * This `EventSink` is only valid during the call to `onTimeout`. 1413 * This `EventSink` is only valid during the call to [onTimeout].
1414 * Calling [EventSink.close] on the sink passed to [onTimeout] closes the
1415 * returned stream, and no futher events are processed.
1393 * 1416 *
1394 * If `onTimeout` is omitted, a timeout will just put a [TimeoutException] 1417 * If [onTimeout] is omitted, a timeout will just put a [TimeoutException]
1395 * into the error channel of the returned stream. 1418 * into the error channel of the returned stream.
1419 * If the call to [onTimeout] throws, the error is emitted on the returned
1420 * stream.
1396 * 1421 *
1397 * The returned stream is a broadcast stream if this stream is. 1422 * The returned stream is a broadcast stream if this stream is.
1398 * If a broadcast stream is listened to more than once, each subscription 1423 * If a broadcast stream is listened to more than once, each subscription
1399 * will have its individually timer that starts counting on listen, 1424 * will have its individually timer that starts counting on listen,
1400 * and the subscriptions' timers can be paused individually. 1425 * and the subscriptions' timers can be paused individually.
1401 */ 1426 */
1402 Stream<T> timeout(Duration timeLimit, {void onTimeout(EventSink<T> sink)}) { 1427 Stream<T> timeout(Duration timeLimit, {void onTimeout(EventSink<T> sink)}) {
1403 StreamController<T> controller; 1428 StreamController<T> controller;
1404 // The following variables are set on listen. 1429 // The following variables are set on listen.
1405 StreamSubscription<T> subscription; 1430 StreamSubscription<T> subscription;
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
1990 } 2015 }
1991 2016
1992 void addError(error, [StackTrace stackTrace]) { 2017 void addError(error, [StackTrace stackTrace]) {
1993 _sink.addError(error, stackTrace); 2018 _sink.addError(error, stackTrace);
1994 } 2019 }
1995 2020
1996 void close() { 2021 void close() {
1997 _sink.close(); 2022 _sink.close();
1998 } 2023 }
1999 } 2024 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698