in reply to Re: How to keep C variables "alive" between invocations with Inline::C
in thread How to keep C variables "alive" between invocations with Inline::C

ikegami,
If you want Perl to free it, allocate the struct using Perl's memory functions and set SvLEN appropriately.

I haven't had a chance to read your link yet (still at work) but if it doesn't cover doing that - would you mind providing an example? Ultimately the tree is going to turn into a real tree with branches and leaves so having it all magically get freed if someone does undef $tree would be great.

It doesn't look like you want to provide direct access to the internal details of the struct to the Perl code, so I don't see why you'd want to avoid using an object.

I have to beg forgiveness in advance. When I learn new things, I move in a lot of different directions at once. I ignore advice to not do X unless I understand why (usually it means finding out the hard way which I am ok with). My ultimate goal is to be able to write XS naturally. This means improving my mediocre C skills and getting intimately familiar with the perl API. Getting there though, I intend to start by doing some things in Inline::C that are just a little outside my comfort zone and expand from there. Oh, that's the long answer. The short answer is I don't want to have to write code that looks like the cookbook:

return ((Soldier*)SvIV(SvRV(obj)))->name; vs return soldier.name;

Cheers - L~R

  • Comment on Re^2: How to keep C variables "alive" between invocations with Inline::C
  • Download Code

Replies are listed 'Best First'.
Re^3: How to keep C variables "alive" between invocations with Inline::C
by ikegami (Patriarch) on Sep 27, 2010 at 22:50 UTC

    Ultimately the tree is going to turn into a real tree with branches and leaves so having it all magically get freed if someone does undef $tree would be great.

    That will only happen if the whole tree is in that one scalar's memory block since no destructor is called.

    The short answer is I don't want to have to write code that looks like the cookbook:

    You should use the typemap to do that for you. I'm pretty sure Inline::C allows you to specify a typemap.

Re^3: How to keep C variables "alive" between invocations with Inline::C
by syphilis (Archbishop) on Sep 28, 2010 at 08:42 UTC
    The short answer is I don't want to have to write code that looks like the cookbook

    If it helps, there's a typemap for the Soldier* type in the InlineX::C2XS Cookbook. (Perhaps it should be added to the Inline::C Cookbook as well.)

    Cheers,
    Rob