Creates a dynamic-extent foreign pointer which points to the data in a given Lisp array while the forms are executed.
with-dynamic-lisp-array-pointer ( pointer-var lisp-array &key start type ) &body body => last
A variable to be bound to the foreign pointer.
A Lisp array.
An index into the Lisp array. The default is
0
.
A foreign type. The default is
:void
.
A list of forms.
The macro
with-dynamic-lisp-array-pointer
enables the data in a Lisp array (a string or a byte array) to be shared directly with foreign code, without making a copy. A dynamic-extent pointer to the array's data can be used within
body
wherever the :pointer foreign type allows.
with-dynamic-lisp-array-pointer
creates a dynamic extent foreign pointer, with element type
type
, which is initialized to point to the element of
lisp-array
at index
index
.
This foreign pointer is bound to pointer-var , the forms of body are executed and the value of the last form returned.
Pointers created with this macro must be used with care. There are three restrictions:
sys:in-static-area
.(let ((vector
(sys:in-static-area
(make-array 3 :element-type '(unsigned-byte 8)
:initial-contents '(65 77 23)))))
(fli:with-dynamic-lisp-array-pointer
(ptr vector :start 1 :type :unsigned-byte)
(fli:dereference ptr)))
=>
77