factor/extra/io/timeouts/timeouts.factor

32 lines
825 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.
USING: kernel calendar alarms io.streams.duplex io.encodings ;
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 ;
M: decoder set-timeout decoder-stream set-timeout ;
M: encoder set-timeout encoder-stream 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 )
>r [ timed-out ] curry r> later ;
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