factor/basis/io/timeouts/timeouts.factor

32 lines
892 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 io.encodings accessors
namespaces fry io.streams.null ;
2008-02-09 22:34:42 -05:00
IN: io.timeouts
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
M: decoder set-timeout stream>> set-timeout ;
2008-02-10 02:39:21 -05:00
M: encoder set-timeout stream>> set-timeout ;
GENERIC: cancel-operation ( obj -- )
2008-02-09 22:34:42 -05:00
2008-02-21 20:12:55 -05:00
: queue-timeout ( obj timeout -- alarm )
[ '[ _ cancel-operation ] ] dip later ;
: with-timeout* ( obj timeout quot -- )
3dup drop queue-timeout [ nip call ] dip cancel-alarm ;
inline
2008-02-09 22:34:42 -05:00
: with-timeout ( obj quot -- )
over timeout [ [ dup timeout ] dip with-timeout* ] [ call ] if ;
inline
: timeouts ( dt -- )
[ input-stream get set-timeout ]
[ output-stream get set-timeout ] bi ;
M: null-stream set-timeout 2drop ;