Accesses a typed aref vector efficiently.
system
typed-aref type vector byte-index => value
setf (typed-aref type vector byte-index) value => value
type⇩ |
A type specifier. |
vector⇩ |
A vector created by make-typed-aref-vector. |
byte-index⇩ |
A non-negative fixnum. |
value |
An object of type type. |
value |
An object of type type. |
The accessor typed-aref
allows efficient access to a typed aref vector.
The following values of type are accepted:
(unsigned-byte 32)
(signed-byte 32)
(unsigned-byte 16)
(signed-byte 16)
(unsigned-byte 8)
(signed-byte 8)
Additionally in 64-bit LispWorks only, the following values of type are also accepted:
(unsigned-byte 64)
(signed-byte 64)
vector must be an object returned by make-typed-aref-vector.
byte-index specifies the index in 8-bit bytes from the start of the data in the vector. It must be a non-negative fixnum which is less than the byte-length argument passed to make-typed-aref-vector.
typed-aref
and (setf typed-aref)
will be inlined to code which is as efficient as possible when compiled with (optimize (safety 0))
and a constant type. As usual, you need to add (optimize (float 0))
to remove boxing for the float types.
Efficient access to foreign arrays is also available. See fli:foreign-typed-aref in the Foreign Language Interface User Guide and Reference Manual.
(defun double-float-typed-aref-incf (x y z) (declare (optimize (float 0) (safety 0))) (incf (sys:typed-aref 'double-float x y) (the double-float z)) x)
make-typed-aref-vector
28.2 Optimized integer arithmetic and integer vector access
LispWorks® User Guide and Reference Manual - 01 Dec 2021 19:31:02