]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/io/backend/unix/multiplexers/select/select.factor
use radix literals
[factor.git] / basis / io / backend / unix / multiplexers / select / select.factor
index c62101e478125d2d2777f1b0cb8f9a8605b1e55b..09fd5840c2a0b0c531f9176141a1eda15c180a37 100644 (file)
@@ -1,8 +1,9 @@
 ! Copyright (C) 2004, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types kernel bit-arrays sequences assocs unix
-math namespaces accessors math.order locals unix.time fry
-io.ports io.backend.unix io.backend.unix.multiplexers ;
+USING: alien.data kernel bit-arrays sequences assocs math
+namespaces accessors math.order locals fry io.ports
+io.backend.unix io.backend.unix.multiplexers unix unix.ffi
+unix.time layouts ;
 IN: io.backend.unix.multiplexers.select
 
 TUPLE: select-mx < mx read-fdset write-fdset ;
@@ -11,7 +12,9 @@ TUPLE: select-mx < mx read-fdset write-fdset ;
 ! FD_SET to be an array of cells, so we have to account for
 ! byte order differences on big endian platforms
 : munge ( i -- i' )
-    little-endian? [ BIN: 11000 bitxor ] unless ; inline
+    little-endian? [
+      cell 4 = [ 0b11000 ] [ 0b111000 ] if
+      bitxor ] unless ; inline
 
 : <select-mx> ( -- mx )
     select-mx new-mx
@@ -40,17 +43,17 @@ TUPLE: select-mx < mx read-fdset write-fdset ;
     dup assoc-empty? [ drop 0 ] [ keys supremum ] if ;
 
 : num-fds ( mx -- n )
-    [ reads>> max-fd ] [ writes>> max-fd ] bi max 1+ ;
+    [ reads>> max-fd ] [ writes>> max-fd ] bi max 1 + ;
 
 : init-fdsets ( mx -- nfds read write except )
     [ num-fds ]
-    [ read-fdset/tasks [ init-fdset ] [ underlying>> ] bi ]
-    [ write-fdset/tasks [ init-fdset ] [ underlying>> ] bi ] tri
+    [ read-fdset/tasks [ init-fdset ] keep ]
+    [ write-fdset/tasks [ init-fdset ] keep ] tri
     f ;
 
-M:: select-mx wait-for-events ( us mx -- )
+M:: select-mx wait-for-events ( nanos mx -- )
     mx
-    [ init-fdsets us dup [ make-timeval ] when select multiplexer-error drop ]
+    [ init-fdsets nanos dup [ 1000 /i make-timeval ] when select multiplexer-error drop ]
     [ [ read-fdset/tasks ] keep [ input-available ] check-fdset ]
     [ [ write-fdset/tasks ] keep [ output-available ] check-fdset ]
     tri ;