@@ -8,7 +8,7 @@ import Async.{Listener, await}
8
8
/** An unbounded asynchronous channel. Senders do not wait for matching
9
9
* readers.
10
10
*/
11
- class UnboundedChannel [T ] extends Async .Source [T ]:
11
+ class UnboundedChannel [T ] extends Async .OriginalSource [T ]:
12
12
13
13
private val pending = ListBuffer [T ]()
14
14
private val waiting = mutable.Set [Listener [T ]]()
@@ -37,8 +37,8 @@ class UnboundedChannel[T] extends Async.Source[T]:
37
37
def poll (k : Listener [T ]): Boolean = synchronized :
38
38
drainPending(k)
39
39
40
- def onComplete (k : Listener [T ]): Unit = synchronized :
41
- if ! drainPending(k) then waiting += k
40
+ def addListener (k : Listener [T ]): Unit = synchronized :
41
+ waiting += k
42
42
43
43
def dropListener (k : Listener [T ]): Unit = synchronized :
44
44
waiting -= k
@@ -79,20 +79,20 @@ object SyncChannel:
79
79
var r : Option [T ] = None
80
80
if k2 { x => r = Some (x); true } then r else None
81
81
82
- val canRead = new Async .Source [T ]:
82
+ val canRead = new Async .OriginalSource [T ]:
83
83
def poll (k : Listener [T ]): Boolean =
84
84
link(pendingSends, sender => collapse(sender).map(k) == Some (true ))
85
- def onComplete (k : Listener [T ]): Unit =
86
- if ! poll(k) then pendingReads += k
87
- def dropListener (k : Listener [T ]): Unit =
85
+ def addListener (k : Listener [T ]) = synchronized :
86
+ pendingReads += k
87
+ def dropListener (k : Listener [T ]): Unit = synchronized :
88
88
pendingReads -= k
89
89
90
- val canSend = new Async .Source [Listener [T ]]:
90
+ val canSend = new Async .OriginalSource [Listener [T ]]:
91
91
def poll (k : Listener [Listener [T ]]): Boolean =
92
92
link(pendingReads, k(_))
93
- def onComplete (k : Listener [Listener [T ]]): Unit =
94
- if ! poll(k) then pendingSends += k
95
- def dropListener (k : Listener [Listener [T ]]): Unit =
93
+ def addListener (k : Listener [Listener [T ]]) = synchronized :
94
+ pendingSends += k
95
+ def dropListener (k : Listener [Listener [T ]]): Unit = synchronized :
96
96
pendingSends -= k
97
97
98
98
end SyncChannel
0 commit comments