summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2011-06-28 20:17:59 +0200
committerSven Verdoolaege <skimo@kotnet.org>2011-06-30 13:00:59 +0200
commita52f844be42d618ed2df5ce307761b11d61f5f5b (patch)
tree0e52da109d8aacc161c46ec4de4c0dfd110d4191
parentb7d848b49611b6bed2bfb1c7ab329beb54eca31d (diff)
downloadisl-a52f844be42d618ed2df5ce307761b11d61f5f5b.tar.gz
isl-a52f844be42d618ed2df5ce307761b11d61f5f5b.tar.bz2
isl-a52f844be42d618ed2df5ce307761b11d61f5f5b.zip
add isl_vec_drop_els
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
-rw-r--r--include/isl/vec.h3
-rw-r--r--isl_vec.c25
2 files changed, 28 insertions, 0 deletions
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;
+}