1 ! Copyright (C) 2005, 2008 Chris Double, Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors concurrency.mailboxes kernel continuations ;
4 IN: concurrency.promises
6 TUPLE: promise mailbox ;
8 : <promise> ( -- promise )
9 <mailbox> promise boa ;
11 : promise-fulfilled? ( promise -- ? )
12 mailbox>> mailbox-empty? not ;
14 ERROR: promise-already-fulfilled promise ;
16 : fulfill ( value promise -- )
17 dup promise-fulfilled? [
18 promise-already-fulfilled
23 : ?promise-timeout ( promise timeout -- result )
24 [ mailbox>> ] dip block-if-empty mailbox-peek ;
26 : ?promise ( promise -- result )