AlignDB-IntSpanXS

 view release on metacpan or  search on metacpan

xs.xs  view on Meta::CPAN

#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#include "intspan.h"

typedef intspan*         AlignDB__IntSpanXS;

MODULE = AlignDB::IntSpanXS		PACKAGE = AlignDB::IntSpanXS

int
POS_INF(itsx)
    AlignDB::IntSpanXS itsx
    INIT:
        int i = POS_INF - 1;
    PROTOTYPE: $
    PPCODE:
        XPUSHs(sv_2mortal(newSViv(i)));

int
NEG_INF(itsx)
    AlignDB::IntSpanXS itsx
    PROTOTYPE: $
    PPCODE:
        XPUSHs(sv_2mortal(newSViv(NEG_INF)));

SV *
EMPTY_STRING(itsx)
    AlignDB::IntSpanXS itsx
    PROTOTYPE: $
    PPCODE:
        XPUSHs(sv_2mortal(newSVpv(EMPTY_STRING, 0)));

AlignDB::IntSpanXS
_new(pack)
    char *pack
    PROTOTYPE: $
    CODE:
        RETVAL = intspan_new();
    OUTPUT:
        RETVAL

void
DESTROY(itsx)
    AlignDB::IntSpanXS itsx
    PROTOTYPE: $
    CODE:
        intspan_destroy(itsx);

void
clear(itsx)
    AlignDB::IntSpanXS itsx
    PROTOTYPE: $
    CODE:
        intspan_clear(itsx);

void
edges(itsx)
    AlignDB::IntSpanXS itsx
    INIT:
        int i;
        int j;
        veci *vec;
    PROTOTYPE: $
    PPCODE:
        vec = intspan_edges(itsx);
        for (i = 0; i < veci_size(vec); i++) {
            j = veci_get(vec, i);
            XPUSHs(sv_2mortal(newSViv(j)));
        }
        #veci_destroy(vec); //this vec belongs to the intspan object

int
edge_size(itsx)
    AlignDB::IntSpanXS itsx
    PROTOTYPE: $
    CODE:
        RETVAL = intspan_edge_size(itsx);
    OUTPUT:
        RETVAL

int
span_size(itsx)
    AlignDB::IntSpanXS itsx
    PROTOTYPE: $
    CODE:
        RETVAL = intspan_span_size(itsx);
    OUTPUT:
        RETVAL

SV *
as_string(itsx)
    AlignDB::IntSpanXS itsx
    PREINIT:
        char *tmp_buffer;
        int len = 1024;
    PROTOTYPE: $
    PPCODE:
        tmp_buffer = (char *)malloc(len + 1);
        if (tmp_buffer == NULL)
            XSRETURN_UNDEF;

        intspan_as_string(itsx, &tmp_buffer, len);

        XPUSHs(sv_2mortal(newSVpv(tmp_buffer, 0)));
        free(tmp_buffer);

void
as_array(itsx)
    AlignDB::IntSpanXS itsx
    INIT:
        int i;
        int j;
        veci *vec;
    PROTOTYPE: $
    PPCODE:
        vec = intspan_as_veci(itsx);
        for (i = 0; i < veci_size(vec); i++) {
            j = veci_get(vec, i);
            XPUSHs(sv_2mortal(newSViv(j)));
        }
        veci_destroy(vec);

void
ranges(itsx)
    AlignDB::IntSpanXS itsx
    INIT:
        int i;
        int j;
        veci *vec;
    PROTOTYPE: $
    PPCODE:
        vec = intspan_ranges(itsx);
        for (i = 0; i < veci_size(vec); i++) {
            j = veci_get(vec, i);
            XPUSHs(sv_2mortal(newSViv(j)));
        }
        veci_destroy(vec);

int
cardinality(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_cardinality(itsx);
    OUTPUT:
        RETVAL

int
is_empty(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_is_empty(itsx);
    OUTPUT:
        RETVAL

int
is_not_empty(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_is_not_empty(itsx);
    OUTPUT:
        RETVAL

int
is_neg_inf(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_is_neg_inf(itsx);
    OUTPUT:
        RETVAL

int
is_pos_inf(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_is_pos_inf(itsx);
    OUTPUT:
        RETVAL

int
is_infinite(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_is_infinite(itsx);
    OUTPUT:
        RETVAL

int
is_finite(itsx)
    AlignDB::IntSpanXS itsx
    CODE:
        RETVAL = intspan_is_finite(itsx);



( run in 2.074 seconds using v1.01-cache-2.11-cpan-71847e10f99 )