Better %SYS-GETTID.
[iolib.git] / io.multiplex / fd-entry.lisp
blob9d2519033c7d977ebabb0d10d26199f7cb0cdd2d
1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; indent-tabs-mode: nil -*-
2 ;;;
3 ;;; fd-entry.lisp --- FD event structure.
4 ;;;
6 (in-package :io.multiplex)
8 ;;;; EVENT
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))
16 (:copier nil))
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))
24 ;;;; FD-ENTRY
26 (defstruct (fd-entry
27 (:constructor make-fd-entry (fd))
28 (:copier nil))
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)
35 (case 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)
40 (case 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))))