The function
foreign-typed-aref
accesses a foreign array and is compiled to efficient code when compiled at safety 0. It corresponds to
sys:typed-aref
which accesses Lisp vectors.
type
must evaluate to a supported element type for foreign arrays. In 32-bit LispWorks these types are
double-float
,
single-float
,
(unsigned-byte 32)
,
(signed-byte 32)
,
(unsigned-byte 16)
,
(signed-byte 16)
,
(unsigned-byte 8)
,
(signed-byte 8)
and
sys:int32
. In 64-bit LispWorks
type
can also be
(unsigned-byte 64)
or
(signed-byte 64)
.
array is a foreign pointer to a FLI array. Memory can be allocated with:
(fli:allocate-foreign-object
:type :double
:nelems
(ceiling byte-size
(fli:size-of :double)))
to get sufficient alignment for any call to
foreign-typed-aref
.
In the case the memory is allocated by the operating system the best approach is to reference it from Lisp by a pointer type, to avoid making a :c-array foreign type dynamically.
index
should be a valid byte index for
array
. If
index
is declared to be of type
fixnum
then the compiler will optimize it slightly better. Some parts of the FLI (for example, allocate-foreign-object) assume
fixnum
sizes so it is best to use fixnums only.
Efficient access to a Lisp vector object is also available. See
sys:typed-aref
in the
LispWorks User Guide and Reference Manual
.