AlignDB-IntSpanXS
view release on metacpan or search on metacpan
}
}
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 )