add isl_aff_mod_val
[platform/upstream/isl.git] / isl_constraint.c
index d72a6fe..7a06fa7 100644 (file)
@@ -16,6 +16,7 @@
 #include <isl/seq.h>
 #include <isl_aff_private.h>
 #include <isl_local_space_private.h>
+#include <isl_val_private.h>
 
 #undef BASE
 #define BASE constraint
@@ -408,6 +409,20 @@ void isl_constraint_get_constant(struct isl_constraint *constraint, isl_int *v)
        isl_int_set(*v, constraint->v->el[0]);
 }
 
+/* Return the constant term of "constraint".
+ */
+__isl_give isl_val *isl_constraint_get_constant_val(
+       __isl_keep isl_constraint *constraint)
+{
+       isl_ctx *ctx;
+
+       if (!constraint)
+               return NULL;
+
+       ctx = isl_constraint_get_ctx(constraint);
+       return isl_val_int_from_isl_int(ctx, constraint->v->el[0]);
+}
+
 void isl_constraint_get_coefficient(struct isl_constraint *constraint,
        enum isl_dim_type type, int pos, isl_int *v)
 {
@@ -422,6 +437,26 @@ void isl_constraint_get_coefficient(struct isl_constraint *constraint,
        isl_int_set(*v, constraint->v->el[pos]);
 }
 
+/* Return the coefficient of the variable of type "type" at position "pos"
+ * of "constraint".
+ */
+__isl_give isl_val *isl_constraint_get_coefficient_val(
+       __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos)
+{
+       isl_ctx *ctx;
+
+       if (!constraint)
+               return NULL;
+
+       ctx = isl_constraint_get_ctx(constraint);
+       if (pos < 0 || pos >= isl_local_space_dim(constraint->ls, type))
+               isl_die(ctx, isl_error_invalid,
+                       "position out of bounds", return NULL);
+
+       pos += isl_local_space_offset(constraint->ls, type);
+       return isl_val_int_from_isl_int(ctx, constraint->v->el[pos]);
+}
+
 __isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint,
        int pos)
 {