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

Unified Diff: lib/stream_zip.dart

Issue 1777453002: Modernize the package's style. (Closed) Base URL: git@github.com:dart-lang/async.git@master
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: lib/stream_zip.dart
diff --git a/lib/stream_zip.dart b/lib/stream_zip.dart
index 055489dbd38cd5dd6eb9dc7015887ee5a8df1f12..cdeb5c9738015a5e0c77e957f4ddf8e0859e49d7 100644
--- a/lib/stream_zip.dart
+++ b/lib/stream_zip.dart
@@ -2,118 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/**
- * Help for combining multiple streams into a single stream.
- */
+/// Import `async.dart` instead.
+@Deprecated("Will be removed in async 2.0.0.")
library dart.pkg.async.stream_zip;
-import "dart:async";
-
-/**
- * A stream that combines the values of other streams.
- */
-class StreamZip extends Stream<List> {
- final Iterable<Stream> _streams;
- StreamZip(Iterable<Stream> streams) : _streams = streams;
-
- StreamSubscription<List> listen(void onData(List data), {
- Function onError,
- void onDone(),
- bool cancelOnError}) {
- cancelOnError = identical(true, cancelOnError);
- List<StreamSubscription> subscriptions = <StreamSubscription>[];
- StreamController controller;
- List current;
- int dataCount = 0;
-
- /// Called for each data from a subscription in [subscriptions].
- void handleData(int index, data) {
- current[index] = data;
- dataCount++;
- if (dataCount == subscriptions.length) {
- List data = current;
- current = new List(subscriptions.length);
- dataCount = 0;
- for (int i = 0; i < subscriptions.length; i++) {
- if (i != index) subscriptions[i].resume();
- }
- controller.add(data);
- } else {
- subscriptions[index].pause();
- }
- }
-
- /// Called for each error from a subscription in [subscriptions].
- /// Except if [cancelOnError] is true, in which case the function below
- /// is used instead.
- void handleError(Object error, StackTrace stackTrace) {
- controller.addError(error, stackTrace);
- }
-
- /// Called when a subscription has an error and [cancelOnError] is true.
- ///
- /// Prematurely cancels all subscriptions since we know that we won't
- /// be needing any more values.
- void handleErrorCancel(Object error, StackTrace stackTrace) {
- for (int i = 0; i < subscriptions.length; i++) {
- subscriptions[i].cancel();
- }
- controller.addError(error, stackTrace);
- }
-
- void handleDone() {
- for (int i = 0; i < subscriptions.length; i++) {
- subscriptions[i].cancel();
- }
- controller.close();
- }
-
- try {
- for (Stream stream in _streams) {
- int index = subscriptions.length;
- subscriptions.add(stream.listen(
- (data) { handleData(index, data); },
- onError: cancelOnError ? handleError : handleErrorCancel,
- onDone: handleDone,
- cancelOnError: cancelOnError));
- }
- } catch (e) {
- for (int i = subscriptions.length - 1; i >= 0; i--) {
- subscriptions[i].cancel();
- }
- rethrow;
- }
-
- current = new List(subscriptions.length);
-
- controller = new StreamController<List>(
- onPause: () {
- for (int i = 0; i < subscriptions.length; i++) {
- // This may pause some subscriptions more than once.
- // These will not be resumed by onResume below, but must wait for the
- // next round.
- subscriptions[i].pause();
- }
- },
- onResume: () {
- for (int i = 0; i < subscriptions.length; i++) {
- subscriptions[i].resume();
- }
- },
- onCancel: () {
- for (int i = 0; i < subscriptions.length; i++) {
- // Canceling more than once is safe.
- subscriptions[i].cancel();
- }
- }
- );
-
- if (subscriptions.isEmpty) {
- controller.close();
- }
- return controller.stream.listen(onData,
- onError: onError,
- onDone: onDone,
- cancelOnError: cancelOnError);
- }
-}
+export "src/stream_zip.dart";

Powered by Google App Engine
This is Rietveld 408576698