X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_vec.c;h=61bd57f5dfd54cd5c7ffcb5af7c0fa33933702a7;hb=556d287f982d8cc1a6f1fd6a318e926c95dbebf4;hp=9df16a20228576e68e5e2024f87791a1f7439809;hpb=a2bc9bfd1c851340ab4ab10878ff35d5d545fc77;p=platform%2Fupstream%2Fisl.git diff --git a/isl_vec.c b/isl_vec.c index 9df16a2..61bd57f 100644 --- a/isl_vec.c +++ b/isl_vec.c @@ -134,6 +134,17 @@ void isl_vec_free(struct isl_vec *vec) free(vec); } +int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2) +{ + if (!vec1 || !vec2) + return -1; + + if (vec1->size != vec2->size) + return 0; + + return isl_seq_eq(vec1->el, vec2->el, vec1->size); +} + __isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer, __isl_keep isl_vec *vec) { @@ -208,6 +219,15 @@ struct isl_vec *isl_vec_normalize(struct isl_vec *vec) return vec; } +__isl_give isl_vec *isl_vec_neg(__isl_take isl_vec *vec) +{ + vec = isl_vec_cow(vec); + if (!vec) + return NULL; + isl_seq_neg(vec->el, vec->el, vec->size); + return vec; +} + __isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m) { if (isl_int_is_one(m)) @@ -256,3 +276,69 @@ __isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec) return vec; } + +__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, + unsigned pos, unsigned n) +{ + if (n == 0) + return vec; + vec = isl_vec_cow(vec); + if (!vec) + return NULL; + + if (pos + n > vec->size) + isl_die(vec->ctx, isl_error_invalid, + "range out of bounds", goto error); + + if (pos + n != vec->size) + isl_seq_cpy(vec->el + pos, vec->el + pos + n, + vec->size - pos - n); + + vec->size -= n; + + return vec; +error: + isl_vec_free(vec); + return NULL; +} + +__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec, + unsigned pos, unsigned n) +{ + isl_vec *ext = NULL; + + if (n == 0) + return vec; + if (!vec) + return NULL; + + if (pos > vec->size) + isl_die(vec->ctx, isl_error_invalid, + "position out of bounds", goto error); + + ext = isl_vec_alloc(vec->ctx, vec->size + n); + if (!ext) + goto error; + + isl_seq_cpy(ext->el, vec->el, pos); + isl_seq_cpy(ext->el + pos + n, vec->el + pos, vec->size - pos); + + isl_vec_free(vec); + return ext; +error: + isl_vec_free(vec); + isl_vec_free(ext); + return NULL; +} + +__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec, + unsigned pos, unsigned n) +{ + vec = isl_vec_insert_els(vec, pos, n); + if (!vec) + return NULL; + + isl_seq_clr(vec->el + pos, n); + + return vec; +}