Merge branch 'master' of git://factorcode.org/git/factor
[factor/jcg.git] / basis / io / timeouts / timeouts.factor
blobfd1b14de19ff4fa755a5253b62b4fbfde282ff7f
1 ! Copyright (C) 2008 Slava Pestov, Doug Coleman\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: kernel calendar alarms io io.encodings accessors\r
4 namespaces fry ;\r
5 IN: io.timeouts\r
6 \r
7 GENERIC: timeout ( obj -- dt/f )\r
8 GENERIC: set-timeout ( dt/f obj -- )\r
9 \r
10 M: decoder set-timeout stream>> set-timeout ;\r
12 M: encoder set-timeout stream>> set-timeout ;\r
14 GENERIC: cancel-operation ( obj -- )\r
16 : queue-timeout ( obj timeout -- alarm )\r
17     [ '[ _ cancel-operation ] ] dip later ;\r
19 : with-timeout* ( obj timeout quot -- )\r
20     3dup drop queue-timeout [ nip call ] dip cancel-alarm ;\r
21     inline\r
23 : with-timeout ( obj quot -- )\r
24     over timeout [ [ dup timeout ] dip with-timeout* ] [ call ] if ;\r
25     inline\r
27 : timeouts ( dt -- )\r
28     [ input-stream get set-timeout ]\r
29     [ output-stream get set-timeout ] bi ;\r