2010/3/30 Marc Feeley <feeley@iro.umontreal.ca>

On 2010-03-30, at 10:39 AM, Bradley Lucier wrote:

> I believe you can use something like
>
> ___CAST(___sU8VECTOR*,___BODY_AS(obj,___tSUBTYPED))

The first argument to ___CAST must be a type... but ___sU8VECTOR is the subtype tag (an integer constant).  So you want:

___CAST(___U8*,___BODY_AS(obj,___tSUBTYPED))

because ___U8 is defined as an unsigned char (on most platforms) by gambit.h .

Marc


Yes. I've tried all methods and they all work. Assuming that the third argument is the u8vector:

void *u8vectorptr = ___CAST(void*,&___FETCH_U8(___BODY(___arg3),___INT(0)));
void *u8vectorptr = ___CAST(void*,&___FETCH_U8(___arg3,0));
void *u8vectorptr = ___CAST(___U8*,___BODY_AS(___arg3,___tSUBTYPED));
void *u8vectorptr = ___CAST(void*,___BODY(___arg3));

They all can be cast to uchar* directly:

unsigned char *u8vectorptr = ___CAST(___U8*,___BODY_AS(___arg3,___tSUBTYPED));


All produce the result I expect (apparently).

Thanks a lot for all your explanations. I'd like to put this in the wiki page:

http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Using_Gambit_with_External_Libraries

is that ok?



 
_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list