[squeak-dev] Re: FFI/Alien: Structures with arrrayed fields
Bert Freudenberg
bert at freudenbergs.de
Mon Mar 15 16:09:25 UTC 2010
On 15.03.2010, at 16:33, Schwab,Wilhelm K wrote:
>
> Bert,
>
> Re your suggestion about making an external structure for "complex," please consider that done. The question is how to then handle the array (of pointers), and even the array of longs.
>
> Bill
Ah. Well given this definition:
fields
"self defineFields"
^#(
(gratuitousSize 'long')
(importantStuff 'long*' 256) "64 * 4"
(moreImportantStuff 'ComplexStructure*' 256) "64 * 4"
)
then FFI only defines the accessors to the first item:
importantStuff
"This method was automatically generated"
^ExternalData fromHandle: (handle pointerAt: 5) type: ExternalType long asPointerType
moreImportantStuff
"This method was automatically generated"
^ComplexStructure fromHandle: (handle pointerAt: 261)
You need to write the array accessors yourself:
importantStuffAt: index
(index between: 0 and: 63)
ifFalse: [^ self errorSubscriptBounds: index].
^ExternalData fromHandle: (handle pointerAt: index * 4 + 5) type: ExternalType long asPointerType
moreImportantStuffAt: index
(index between: 0 and: 63)
ifFalse: [^ self errorSubscriptBounds: index].
^ComplexStructure fromHandle: (handle pointerAt: index * 4 + 261)
(that's assuming you like 0-based indices for FFI calls - would be easy to change here).
HTH.
- Bert -
> -----Original Message-----
> From: pharo-project-bounces at lists.gforge.inria.fr [mailto:pharo-project-bounces at lists.gforge.inria.fr] On Behalf Of Schwab,Wilhelm K
> Sent: Monday, March 15, 2010 8:29 AM
> To: Pharo-project at lists.gforge.inria.fr; squeak-dev at lists.squeakfoundation.org
> Subject: [Pharo-project] FFI/Alien: Structures with arrrayed fields
>
> Hello all,
>
> I am faced with something like the following:
>
> struct complex { double real; imaginary; }; struct ugly {
> int gratuitousSize;
> long importantStuff[64];
> complex * moreImportantStuff[64];
> };
>
> The question is how to explain this to FFI? The closest things I have found always seem to be byte arrays, so the "third element" in the arrays of #fields is not well-revealed. Does anyone know whether it is additive or multiplicative, and/or how to use it to make sense of the above struct?
>
> Bill
More information about the Squeak-dev
mailing list
|