]> gitweb.factorcode.org Git - factor.git/blob - basis/io/backend/unix/multiplexers/multiplexers.factor
Switch to https urls
[factor.git] / basis / io / backend / unix / multiplexers / multiplexers.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs destructors kernel sequences threads ;
4 IN: io.backend.unix.multiplexers
5
6 TUPLE: mx < disposable fd reads writes ;
7
8 : new-mx ( class -- obj )
9     new-disposable
10         H{ } clone >>reads
11         H{ } clone >>writes ; inline
12
13 GENERIC: add-input-callback ( thread fd mx -- )
14
15 M: mx add-input-callback reads>> push-at ;
16
17 GENERIC: add-output-callback ( thread fd mx -- )
18
19 M: mx add-output-callback writes>> push-at ;
20
21 GENERIC: remove-input-callbacks ( fd mx -- callbacks )
22
23 M: mx remove-input-callbacks reads>> delete-at* drop ;
24
25 GENERIC: remove-output-callbacks ( fd mx -- callbacks )
26
27 M: mx remove-output-callbacks writes>> delete-at* drop ;
28
29 GENERIC: wait-for-events ( nanos mx -- )
30
31 : input-available ( fd mx -- )
32     reads>> delete-at* drop [ resume ] each ;
33
34 : output-available ( fd mx -- )
35     writes>> delete-at* drop [ resume ] each ;