]> gitweb.factorcode.org Git - factor.git/blob - basis/io/timeouts/timeouts.factor
Fix permission bits
[factor.git] / basis / io / timeouts / timeouts.factor
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 ;\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
11 \r
12 M: encoder set-timeout stream>> set-timeout ;\r
13 \r
14 GENERIC: cancel-operation ( obj -- )\r
15 \r
16 : queue-timeout ( obj timeout -- alarm )\r
17     >r [ cancel-operation ] curry r> later ;\r
18 \r
19 : with-timeout* ( obj timeout quot -- )\r
20     3dup drop queue-timeout >r nip call r> cancel-alarm ;\r
21     inline\r
22 \r
23 : with-timeout ( obj quot -- )\r
24     over timeout [ >r dup timeout r> with-timeout* ] [ call ] if ;\r
25     inline\r
26 \r
27 : timeouts ( dt -- )\r
28     [ input-stream get set-timeout ]\r
29     [ output-stream get set-timeout ] bi ;\r