Index: dart/sdk/lib/async/signal.dart |
=================================================================== |
--- dart/sdk/lib/async/signal.dart (revision 17062) |
+++ dart/sdk/lib/async/signal.dart (working copy) |
@@ -1,90 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// 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. |
- |
-// part of dart.async; |
- |
-/** |
- * A basic asynchronous notification. |
- */ |
-abstract class Signal { |
- factory Signal.delayed(int milliseconds) { |
- var completer = new SignalCompleter(); |
- new Timer(milliseconds, (_) => completer.complete()); |
- return completer.signal; |
- } |
- /** |
- * The [onComplete] handler is called when the signal completes. |
- * |
- * If the signal is already complete, the [onComplete] handler is called |
- * as soon as possible, but no sooner than the next time an event is fired. |
- */ |
- void then(void onComplete()); |
-} |
- |
-typedef _SignalCompleteHandler(); |
- |
-/** |
- * Simple [Signal] controller that creates a [Signal] and allows completing it. |
- */ |
-class SignalCompleter { |
- final Signal signal; |
- SignalCompleter() : signal = new _SignalImpl(); |
- void complete() { |
- _SignalImpl mySignal = signal; |
- mySignal._complete(); |
- } |
-} |
- |
-/** |
- * Simple Signal implementation receiving its completion from a |
- * [SignalCompleter]. |
- */ |
-class _SignalImpl implements Signal { |
- /** Single-linked list of "done" event handlers to notify. */ |
- _SignalListener _listeners = null; |
- |
- /** Whether the signal is already completed. */ |
- bool _isComplete = false; |
- |
- void then(void onComplete()) { |
- _listeners = new _SignalListener(_listeners, onComplete); |
- if (_isComplete) { |
- // Schedule the done events as soon as the event queue is ready. |
- new Timer(0, (Timer timer) { _sendDone(); }); |
- } |
- } |
- |
- /** |
- * Complete the signal. |
- * |
- * This immediately notifies all listeners on the signal. |
- */ |
- void _complete() { |
- assert(!_isComplete); // Only complete once. |
- _isComplete = true; |
- _sendDone(); |
- } |
- |
- /** |
- * Notify all listeners. |
- */ |
- void _sendDone() { |
- while (_listeners != null) { |
- _DoneHandler onDone = _listeners.listener; |
- _listeners = _listeners.next; |
- try { |
- onDone(); |
- } catch (e, s) { |
- new AsyncError(e, s).throwDelayed(); |
- } |
- } |
- } |
-} |
- |
-/** Single-linked list element of the listeners on a [_SignalImpl]. */ |
-class _SignalListener { |
- _SignalListener next; |
- _SignalCompleteHandler listener; |
- _SignalListener(this.next, this.listener); |
-} |