From eb64b290654f345a82db3eb2abc9cc1f3c572ba8 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 6 Apr 2013 13:44:39 +0200 Subject: [PATCH] add isl_vec_set_element_val Signed-off-by: Sven Verdoolaege --- doc/user.pod | 3 +++ include/isl/vec.h | 3 +++ isl_vec.c | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 70405ae..34fa536 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -3447,6 +3447,9 @@ The elements can be changed and inspected using the following functions. __isl_take isl_vec *vec, int pos, isl_int v); __isl_give isl_vec *isl_vec_set_element_si( __isl_take isl_vec *vec, int pos, int v); + __isl_give isl_vec *isl_vec_set_element_val( + __isl_take isl_vec *vec, int pos, + __isl_take isl_val *v); __isl_give isl_vec *isl_vec_set(__isl_take isl_vec *vec, isl_int v); __isl_give isl_vec *isl_vec_set_si(__isl_take isl_vec *vec, diff --git a/include/isl/vec.h b/include/isl/vec.h index 7122997..5a3192e 100644 --- a/include/isl/vec.h +++ b/include/isl/vec.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #if defined(__cplusplus) @@ -46,6 +47,8 @@ __isl_give isl_vec *isl_vec_set_element(__isl_take isl_vec *vec, int pos, isl_int v); __isl_give isl_vec *isl_vec_set_element_si(__isl_take isl_vec *vec, int pos, int v); +__isl_give isl_vec *isl_vec_set_element_val(__isl_take isl_vec *vec, + int pos, __isl_take isl_val *v); int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2); diff --git a/isl_vec.c b/isl_vec.c index ce17449..236413e 100644 --- a/isl_vec.c +++ b/isl_vec.c @@ -10,6 +10,7 @@ #include #include #include +#include isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec) { @@ -220,6 +221,24 @@ error: return NULL; } +/* Replace the element at position "pos" of "vec" by "v". + */ +__isl_give isl_vec *isl_vec_set_element_val(__isl_take isl_vec *vec, + int pos, __isl_take isl_val *v) +{ + if (!v) + return isl_vec_free(vec); + if (!isl_val_is_int(v)) + isl_die(isl_val_get_ctx(v), isl_error_invalid, + "expecting integer value", goto error); + vec = isl_vec_set_element(vec, pos, v->n); + isl_val_free(v); + return vec; +error: + isl_val_free(v); + return isl_vec_free(vec); +} + int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2) { if (!vec1 || !vec2) -- 2.7.4