]> gitweb.factorcode.org Git - factor.git/commitdiff
io.backend.unix.multiplexers.epoll: update for STRUCT:
authorSlava Pestov <slava@shill.local>
Tue, 1 Sep 2009 19:46:08 +0000 (14:46 -0500)
committerSlava Pestov <slava@shill.local>
Tue, 1 Sep 2009 19:46:08 +0000 (14:46 -0500)
basis/io/backend/unix/multiplexers/epoll/epoll.factor
basis/unix/linux/epoll/epoll.factor

index 98c48c113d307f83423a436c660b44cbc7848581..11fa5620f2b1eb41c987d83e4bb3014c046c65c6 100644 (file)
@@ -1,6 +1,6 @@
-! Copyright (C) 2008 Slava Pestov.
+! Copyright (C) 2008, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types kernel destructors bit-arrays
+USING: accessors classes.struct kernel destructors bit-arrays
 sequences assocs struct-arrays math namespaces locals fry unix
 unix.linux.epoll unix.time io.ports io.backend.unix
 io.backend.unix.multiplexers ;
@@ -16,14 +16,14 @@ TUPLE: epoll-mx < mx events ;
 : <epoll-mx> ( -- mx )
     epoll-mx new-mx
         max-events epoll_create dup io-error >>fd
-        max-events "epoll-event" <struct-array> >>events ;
+        max-events epoll-event <struct-array> >>events ;
 
 M: epoll-mx dispose* fd>> close-file ;
 
 : make-event ( fd events -- event )
-    "epoll-event" <c-object>
-    [ set-epoll-event-events ] keep
-    [ set-epoll-event-fd ] keep ;
+    epoll-event <struct>
+        swap >>events
+        swap >>fd ;
 
 :: do-epoll-ctl ( fd mx what events -- )
     mx fd>> what fd fd events make-event epoll_ctl io-error ;
@@ -55,7 +55,7 @@ M: epoll-mx remove-output-callbacks ( fd mx -- seq )
     epoll_wait multiplexer-error ;
 
 : handle-event ( event mx -- )
-    [ epoll-event-fd ] dip
+    [ fd>> ] dip
     [ EPOLLIN EPOLLOUT bitor do-epoll-del ]
     [ input-available ] [ output-available ] 2tri ;
 
index 7c68dfa45a8124b4e6a22220e90a8a1e928fdc9d..966db32f6068112013967f90aaff9a8b2c04c996 100644 (file)
@@ -1,16 +1,16 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 IN: unix.linux.epoll
-USING: alien.syntax math ;
+USING: alien.syntax classes.struct math ;
 
 FUNCTION: int epoll_create ( int size ) ;
 
 FUNCTION: int epoll_ctl ( int epfd, int op, int fd, epoll_event* event ) ;
 
-C-STRUCT: epoll-event
-    { "uint" "events" }
-    { "uint" "fd" }
-    { "uint" "padding" } ;
+STRUCT: epoll-event
+{ events uint }
+{ fd uint }
+{ padding uint } ;
 
 FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ;