Massive reorganization in progress.
[sod] / src / impl-output.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)
38 (setf (gethash name table)
39 (make-instance 'sequencer-item :name name)))))
40
41(defmethod add-sequencer-constraint ((sequencer sequencer) (constraint list))
42 (let ((converted-constraint
43 (mapcar (lambda (name)
44 (ensure-sequencer-item sequencer name))
45 constraint)))
46 (with-slots (constraints) sequencer
47 (pushnew converted-constraint constraints :test #'equal))))
48
49(defmethod add-sequencer-item-function ((sequencer sequencer) name function)
50 (let ((item (ensure-sequencer-item sequencer name)))
51 (pushnew function (sequencer-item-functions item))))
52
53(defmethod invoke-sequencer-items ((sequencer sequencer) &rest arguments)
54 (dolist (item (merge-lists (reverse (sequencer-constraints sequencer))))
55 (dolist (function (reverse (sequencer-item-functions item)))
56 (apply function arguments))))
57
58;;;----- That's all, folks --------------------------------------------------