add isl_constraint_set_coefficient_val
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 6 Apr 2013 11:45:02 +0000 (13:45 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 28 May 2013 16:20:22 +0000 (18:20 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/constraint.h
isl_constraint.c

index a166357..dea020b 100644 (file)
@@ -1518,6 +1518,10 @@ using the following functions.
        __isl_give isl_constraint *isl_constraint_set_coefficient_si(
                __isl_take isl_constraint *constraint,
                enum isl_dim_type type, int pos, int v);
+       __isl_give isl_constraint *
+       isl_constraint_set_coefficient_val(
+               __isl_take isl_constraint *constraint,
+               enum isl_dim_type type, int pos, isl_val *v);
        __isl_give isl_basic_map *isl_basic_map_add_constraint(
                __isl_take isl_basic_map *bmap,
                __isl_take isl_constraint *constraint);
index 86ca763..0515e91 100644 (file)
@@ -98,6 +98,9 @@ __isl_give isl_constraint *isl_constraint_set_coefficient(
 __isl_give isl_constraint *isl_constraint_set_coefficient_si(
        __isl_take isl_constraint *constraint,
        enum isl_dim_type type, int pos, int v);
+__isl_give isl_constraint *isl_constraint_set_coefficient_val(
+       __isl_take isl_constraint *constraint,
+       enum isl_dim_type type, int pos, isl_val *v);
 
 __isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint,
        int pos);
index 82e8ef7..d72a6fe 100644 (file)
@@ -508,6 +508,34 @@ __isl_give isl_constraint *isl_constraint_set_coefficient(
        return constraint;
 }
 
+/* Replace the coefficient of the variable of type "type" at position "pos"
+ * of "constraint" by "v".
+ */
+__isl_give isl_constraint *isl_constraint_set_coefficient_val(
+       __isl_take isl_constraint *constraint,
+       enum isl_dim_type type, int pos, isl_val *v)
+{
+       constraint = isl_constraint_cow(constraint);
+       if (!constraint || !v)
+               goto error;
+       if (!isl_val_is_int(v))
+               isl_die(isl_constraint_get_ctx(constraint), isl_error_invalid,
+                       "expecting integer value", goto error);
+
+       if (pos >= isl_local_space_dim(constraint->ls, type))
+               isl_die(isl_constraint_get_ctx(constraint), isl_error_invalid,
+                       "position out of bounds", goto error);
+
+       pos += isl_local_space_offset(constraint->ls, type);
+       constraint->v = isl_vec_set_element_val(constraint->v, pos, v);
+       if (!constraint->v)
+               constraint = isl_constraint_free(constraint);
+       return constraint;
+error:
+       isl_val_free(v);
+       return isl_constraint_free(constraint);
+}
+
 __isl_give isl_constraint *isl_constraint_set_coefficient_si(
        __isl_take isl_constraint *constraint,
        enum isl_dim_type type, int pos, int v)