AVLTree
view release on metacpan or search on metacpan
dSP;
int count;
//ENTER;
//SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVsv(p1)));
XPUSHs(sv_2mortal(newSVsv(p2)));
PUTBACK;
/* Call the Perl sub to process the callback */
count = call_sv(callback, G_SCALAR);
SPAGAIN;
if(count != 1)
croak("Did not return a value\n");
cmp = POPi;
PUTBACK;
//FREETMPS;
//LEAVE;
return cmp;
}
static SV* svclone(SV* p) {
dTHX; /* fetch context */
if(svp == NULL)
croak("Unable to access tree\n");
tree = INT2PTR(AVLTree*, SvIV(*svp));
SV* result = avltree_find(aTHX_ tree, ST(1));
if(SvOK(result) && SvTYPE(result) != SVt_NULL) {
/* WARN: if it's mortalised e.g. sv_2mortal(...)? returns "Attempt to free unreferenced scalar: SV" */
RETVAL = newSVsv(result);
} else
XSRETURN_UNDEF;
OUTPUT:
RETVAL
int
insert(self, item)
SV* self
SV* item
PROTOTYPE: $$
PREINIT:
AVLTree* tree;
CODE:
SV** svp = hv_fetch((HV*)SvRV(self), "tree", 4, 0);
if(svp == NULL)
croak("Unable to access tree\n");
tree = INT2PTR(AVLTree*, SvIV(*svp));
RETVAL = avltree_insert(tree, item);
OUTPUT:
RETVAL
int
remove(self, item)
SV* self
SV* item
PROTOTYPE: $$
PREINIT:
AVLTree* tree;
CODE:
SV** svp = hv_fetch((HV*)SvRV(self), "tree", 4, 0);
if(svp == NULL)
croak("Unable to access tree\n");
tree = INT2PTR(AVLTree*, SvIV(*svp));
RETVAL = avltree_erase(tree, item);
OUTPUT:
RETVAL
int
size(self)
SV* self
PROTOTYPE: $
PREINIT:
AVLTree* tree;
CODE:
SV** svp = hv_fetch((HV*)SvRV(self), "tree", 4, 0);
if(svp == NULL)
croak("Unable to access tree\n");
tree = INT2PTR(AVLTree*, SvIV(*svp));
RETVAL = avltree_size(tree);
OUTPUT:
RETVAL
SV*
first(self)
SV* self
PROTOTYPE: $
PREINIT:
AVLTree* tree;
AVLTrav* trav;
CODE:
if(svp == NULL)
croak("Unable to access tree\n");
tree = INT2PTR(AVLTree*, SvIV(*svp));
svp = hv_fetch((HV*)SvRV(self), "trav", 4, 0);
if(svp == NULL)
croak("Unable to access tree traversal\n");
trav = INT2PTR(AVLTrav*, SvIV(*svp));
RETVAL = newSVsv(avltfirst(aTHX_ trav, tree));
OUTPUT:
RETVAL
SV*
last(self)
SV* self
PROTOTYPE: $
PREINIT:
AVLTree* tree;
AVLTrav* trav;
CODE:
if(svp == NULL)
croak("Unable to access tree\n");
tree = INT2PTR(AVLTree*, SvIV(*svp));
svp = hv_fetch((HV*)SvRV(self), "trav", 4, 0);
if(svp == NULL)
croak("Unable to access tree traversal\n");
trav = INT2PTR(AVLTrav*, SvIV(*svp));
RETVAL = newSVsv(avltlast(aTHX_ trav, tree));
OUTPUT:
RETVAL
SV*
next(self)
SV* self
PROTOTYPE: $
PREINIT:
AVLTree* tree;
AVLTrav* trav;
CODE:
SV** svp = hv_fetch((HV*)SvRV(self), "trav", 4, 0);
if(svp == NULL)
croak("Unable to access tree traversal\n");
trav = INT2PTR(AVLTrav*, SvIV(*svp));
RETVAL = newSVsv(avltnext(aTHX_ trav));
OUTPUT:
RETVAL
SV*
prev(self)
SV* self
PROTOTYPE: $
PREINIT:
AVLTree* tree;
AVLTrav* trav;
CODE:
SV** svp = hv_fetch((HV*)SvRV(self), "trav", 4, 0);
if(svp == NULL)
croak("Unable to access tree traversal\n");
trav = INT2PTR(AVLTrav*, SvIV(*svp));
RETVAL = newSVsv(avltprev(aTHX_ trav));
OUTPUT:
RETVAL
void DESTROY(self)
SV* self
PROTOTYPE: $
PREINIT:
AVLTree* tree;
AVLTrav* trav;
CODE:
TRACEME("Deleting AVL tree");
PTR2ul|5.007001||p
PTRV|5.006000||p
PUSHMARK|||
PUSH_MULTICALL||5.014000|
PUSHi|||
PUSHmortal|5.009002||p
PUSHn|||
PUSHp|||
PUSHs|||
PUSHu|5.004000||p
PUTBACK|||
PerlIO_clearerr||5.007003|
PerlIO_close||5.007003|
PerlIO_context_layers||5.009004|
PerlIO_eof||5.007003|
PerlIO_error||5.007003|
PerlIO_fileno||5.007003|
PerlIO_fill||5.007003|
PerlIO_flush||5.007003|
PerlIO_get_base||5.007003|
PerlIO_get_bufsiz||5.007003|
{
dSP;
SV* sv = newSVpv(p, 0);
PUSHMARK(sp);
eval_sv(sv, G_SCALAR);
SvREFCNT_dec(sv);
SPAGAIN;
sv = POPs;
PUTBACK;
if (croak_on_error && SvTRUE(GvSV(errgv)))
croak(SvPVx(GvSV(errgv), na));
return sv;
}
#endif
#endif
( run in 0.478 second using v1.01-cache-2.11-cpan-4e96b696675 )