From: "John Emhoff" thehofffs@hotmail.com Date: February 7, 2006 6:24:16 PM EST (CA) To: gambit-list@iro.umontreal.ca Subject: FFI and vectors
Is there a way I can convert a u32vector or whatever to the
appropriate C type (unsigned int * or > void*) to give to a c- lambda? The docs aren't too explicit on how to do this, as far as I can tell...
There is no builtin conversion between u32vectors and the C ___U32* pointer type. I may add this in the future, but I haven't yet because the "correct" implementation (which copies the u32vector to a C heap allocated array of ___U32) is probably too slow for most applications.
A way around this is to pass a "scheme-object" and to cast it to a ___U32*. This will only work if you know that the garbage collector will not be called (this might move the object). This (untested) code should do the trick:
(c-declare "int foo (___U32* v) { return v[0] + v[1] + v[2]; }")
(define foo (c-lambda (scheme-object) int "___result = foo (___CAST (___U32*,___BODY(___arg1)));"))
(pp (foo (u32vector 1 2 3)))
Marc