add isl_vec_add
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 25 Jun 2010 12:37:09 +0000 (14:37 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 25 Jun 2010 13:19:41 +0000 (15:19 +0200)
include/isl_vec.h
isl_vec.c

index 746b70f..dd15510 100644 (file)
@@ -43,6 +43,8 @@ void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm);
 struct isl_vec *isl_vec_ceil(struct isl_vec *vec);
 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);
 
 struct isl_vec *isl_vec_read_from_file(struct isl_ctx *ctx,
                FILE *input, unsigned input_format);
index c16d71a..d3c1126 100644 (file)
--- a/isl_vec.c
+++ b/isl_vec.c
@@ -138,3 +138,23 @@ __isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m)
        isl_seq_scale(vec->el, vec->el, m, vec->size);
        return vec;
 }
+
+__isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1,
+       __isl_take isl_vec *vec2)
+{
+       vec1 = isl_vec_cow(vec1);
+       if (!vec1 || !vec2)
+               goto error;
+
+       isl_assert(vec1->ctx, vec1->size == vec2->size, goto error);
+
+       isl_seq_combine(vec1->el, vec1->ctx->one, vec1->el,
+                       vec1->ctx->one, vec2->el, vec1->size);
+       
+       isl_vec_free(vec2);
+       return vec1;
+error:
+       isl_vec_free(vec1);
+       isl_vec_free(vec2);
+       return NULL;
+}