Cleanup C++ to Lisp translation
Annotate for file src/class-map.lisp
2009-04-05 tobias 1 (in-package :smoke)
15:36:29 ' 2
' 3 (defvar *smoke-id-class-map*
' 4 (make-hash-table)
' 5 "Maps a Smoke module pointer - id pair to a class.")
' 6 ;; FIXME disallow adding a class when threads are running or add a lock.
' 7
2009-05-14 tobias 8 (defun id-class-map (smoke)
2009-06-22 tobias 9 (let ((value (gethash (pointer-address (smoke-module-pointer smoke))
2009-05-14 tobias 10 *smoke-id-class-map*)))
2009-08-02 tobias 11 (assert value ()
2010-01-17 tobias 12 "Unknown smoke module ~A ~A."
21:04:08 ' 13 smoke (smoke-get-module-name (smoke-module-pointer smoke)))
2009-05-14 tobias 14 value))
12:07:00 ' 15
' 16 (defun (setf id-class-map) (new-value smoke)
2009-08-02 tobias 17 (setf (gethash (pointer-address (smoke-module-pointer smoke))
10:12:41 ' 18 *smoke-id-class-map*)
2009-05-14 tobias 19 new-value))
2009-04-05 tobias 20
15:36:29 ' 21 (defun add-id-class-map (smoke)
2009-08-02 tobias 22 (setf (id-class-map smoke) (make-hash-table)))
2009-04-05 tobias 23
15:36:29 ' 24 (defun add-id (smoke-class class)
' 25 "Associates the CLOS class CLASS with SMOKE-CLASS."
2009-08-02 tobias 26 (setf (gethash (id smoke-class) (id-class-map (smoke smoke-class)))
2009-04-05 tobias 27 class))
15:36:29 ' 28
2009-08-27 tobias 29 (defun find-smoke-class (class)
2009-04-05 tobias 30 "Returns the CLOS class for smoke-class CLASS."
2009-08-27 tobias 31 (let* ((class (real-class class))
2009-08-02 tobias 32 (ret (gethash (id class) (id-class-map (smoke class)))))
2009-08-27 tobias 33 (assert (not (null ret))
11:43:13 ' 34 ()
' 35 "The class ~A was not found." (name class))
2009-04-05 tobias 36 ret))