The interface is still pretty rudimentary and subject to change.
isl_int **line;
};
+struct isl_constraint *isl_equality_alloc(struct isl_dim *dim);
+struct isl_constraint *isl_inequality_alloc(struct isl_dim *dim);
struct isl_constraint *isl_basic_set_constraint(struct isl_basic_set *bset,
isl_int **line);
int isl_constraint_is_equal(struct isl_constraint *constraint1,
struct isl_constraint *constraint2);
+struct isl_basic_set *isl_basic_set_add_constraint(
+ struct isl_basic_set *bset, struct isl_constraint *constraint);
+
int isl_basic_set_has_defining_equality(
struct isl_basic_set *bset, int pos,
struct isl_constraint **constraint);
return isl_basic_map_constraint((struct isl_basic_map *)bset, line);
}
+struct isl_constraint *isl_equality_alloc(struct isl_dim *dim)
+{
+ struct isl_basic_map *bmap;
+
+ if (!dim)
+ return NULL;
+
+ bmap = isl_basic_map_alloc_dim(dim->ctx, dim, 0, 1, 0);
+ if (!bmap)
+ return NULL;
+
+ isl_basic_map_alloc_equality(bmap);
+ isl_seq_clr(bmap->eq[0], 1 + isl_basic_map_total_dim(bmap));
+ return isl_basic_map_constraint(bmap, &bmap->eq[0]);
+}
+
+struct isl_constraint *isl_inequality_alloc(struct isl_dim *dim)
+{
+ struct isl_basic_map *bmap;
+
+ if (!dim)
+ return NULL;
+
+ bmap = isl_basic_map_alloc_dim(dim->ctx, dim, 0, 0, 1);
+ if (!bmap)
+ return NULL;
+
+ isl_basic_map_alloc_inequality(bmap);
+ isl_seq_clr(bmap->ineq[0], 1 + isl_basic_map_total_dim(bmap));
+ return isl_basic_map_constraint(bmap, &bmap->ineq[0]);
+}
+
struct isl_constraint *isl_constraint_dup(struct isl_constraint *c)
{
if (!c)
constraint1->line == constraint2->line;
}
+struct isl_basic_set *isl_basic_set_add_constraint(
+ struct isl_basic_set *bset, struct isl_constraint *constraint)
+{
+ if (!bset || !constraint)
+ goto error;
+
+ isl_assert(constraint->ctx,
+ isl_dim_equal(bset->dim, constraint->bmap->dim), goto error);
+
+ bset = isl_basic_set_intersect(bset,
+ isl_basic_set_copy((struct isl_basic_set *)constraint->bmap));
+ isl_constraint_free(constraint);
+ return bset;
+error:
+ isl_basic_set_free(bset);
+ isl_constraint_free(constraint);
+ return NULL;
+}
+
int isl_constraint_dim(struct isl_constraint *constraint,
enum isl_dim_type type)
{
#include <limits.h>
#include <isl_ctx.h>
#include <isl_set.h>
+#include <isl_constraint.h>
static char *srcdir;
+/* Construct the basic set { [i] : 5 <= i <= N } */
+void test_construction(struct isl_ctx *ctx)
+{
+ isl_int v;
+ struct isl_basic_set *bset;
+ struct isl_constraint *c;
+
+ isl_int_init(v);
+
+ bset = isl_basic_set_universe(ctx, 1, 1);
+
+ c = isl_inequality_alloc(isl_dim_copy(bset->dim));
+ isl_int_set_si(v, -1);
+ isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
+ isl_int_set_si(v, 1);
+ isl_constraint_set_coefficient(c, isl_dim_param, 0, v);
+ bset = isl_basic_set_add_constraint(bset, c);
+
+ c = isl_inequality_alloc(isl_dim_copy(bset->dim));
+ isl_int_set_si(v, 1);
+ isl_constraint_set_coefficient(c, isl_dim_set, 0, v);
+ isl_int_set_si(v, -5);
+ isl_constraint_set_constant(c, v);
+ bset = isl_basic_set_add_constraint(bset, c);
+
+ isl_basic_set_free(bset);
+
+ isl_int_clear(v);
+}
+
void test_application_case(struct isl_ctx *ctx, const char *name)
{
char filename[PATH_MAX];
srcdir = getenv("srcdir");
ctx = isl_ctx_alloc();
+ test_construction(ctx);
test_application(ctx);
test_affine_hull(ctx);
test_convex_hull(ctx);