1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; indent-tabs-mode: nil -*-
3 ;;; fd-entry.lisp --- FD event structure.
6 (in-package :io.multiplex
)
10 (deftype fd-event-type
()
11 '(member :read
:write
))
13 (defstruct (fd-handler
14 (:constructor make-fd-handler
15 (fd type callback one-shot-p
&optional timer
))
17 (fd nil
:type unsigned-byte
)
18 (type nil
:type fd-event-type
)
19 (callback nil
:type function-designator
)
20 (timer nil
:type
(or null timer
))
21 ;; one-shot events are removed after being triggered
22 (one-shot-p nil
:type boolean
))
27 (:constructor make-fd-entry
(fd))
29 (fd 0 :type unsigned-byte
)
30 (read-handler nil
:type
(or null fd-handler
))
31 (write-handler nil
:type
(or null fd-handler
))
32 (error-callback nil
:type
(or null function-designator
)))
34 (defun fd-entry-handler (fd-entry event-type
)
36 (:read
(fd-entry-read-handler fd-entry
))
37 (:write
(fd-entry-write-handler fd-entry
))))
39 (defun (setf fd-entry-handler
) (event fd-entry event-type
)
41 (:read
(setf (fd-entry-read-handler fd-entry
) event
))
42 (:write
(setf (fd-entry-write-handler fd-entry
) event
))))
44 (defun fd-entry-empty-p (fd-entry)
45 (and (null (fd-entry-read-handler fd-entry
))
46 (null (fd-entry-write-handler fd-entry
))))