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

Unified Diff: sdk/lib/mdv_observe_impl/mdv_observe_impl.dart

Issue 16003002: Add StreamController.multiplex constructor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove unused code Created 7 years, 7 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
« no previous file with comments | « sdk/lib/async/stream_controller.dart ('k') | sdk/lib/utf/utf_stream.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/mdv_observe_impl/mdv_observe_impl.dart
diff --git a/sdk/lib/mdv_observe_impl/mdv_observe_impl.dart b/sdk/lib/mdv_observe_impl/mdv_observe_impl.dart
index e612f3a3e562ad9920139ba6ca6ebf91ea9df2ef..ed42d62ef2453b0aa663e286f361c9ea0e1546f1 100644
--- a/sdk/lib/mdv_observe_impl/mdv_observe_impl.dart
+++ b/sdk/lib/mdv_observe_impl/mdv_observe_impl.dart
@@ -63,38 +63,23 @@ typedef ObservableBase = Object with ObservableMixin;
* call [notifyPropertyChange]. See that method for an example.
*/
abstract class ObservableMixin implements Observable {
- Set<StreamController<List<ChangeRecord>>> _observers;
- Stream<List<ChangeRecord>> _stream;
+ StreamController _multiplexController;
List<ChangeRecord> _changes;
Stream<List<ChangeRecord>> get changes {
- if (_observers == null) {
- _observers = new Set<StreamController<List<ChangeRecord>>>();
+ if (_multiplexController == null) {
+ _multiplexController =
+ new StreamController<List<ChangeRecord>>.multiplex();
}
- StreamController controller;
- controller = new StreamController(
- onListen: () {
- _observers.add(controller);
- },
- onCancel: () {
- _observers.remove(controller);
- }
- );
- return controller.stream;
+ return _multiplexController.stream;
}
void _deliverChanges() {
var changes = _changes;
_changes = null;
if (hasObservers && changes != null) {
- var observers =
- _observers.toList();
- for (var observer in observers) {
- if (_observers.contains(observer)) {
- // TODO(jmesserly): make "changes" immutable
- observer.add(changes);
- }
- }
+ // TODO(jmesserly): make "changes" immutable
+ _multiplexController.add(changes);
}
}
@@ -102,7 +87,8 @@ abstract class ObservableMixin implements Observable {
* True if this object has any observers, and should call
* [notifyPropertyChange] for changes.
*/
- bool get hasObservers => _observers != null && !_observers.isEmpty;
+ bool get hasObservers => _multiplexController != null &&
+ _multiplexController.hasListener;
/**
* Notify that the field [name] of this object has been changed.
« no previous file with comments | « sdk/lib/async/stream_controller.dart ('k') | sdk/lib/utf/utf_stream.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698