Bio-PhyloXS
view release on metacpan or search on metacpan
lib/Bio/PhyloXS/Forest/Node.xs view on Meta::CPAN
return ((Listable*)self)->entities;
}
Node* get_first_daughter( Node* self ) {
AV* list = ((Listable*)self)->entities;
if ( av_exists(list,0) ) {
SV* sv = *(av_fetch(list, 0, 0));
return (Node*)SvIV(SvRV(sv));
}
return NULL;
}
int is_child_of( Node* self, Node* parent ) {
if ( self->parent != NULL ) {
return ((Identifiable*)self->parent)->id == ((Identifiable*)parent)->id;
}
return 0;
}
int is_ancestor_of( Node* self, Node* desc ) {
Node* p = desc->parent;
int sid = ((Identifiable*)self)->id;
while( p != NULL ) {
if ( ((Identifiable*)p)->id == sid ) {
return 1;
}
p = p->parent;
}
return 0;
}
int is_terminal( Node* self ) {
return ! av_exists(((Listable*)self)->entities, 0);
}
int is_internal( Node* self ) {
return av_exists(((Listable*)self)->entities, 0);
}
int is_root( Node* self ) {
return self->parent == NULL;
}
void destroy_node(Node* self) {
destroy_listable((Listable*)self);
}
MODULE = Bio::PhyloXS::Forest::Node PACKAGE = Bio::PhyloXS::Forest::Node
PROTOTYPES: DISABLE
Node *
create (classname)
const char * classname
void
initialize_node (self)
Node * self
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
initialize_node(self);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
double
get_branch_length (self)
Node * self
Node *
set_raw_branch_length (self, ...)
Node * self
PREINIT:
I32* temp;
CODE:
temp = PL_markstack_ptr++;
RETVAL = set_raw_branch_length(self);
PL_markstack_ptr = temp;
OUTPUT:
RETVAL
Node *
set_tree (self, tree)
Node * self
Tree * tree
Tree *
get_tree (self)
Node * self
char *
get_rank (self)
Node * self
Node *
set_rank (self, rank)
Node * self
char * rank
Node *
set_raw_parent (self, ...)
Node * self
PREINIT:
I32* temp;
CODE:
temp = PL_markstack_ptr++;
RETVAL = set_raw_parent(self);
PL_markstack_ptr = temp;
OUTPUT:
RETVAL
Node *
get_parent (self)
Node * self
Node *
set_raw_child (self, child, ...)
Node * self
Node * child
PREINIT:
I32* temp;
CODE:
temp = PL_markstack_ptr++;
RETVAL = set_raw_child(self, child);
PL_markstack_ptr = temp;
OUTPUT:
RETVAL
AV *
get_children (self)
Node * self
Node *
get_first_daughter (self)
Node * self
int
is_child_of (self, parent)
Node * self
Node * parent
int
is_ancestor_of (self, desc)
Node * self
Node * desc
int
is_terminal (self)
Node * self
int
is_internal (self)
Node * self
int
is_root (self)
Node * self
void
destroy_node (self)
Node * self
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
destroy_node(self);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
( run in 0.690 second using v1.01-cache-2.11-cpan-71847e10f99 )