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:
is that ok?