| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:async/async.dart'; |
| 8 |
| 7 import 'src/stream_channel_transformer.dart'; | 9 import 'src/stream_channel_transformer.dart'; |
| 8 | 10 |
| 9 export 'src/delegating_stream_channel.dart'; | 11 export 'src/delegating_stream_channel.dart'; |
| 10 export 'src/isolate_channel.dart'; | 12 export 'src/isolate_channel.dart'; |
| 11 export 'src/json_document_transformer.dart'; | 13 export 'src/json_document_transformer.dart'; |
| 12 export 'src/multi_channel.dart'; | 14 export 'src/multi_channel.dart'; |
| 13 export 'src/stream_channel_completer.dart'; | 15 export 'src/stream_channel_completer.dart'; |
| 14 export 'src/stream_channel_transformer.dart'; | 16 export 'src/stream_channel_transformer.dart'; |
| 15 | 17 |
| 16 /// An abstract class representing a two-way communication channel. | 18 /// An abstract class representing a two-way communication channel. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 new _StreamChannel<T>(stream, sink); | 70 new _StreamChannel<T>(stream, sink); |
| 69 | 71 |
| 70 /// Connects [this] to [other], so that any values emitted by either are sent | 72 /// Connects [this] to [other], so that any values emitted by either are sent |
| 71 /// directly to the other. | 73 /// directly to the other. |
| 72 void pipe(StreamChannel<T> other); | 74 void pipe(StreamChannel<T> other); |
| 73 | 75 |
| 74 /// Transforms [this] using [transformer]. | 76 /// Transforms [this] using [transformer]. |
| 75 /// | 77 /// |
| 76 /// This is identical to calling `transformer.bind(channel)`. | 78 /// This is identical to calling `transformer.bind(channel)`. |
| 77 StreamChannel transform(StreamChannelTransformer<dynamic, T> transformer); | 79 StreamChannel transform(StreamChannelTransformer<dynamic, T> transformer); |
| 80 |
| 81 /// Transforms only the [stream] component of [this] using [transformer]. |
| 82 StreamChannel<T> transformStream(StreamTransformer<T, T> transformer); |
| 83 |
| 84 /// Transforms only the [sink] component of [this] using [transformer]. |
| 85 StreamChannel<T> transformSink(StreamSinkTransformer<T, T> transformer); |
| 86 |
| 87 /// Returns a copy of [this] with [stream] replaced by [change]'s return |
| 88 /// value. |
| 89 StreamChannel<T> changeStream(Stream<T> change(Stream<T> stream)); |
| 90 |
| 91 /// Returns a copy of [this] with [sink] replaced by [change]'s return |
| 92 /// value. |
| 93 StreamChannel<T> changeSink(StreamSink<T> change(StreamSink<T> sink)); |
| 78 } | 94 } |
| 79 | 95 |
| 80 /// An implementation of [StreamChannel] that simply takes a stream and a sink | 96 /// An implementation of [StreamChannel] that simply takes a stream and a sink |
| 81 /// as parameters. | 97 /// as parameters. |
| 82 /// | 98 /// |
| 83 /// This is distinct from [StreamChannel] so that it can use | 99 /// This is distinct from [StreamChannel] so that it can use |
| 84 /// [StreamChannelMixin]. | 100 /// [StreamChannelMixin]. |
| 85 class _StreamChannel<T> extends StreamChannelMixin<T> { | 101 class _StreamChannel<T> extends StreamChannelMixin<T> { |
| 86 final Stream<T> stream; | 102 final Stream<T> stream; |
| 87 final StreamSink<T> sink; | 103 final StreamSink<T> sink; |
| 88 | 104 |
| 89 _StreamChannel(this.stream, this.sink); | 105 _StreamChannel(this.stream, this.sink); |
| 90 } | 106 } |
| 91 | 107 |
| 92 /// A mixin that implements the instance methods of [StreamChannel] in terms of | 108 /// A mixin that implements the instance methods of [StreamChannel] in terms of |
| 93 /// [stream] and [sink]. | 109 /// [stream] and [sink]. |
| 94 abstract class StreamChannelMixin<T> implements StreamChannel<T> { | 110 abstract class StreamChannelMixin<T> implements StreamChannel<T> { |
| 95 void pipe(StreamChannel<T> other) { | 111 void pipe(StreamChannel<T> other) { |
| 96 stream.pipe(other.sink); | 112 stream.pipe(other.sink); |
| 97 other.stream.pipe(sink); | 113 other.stream.pipe(sink); |
| 98 } | 114 } |
| 99 | 115 |
| 100 StreamChannel transform(StreamChannelTransformer<dynamic, T> transformer) => | 116 StreamChannel transform(StreamChannelTransformer<dynamic, T> transformer) => |
| 101 transformer.bind(this); | 117 transformer.bind(this); |
| 118 |
| 119 StreamChannel<T> transformStream(StreamTransformer<T, T> transformer) => |
| 120 changeStream(transformer.bind); |
| 121 |
| 122 StreamChannel<T> transformSink(StreamSinkTransformer<T, T> transformer) => |
| 123 changeSink(transformer.bind); |
| 124 |
| 125 StreamChannel<T> changeStream(Stream<T> change(Stream<T> stream)) => |
| 126 new StreamChannel(change(stream), sink); |
| 127 |
| 128 StreamChannel<T> changeSink(StreamSink<T> change(StreamSink<T> sink)) => |
| 129 new StreamChannel(stream, change(sink)); |
| 102 } | 130 } |
| OLD | NEW |