factor/extra/io/timeouts/timeouts.factor

28 lines
715 B
Factor
Raw Normal View History

2008-02-09 22:34:42 -05:00
! Copyright (C) 2008 Slava Pestov, Doug Coleman
! See http://factorcode.org/license.txt for BSD license.
2008-02-21 20:12:55 -05:00
USING: kernel calendar alarms io.streams.duplex ;
2008-02-09 22:34:42 -05:00
IN: io.timeouts
2008-02-10 02:39:21 -05:00
! Won't need this with new slot accessors
2008-02-21 20:12:55 -05:00
GENERIC: timeout ( obj -- dt/f )
GENERIC: set-timeout ( dt/f obj -- )
2008-02-09 22:34:42 -05:00
2008-02-21 20:12:55 -05:00
M: duplex-stream set-timeout
2dup
2008-02-10 02:39:21 -05:00
duplex-stream-in set-timeout
duplex-stream-out set-timeout ;
2008-02-09 22:34:42 -05:00
GENERIC: timed-out ( obj -- )
M: object timed-out drop ;
2008-02-21 20:12:55 -05:00
: queue-timeout ( obj timeout -- alarm )
from-now f rot [ timed-out ] curry add-alarm ;
2008-02-09 22:34:42 -05:00
: with-timeout ( obj quot -- )
2008-02-21 20:12:55 -05:00
over dup timeout dup [
queue-timeout slip cancel-alarm
] [
2drop call
] if ; inline