add isl_vec_insert_zero_els
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 28 Jun 2011 21:29:20 +0000 (23:29 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 30 Jun 2011 11:01:19 +0000 (13:01 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl/vec.h
isl_vec.c

index 2602601..e592838 100644 (file)
@@ -62,6 +62,10 @@ __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);
+__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec,
+       unsigned pos, unsigned n);
+__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec,
+       unsigned pos, unsigned n);
 
 #if defined(__cplusplus)
 }
index 693af8e..b0bd1a3 100644 (file)
--- a/isl_vec.c
+++ b/isl_vec.c
@@ -292,3 +292,44 @@ 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;
+}