From a52f844be42d618ed2df5ce307761b11d61f5f5b Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 28 Jun 2011 20:17:59 +0200 Subject: add isl_vec_drop_els Signed-off-by: Sven Verdoolaege --- include/isl/vec.h | 3 +++ isl_vec.c | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/isl/vec.h b/include/isl/vec.h index f71ab1e3..26026011 100644 --- a/include/isl/vec.h +++ b/include/isl/vec.h @@ -60,6 +60,9 @@ __isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec); __isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input); +__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, + unsigned pos, unsigned n); + #if defined(__cplusplus) } #endif diff --git a/isl_vec.c b/isl_vec.c index 606f6faa..693af8e9 100644 --- a/isl_vec.c +++ b/isl_vec.c @@ -267,3 +267,28 @@ __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; +} -- cgit v1.2.3