4 (defclass scalar
(matrix) ())
6 (defun scalar (val &key
(matrix-class 'scalar
))
7 (let ((m (make-instance matrix-class
)))
11 (defgeneric scalar-val
(s))
12 (defmethod scalar-val ((s scalar
)) (aref (matrix-vals s
) 0 0))
14 (defgeneric scalar-set-val
(s v
))
15 (defmethod scalar-set-val ((s scalar
) v
) (setf (matrix-vals s
) v
))
17 (defmethod dim ((s scalar
)) '(1 1))
18 (defmethod val ((s scalar
) i j
) (declare (ignore i
) (ignore j
)) (scalar-val s
))
19 (defmethod set-val ((s scalar
) i j v
&key
(coerce t
))
20 (declare (ignore i
) (ignore j
))
21 (scalar-set-val s
(if coerce
(coerce v
(element-type (class-of s
))) v
)))
24 (defclass bit-scalar
(bit-matrix scalar
)
25 ((initial-element :accessor initial-element
26 :initarg
:initial-element
:initform
0))
27 (:metaclass standard-matrix-class
)
28 (:element-type
(unsigned-byte 1))
29 (:accumulator-type
(unsigned-byte 32))
33 (defclass ub8-scalar
(ub8-matrix scalar
)
34 ((initial-element :accessor initial-element
35 :initarg
:initial-element
:initform
0))
36 (:metaclass standard-matrix-class
)
37 (:element-type
(unsigned-byte 8))
38 (:accumulator-type
(unsigned-byte 32))
40 (:maxval
#.
(- (expt 2 8) 1)))
42 (defclass sb8-scalar
(sb8-matrix scalar
)
43 ((initial-element :accessor initial-element
44 :initarg
:initial-element
:initform
0))
45 (:metaclass standard-matrix-class
)
46 (:element-type
(signed-byte 8))
47 (:accumulator-type
(signed-byte 32))
48 (:minval
#.
(- (expt 2 7)))
49 (:maxval
#.
(- (expt 2 7) 1)))