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