AVLTree

 view release on metacpan or  search on metacpan

AVLTree.xs  view on Meta::CPAN

  
  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 */
  

AVLTree.xs  view on Meta::CPAN

    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:

AVLTree.xs  view on Meta::CPAN

    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:

AVLTree.xs  view on Meta::CPAN

    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");

ppport.h  view on Meta::CPAN

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|

ppport.h  view on Meta::CPAN

{
    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 )