src/codegen-proto.lisp, doc/list-exports.lisp: Export `inst' readers.
[sod] / src / output-impl.lisp
CommitLineData
dea4d055
MW
1;;; -*-lisp-*-
2;;;
3;;; Output scheduling protocol implementation
4;;;
5;;; (c) 2009 Straylight/Edgeware
6;;;
7
8;;;----- Licensing notice ---------------------------------------------------
9;;;
10;;; This file is part of the Sensble Object Design, an object system for C.
11;;;
12;;; SOD is free software; you can redistribute it and/or modify
13;;; it under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 2 of the License, or
15;;; (at your option) any later version.
16;;;
17;;; SOD is distributed in the hope that it will be useful,
18;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with SOD; if not, write to the Free Software Foundation,
24;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26(cl:in-package #:sod)
27
28;;;--------------------------------------------------------------------------
29;;; Sequencing machinery.
30
31(defmethod print-object ((item sequencer-item) stream)
32 (print-unreadable-object (item stream :type t)
33 (prin1 (sequencer-item-name item) stream)))
34
35(defmethod ensure-sequencer-item ((sequencer sequencer) name)
36 (with-slots (table) sequencer
37 (or (gethash name table)
ea578bb4 38 (setf (gethash name table) (make-sequencer-item name)))))
dea4d055
MW
39
40(defmethod add-sequencer-constraint ((sequencer sequencer) (constraint list))
41 (let ((converted-constraint
42 (mapcar (lambda (name)
43 (ensure-sequencer-item sequencer name))
44 constraint)))
45 (with-slots (constraints) sequencer
46 (pushnew converted-constraint constraints :test #'equal))))
47
48(defmethod add-sequencer-item-function ((sequencer sequencer) name function)
49 (let ((item (ensure-sequencer-item sequencer name)))
50 (pushnew function (sequencer-item-functions item))))
51
52(defmethod invoke-sequencer-items ((sequencer sequencer) &rest arguments)
53 (dolist (item (merge-lists (reverse (sequencer-constraints sequencer))))
54 (dolist (function (reverse (sequencer-item-functions item)))
55 (apply function arguments))))
56
57;;;----- That's all, folks --------------------------------------------------