Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Ellipsis in perl XS

by rafl (Friar)
on Sep 04, 2006 at 22:32 UTC ( #571162=note: print w/replies, xml ) Need Help??

in reply to Ellipsis in perl XS

That's exactly right.

If you want to pass a list of objects (let's say pointers of type foo*) that require a typemap you usually create a typemap that simply calls a function (let's say SvFoo()) to convert a foo pointer to an SV:

TYPEMAP foo* T_FOO INPUT T_FOO $var = ($type)SvFoo($var);

And in your XS code do:

void my_xsub(...) PREINIT: int i; foo **foos = NULL; CODE: foos = (foo**)malloc(sizeof(foo*) * items); for (i = 0; i < items; i++) { foos[i] = SvFoo(ST(i)); } # do something with foos

Now the only thing you need to do is to define a SvFoo function which might look like that:

foo* SvFoo(SV* foo) { SV* ret; IV tmp = SvIV((SV*)SvRV(foo)); ret = INT2PTR(foo*, tmp); }

Cheers, Flo

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://571162]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2017-10-20 16:36 GMT
Find Nodes?
    Voting Booth?
    My fridge is mostly full of:

    Results (264 votes). Check out past polls.