From b4b6b1d9c56cd90541c868ede82b450159121a8a Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 30 Apr 2013 21:23:09 +0200 Subject: [PATCH] add isl_multi_val_add_val Signed-off-by: Sven Verdoolaege --- doc/user.pod | 3 +++ include/isl/val.h | 3 +++ isl_val.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index e6195ff..29917da 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -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 diff --git a/include/isl/val.h b/include/isl/val.h index 44162a4..ab3bc63 100644 --- a/include/isl/val.h +++ b/include/isl/val.h @@ -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 diff --git a/isl_val.c b/isl_val.c index 4af87de..af3a781 100644 --- 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 + +/* 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); +} -- 2.7.4