add isl_vec_zero_extend
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 20 Sep 2010 17:03:10 +0000 (19:03 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 22 Sep 2010 19:54:34 +0000 (21:54 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl_vec.h
isl_vec.c

index dd15510..3107311 100644 (file)
@@ -45,6 +45,8 @@ struct isl_vec *isl_vec_normalize(struct isl_vec *vec);
 __isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m);
 __isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1,
        __isl_take isl_vec *vec2);
+__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size);
+__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size);
 
 struct isl_vec *isl_vec_read_from_file(struct isl_ctx *ctx,
                FILE *input, unsigned input_format);
index d3c1126..d380f7f 100644 (file)
--- a/isl_vec.c
+++ b/isl_vec.c
@@ -34,6 +34,53 @@ error:
        return NULL;
 }
 
+__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size)
+{
+       if (!vec)
+               return NULL;
+       if (size <= vec->size)
+               return vec;
+
+       vec = isl_vec_cow(vec);
+       if (!vec)
+               return NULL;
+
+       vec->block = isl_blk_extend(vec->ctx, vec->block, size);
+       if (!vec->block.data)
+               goto error;
+
+       vec->size = size;
+       vec->el = vec->block.data;
+
+       return vec;
+error:
+       isl_vec_free(vec);
+       return NULL;
+}
+
+__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size)
+{
+       int extra;
+
+       if (!vec)
+               return NULL;
+       if (size <= vec->size)
+               return vec;
+
+       vec = isl_vec_cow(vec);
+       if (!vec)
+               return NULL;
+
+       extra = size - vec->size;
+       vec = isl_vec_extend(vec, size);
+       if (!vec)
+               return NULL;
+
+       isl_seq_clr(vec->el + size - extra, extra);
+
+       return vec;
+}
+
 struct isl_vec *isl_vec_copy(struct isl_vec *vec)
 {
        if (!vec)