#!/usr/bin/perl package Node; use strict; use warnings; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'__EOI__', NAME => 'Node', CLEAN_AFTER_BUILD =>0, TYPEMAPS => 'Node.typemap'; #define CLASS "Node" // XXX no children for now typedef struct Node { struct Node* parent; SV* sv; } Node; Node *new( const char *classname ) { Node *t; Newx( t, 1, Node ); t->sv = newSViv( 0 ); return t; } // should NOT alter refcount Node* set_parent( Node* self, Node* parent ) { self->parent = parent; return self; } Node* get_parent(Node* self) { return self->parent; } // XXX get/set children deferred void destroy_node(Node* self) { Safefree(self); } __EOI__ sub DESTROY { my $self = shift; warn "destroying $self"; $self->destroy_node; } package main; use Devel::Peek; $|++; my $node = Node->new(); my $parent = Node->new(); print "NODE: "; Dump($node); print "---\n"; print "PARENT: "; Dump($parent); print "---\n"; $node->set_parent($parent); print "FROM FIELD: "; print Dump($node->get_parent); print "---\n";