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:

- double-float
- float
- single-float
- int32
`(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:

- int64
`(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*