25 lines
678 B
Plaintext
25 lines
678 B
Plaintext
def makeEvent() {
|
|
def [var fired, var firer] := Ref.promise()
|
|
|
|
def event {
|
|
to signal() {
|
|
firer.resolveRace(null) # all current and future wait()s will resolve
|
|
}
|
|
to reset() {
|
|
if (firer.isDone()) { # ignore multiple resets. If we didn't, then
|
|
# reset() wait() reset() signal() would never
|
|
# resolve that wait().
|
|
# create all fresh state
|
|
def [p, r] := Ref.promise()
|
|
fired := p
|
|
firer := r
|
|
}
|
|
}
|
|
to wait() {
|
|
return fired
|
|
}
|
|
}
|
|
|
|
return event
|
|
}
|