Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^3: Mixing C and perl

by tsee (Curate)
on Jan 17, 2012 at 19:06 UTC ( [id://948385]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Mixing C and perl
in thread Mixing C and perl

In the Perl-hash-wraps-C-struct setup, an object looks like {foo => 'bar', ... '__cptr' => \2131231231}. Well, with- or without the scalar reference to the number-that-is-a-pointer

What you can do to make the XS methods work appropriately on this construct while being able to store stuff regularly from Perl as well, is to define a typemap that will a) check it got a hashref b) check that the class inherits from your package, c) fetch the __cptr slot of your hash-object, d) check it's a scalar ref, e) use the integer as a pointer, f) cast that into your C type. b), d), e), f) are done in T_PTROBJ already. This would allow you to write XS like with T_PTROBJ. The only downside is that you'd lose the ability to access the outer hash from XS.

Replies are listed 'Best First'.
Re^4: Mixing C and perl
by salva (Canon) on Jan 17, 2012 at 22:13 UTC
    The only downside is that you'd lose the ability to access the outer hash from XSM

    Not really, just keep a pointer to the wrapping hash also inside the C structure, as in the OP sample code.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://948385]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2024-04-19 10:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found