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

Re: Trees using Inline::C

by esskar (Deacon)
on Aug 01, 2005 at 00:03 UTC ( [id://479756]=note: print w/replies, xml ) Need Help??


in reply to Trees using Inline::C

SV* get_parent(SV* obj) { Node *node = (Node *)SvIV(SvRV(obj)); if(node != NULL && node->parent != NULL) return new( "Node", node->parent->name, node->parent->desc, node->parent->branch_length ); else return NULL; // not sure }
but i would prefer to set parent to NULL inside the new function, and add an iditional member named "class" to your struct treeNode to ensure the same class name

Replies are listed 'Best First'.
Re^2: Trees using Inline::C
by rvosa (Curate) on Aug 01, 2005 at 00:31 UTC
    Thanks for your reply! But, is that efficient memory usage? Memory has already been allocated when:
    my $parent = Node->new('Homo_neanderthalensis', 'Hominid', 5.02);
    was called, and it seems like this new call to
    return new( /*..etc...*/);
    goes the same route? Or am I missing something? Thanks again!
      sure. you are right; but see, a (Node *) has no information about its (SV *). A workaround would be
      typedef struct treeNode { char* name; char* desc; char* class; //in case we need it double branch_length; SV* obj; // the perlobj SV* obj_ref; // the ref to the perlobj struct treeNode *parent; } Node; SV* new(char* class, char* name, char* desc, double branch_length) { Node* node = malloc(sizeof(Node)); node->obj_ref = newSViv(0); node->obj = newSVrv(obj_ref, class); node->class = savepv(class); node->name = savepv(name); node->desc = savepv(desc); node->branch_length = branch_length; node->parent = NULL; // no parent yet sv_setiv(node->obj, (IV)node); SvREADONLY_on(node->obj); return node->obj_ref; } SV* get_parent(SV* obj) { Node *node = (Node *)SvIV(SvRV(obj)); if(node != NULL && node->parent != NULL) return node->parent->obj_ref; else return NULL; // not sure }
      HTH
        Thanks eskar! Will give that a try.

Log In?
Username:
Password:

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

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

    No recent polls found