add isl_multi_val_add_val
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 30 Apr 2013 19:23:09 +0000 (21:23 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 28 May 2013 16:15:04 +0000 (18:15 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/val.h
isl_val.c

index e6195ff..29917da 100644 (file)
@@ -3398,6 +3398,9 @@ Operations include
        __isl_give isl_multi_val *isl_multi_val_flat_range_product(
                __isl_take isl_multi_val *mv1,
                __isl_take isl_multi_aff *mv2);
+       __isl_give isl_multi_val *isl_multi_val_add_val(
+               __isl_take isl_multi_val *mv,
+               __isl_take isl_val *v);
 
 =head2 Vectors
 
index 44162a4..ab3bc63 100644 (file)
@@ -89,6 +89,9 @@ __isl_give isl_printer *isl_printer_print_val(__isl_take isl_printer *p,
 void isl_val_dump(__isl_keep isl_val *v);
 __isl_give char *isl_val_to_str(__isl_keep isl_val *v);
 
+__isl_give isl_multi_val *isl_multi_val_add_val(__isl_take isl_multi_val *mv,
+       __isl_take isl_val *v);
+
 #if defined(__cplusplus)
 }
 #endif
index 4af87de..af3a781 100644 (file)
--- a/isl_val.c
+++ b/isl_val.c
@@ -1369,3 +1369,45 @@ int isl_val_check_match_domain_space(__isl_keep isl_val *v,
 #define NO_IDENTITY
 #define NO_FROM_BASE
 #include <isl_multi_templ.c>
+
+/* Apply "fn" to each of the elements of "mv" with as second argument "v".
+ */
+static __isl_give isl_multi_val *isl_multi_val_fn_val(
+       __isl_take isl_multi_val *mv,
+       __isl_give isl_val *(*fn)(__isl_take isl_val *v1,
+                                       __isl_take isl_val *v2),
+       __isl_take isl_val *v)
+{
+       int i;
+
+       mv = isl_multi_val_cow(mv);
+       if (!mv || !v)
+               goto error;
+
+       for (i = 0; i < mv->n; ++i) {
+               mv->p[i] = fn(mv->p[i], isl_val_copy(v));
+               if (!mv->p[i])
+                       goto error;
+       }
+
+       isl_val_free(v);
+       return mv;
+error:
+       isl_val_free(v);
+       isl_multi_val_free(mv);
+       return NULL;
+}
+
+/* Add "v" to each of the elements of "mv".
+ */
+__isl_give isl_multi_val *isl_multi_val_add_val(__isl_take isl_multi_val *mv,
+       __isl_take isl_val *v)
+{
+       if (!v)
+               return isl_multi_val_free(mv);
+       if (isl_val_is_zero(v)) {
+               isl_val_free(v);
+               return mv;
+       }
+       return isl_multi_val_fn_val(mv, &isl_val_add, v);
+}