io.backend.unix.multiplexers.epoll: update for STRUCT:

db4
Slava Pestov 2009-09-01 14:46:08 -05:00
parent 26cc551049
commit 2037667473
2 changed files with 12 additions and 12 deletions

View 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. ! 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 sequences assocs struct-arrays math namespaces locals fry unix
unix.linux.epoll unix.time io.ports io.backend.unix unix.linux.epoll unix.time io.ports io.backend.unix
io.backend.unix.multiplexers ; io.backend.unix.multiplexers ;
@ -16,14 +16,14 @@ TUPLE: epoll-mx < mx events ;
: <epoll-mx> ( -- mx ) : <epoll-mx> ( -- mx )
epoll-mx new-mx epoll-mx new-mx
max-events epoll_create dup io-error >>fd 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 ; M: epoll-mx dispose* fd>> close-file ;
: make-event ( fd events -- event ) : make-event ( fd events -- event )
"epoll-event" <c-object> epoll-event <struct>
[ set-epoll-event-events ] keep swap >>events
[ set-epoll-event-fd ] keep ; swap >>fd ;
:: do-epoll-ctl ( fd mx what events -- ) :: do-epoll-ctl ( fd mx what events -- )
mx fd>> what fd fd events make-event epoll_ctl io-error ; 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 ; epoll_wait multiplexer-error ;
: handle-event ( event mx -- ) : handle-event ( event mx -- )
[ epoll-event-fd ] dip [ fd>> ] dip
[ EPOLLIN EPOLLOUT bitor do-epoll-del ] [ EPOLLIN EPOLLOUT bitor do-epoll-del ]
[ input-available ] [ output-available ] 2tri ; [ input-available ] [ output-available ] 2tri ;

View File

@ -1,16 +1,16 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: unix.linux.epoll IN: unix.linux.epoll
USING: alien.syntax math ; USING: alien.syntax classes.struct math ;
FUNCTION: int epoll_create ( int size ) ; FUNCTION: int epoll_create ( int size ) ;
FUNCTION: int epoll_ctl ( int epfd, int op, int fd, epoll_event* event ) ; FUNCTION: int epoll_ctl ( int epfd, int op, int fd, epoll_event* event ) ;
C-STRUCT: epoll-event STRUCT: epoll-event
{ "uint" "events" } { events uint }
{ "uint" "fd" } { fd uint }
{ "uint" "padding" } ; { padding uint } ;
FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ; FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ;