Next: cbuffers strings, Up: cbuffers [Index]
Generalised C buffers are meant to be used in interfaces to foreign C language libraries, when a pointer to raw data is required as argument.
A generalised C buffer is an object capable of holding an array of
mutable bytes referenced by a pointer; such Scheme objects are:
bytevectors, pointer objects, instances of memory-block.
A generalised C sticky buffer is an object capable of holding an
array of mutable bytes referenced by a pointer, whose data area is never
moved around by the garbage collector; such Scheme objects are: pointer
objects, instances of memory-block. Sticky buffers are meant to
be used when calling out to C functions that call back to Scheme.
(vicare-scheme)Memory blocks for details on memory blocks.
Two arguments to function are usually needed to represent a generalised C buffer: the buffer value itself and an optional length.
memory-block instance, or pointer object.
#f or an exact integer in the
range of the C language type size_t. When the buffer argument is
a pointer object: the length argument must represent the number of bytes
available in the referenced memory block; otherwise the length argument
is ignored.
Here is an example function accepting a generalised C buffer argument buf and its optional length argument buf.len:
(define fun
(case-lambda
((buf)
(fun buf #f))
((buf buf.len)
(define who 'fun)
(with-arguments-validation (who)
((general-c-buffer buf)
(general-c-buffer.len buf buf.len))
(do-something-with buf buf.len)))))