Bio-PhyloXS
view release on metacpan or search on metacpan
lib/Bio/PhyloXS/Listable.xs view on Meta::CPAN
sv_setref_pv( sv, package[idx], (void*)element );
SvREFCNT_inc(sv);
av_push(self->entities, sv);
if ( element->_type == _NODE_ ) {
((Node*)element)->tree = (Tree*)self;
}
}
else {
croak("Object mismatch!");
}
}
void insert_at_index(Listable* self, Identifiable* element, int index) {
if ( can_contain(self,element) ) {
SV* sv = newSV(0);
int idx = element->_index;
sv_setref_pv( sv, package[idx], (void*)element );
SvREFCNT_inc(sv);
av_store(self->entities, index, sv);
}
else {
croak("Object mismatch!");
}
}
void splice_at_index(Listable* self, Identifiable* element, int index) {
if ( can_contain(self,element) ) {
// move any subsequent elements over
//int i;
//for ( i = ( self->used - 1 ); i >= index; i-- ) {
// self->entities[i+1] = self->entities[i];
//}
//self->entities[index] = element;
//SvREFCNT_inc(element->ref);
}
else {
croak("Object mismatch!");
}
}
AV* get_entities(Listable* self) {
return self->entities;
}
void destroy_listable(Listable* self) {
destroy_writable((Writable*)self);
//SvREFCNT_dec( self->entities );
}
MODULE = Bio::PhyloXS::Listable PACKAGE = Bio::PhyloXS::Listable
PROTOTYPES: DISABLE
void
initialize_listable (self)
Listable * self
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
initialize_listable(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 */
int
can_contain (self, element)
Listable * self
Identifiable * element
void
insert (self, element)
Listable * self
Identifiable * element
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
insert(self, element);
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 */
void
insert_at_index (self, element, index)
Listable * self
Identifiable * element
int index
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
insert_at_index(self, element, index);
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 */
void
splice_at_index (self, element, index)
Listable * self
Identifiable * element
int index
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
splice_at_index(self, element, index);
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 */
AV *
get_entities (self)
Listable * self
void
destroy_listable (self)
Listable * self
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
destroy_listable(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 2.610 seconds using v1.01-cache-2.11-cpan-71847e10f99 )