AlignDB-IntSpanXS

 view release on metacpan or  search on metacpan

intspan.c  view on Meta::CPAN

    }
}

void veci_add(veci *v, int element) {
    veci_insert(v, (v)->size, element);
}

int veci_remove(veci *v, size_t index) {
    int element = v->elements[index];
    size_t i;
    for (i = index + 1; i < v->size; i++) {
        v->elements[i - 1] = v->elements[i];
    }
    v->size--;
    v->elements[v->size] = MY_I32_MAX;
    return element;
}

void veci_clear(veci *v) {
    while (v->size) {
        v->elements[--(v->size)] = MY_I32_MAX;
    }
}

int* veci_to_array(veci *v) {
    return (int *)v->elements;
}

intspan* intspan_new(void) {
    intspan *this_intspan = (intspan *)malloc(sizeof(intspan));
    this_intspan->edge_ =  veci_create(1024);

    return this_intspan;
}

void intspan_destroy(intspan *this_intspan) {
    veci_destroy(this_intspan->edge_);
    free(this_intspan);
}

veci* intspan_edges(intspan *this_intspan) {
    return this_intspan->edge_;
}

void intspan_clear(intspan *this_intspan) {
    veci_clear(this_intspan->edge_);
}

int intspan_edge_size(intspan *this_intspan) {
    return veci_size(this_intspan->edge_);
}

int intspan_edge_capacity(intspan *this_intspan) {
    return this_intspan->edge_->capacity;
}

int intspan_is_empty(intspan *this_intspan) {
    return intspan_edge_size(this_intspan) == 0;
}

int intspan_is_not_empty(intspan *this_intspan) {
    return intspan_edge_size(this_intspan) != 0;
}

int intspan_is_neg_inf(intspan *this_intspan) {
    veci * edges = intspan_edges(this_intspan);
    return veci_get(edges, 0) == NEG_INF;
}

int intspan_is_pos_inf(intspan *this_intspan) {
    veci * edges = intspan_edges(this_intspan);
    int size = veci_size(edges);
    return veci_get(edges, size - 1) == POS_INF;
}

int intspan_is_infinite(intspan *this_intspan) {
    return intspan_is_neg_inf(this_intspan) || intspan_is_pos_inf(this_intspan);
}

int intspan_is_finite(intspan *this_intspan) {
    return ! intspan_is_infinite(this_intspan);
}

int intspan_is_universal(intspan *this_intspan) {
    return intspan_edge_size(this_intspan) == 2 && intspan_is_neg_inf(this_intspan) && intspan_is_pos_inf(this_intspan);
}

int intspan_span_size(intspan *this_intspan) {
    return intspan_edge_size(this_intspan) / 2;
}

void intspan_as_string(intspan *this_intspan, char **runlist, int len) {
    if (intspan_is_empty(this_intspan)) {
        strcpy(*runlist, EMPTY_STRING);
        return;
    }

    if (len == 0) {
        len = 1024;
    }
    strcpy(*runlist, "");

    int i, lower, upper;
    int first_flag = 1;
    veci *edges = intspan_edges(this_intspan);
    int buf_size = 512;
    char buf[buf_size];
    for (i = 0; i <  intspan_span_size(this_intspan); i++) {
        strcpy(buf, "");
        lower = veci_get(edges, i * 2);
        upper = veci_get(edges, i * 2 + 1) - 1;
        if (first_flag) {
            first_flag = 0;
            if (lower == upper) {
                sprintf(buf, "%d", lower);
            } else {
                sprintf(buf, "%d-%d", lower, upper);
            }
        } else {
            if (lower == upper) {
                sprintf(buf, ",%d", lower);



( run in 0.562 second using v1.01-cache-2.11-cpan-39bf76dae61 )