2011/10/16 Schwab,Wilhelm K <[email protected]>:
> Hello all,
>
> I have some classes that started out as place holders to allow me to load 
> code I wrote for Dolphin, and over time, have become almost useful :)  One 
> thing I really needed was a contiguous array of doubles; there is a LOT of 
> code that uses them.  Enter ExternalArray with many subclasses, most of which 
> translate #at: and #at:put: into appropriate methods of ByteArray 
> (#doubleAt:put:, etc.).
>
> The numbers end up being stored in a byte array, so the indexing looks at 
> position and element size.  Access is very slow, but most of the time, I 
> simply allocate a block of memory (e.g. create a byte array, which is fast) 
> and then pass it to an external C/C++ function to do the real work.
>
> The passing is the subject of this message.  I end up (for FFI) describing 
> the arguments as void*, passing the byte array to the function.  Is there a 
> way to tell FFI that an instance of DOUBLEArray can be treated as a double*?
>
> Bill
>
>
>
>


Just a warning: beware of alignment. ByteArray are 4-byte aligned,
some libraries might require double * to be 8-byte aligned.
See http://smallissimo.blogspot.com/2011/08/smallapack-progress-on-squeak.html

Otherwise, there is no problem for declaring a double * or a float *,
see how it is used in http://www.squeaksource.com/Smallapack
The problem I did not resolve is to pass an array of structures other
than with void *...

Nicolas

Reply via email to