Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re: Trees using Inline::C

by esskar (Deacon)
on Aug 01, 2005 at 00:03 UTC ( #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 }
        Thanks eskar! Will give that a try.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (2)
As of 2023-02-04 03:01 GMT
Find Nodes?
    Voting Booth?
    I prefer not to run the latest version of Perl because:

    Results (30 votes). Check out past polls.