#include <isl_point_private.h>
#include <isl_dim_private.h>
#include <isl_map_private.h>
-#include <isl_lp.h>
-#include <isl_seq.h>
+#include <isl/lp.h>
+#include <isl/seq.h>
+#include <isl_mat_private.h>
static __isl_give isl_qpolynomial_fold *qpolynomial_fold_alloc(
enum isl_fold type, __isl_take isl_dim *dim, int n)
return 0;
}
+__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_set_dim_name(
+ __isl_take isl_qpolynomial_fold *fold,
+ enum isl_dim_type type, unsigned pos, const char *s)
+{
+ int i;
+
+ fold = isl_qpolynomial_fold_cow(fold);
+ if (!fold)
+ return NULL;
+ fold->dim = isl_dim_set_name(fold->dim, type, pos, s);
+ if (!fold->dim)
+ goto error;
+
+ for (i = 0; i < fold->n; ++i) {
+ fold->qp[i] = isl_qpolynomial_set_dim_name(fold->qp[i],
+ type, pos, s);
+ if (!fold->qp[i])
+ goto error;
+ }
+
+ return fold;
+error:
+ isl_qpolynomial_fold_free(fold);
+ return NULL;
+}
+
__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_drop_dims(
__isl_take isl_qpolynomial_fold *fold,
enum isl_dim_type type, unsigned first, unsigned n)
isl_qpolynomial *t;
min = isl_qpolynomial_cst(isl_dim_copy(qp->dim), l);
- base = isl_qpolynomial_pow(isl_dim_copy(qp->dim),
+ base = isl_qpolynomial_var_pow(isl_dim_copy(qp->dim),
qp->upoly->var, 1);
r = isl_qpolynomial_alloc(isl_dim_copy(qp->dim), 0,
return NULL;
}
+__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist(
+ __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context)
+{
+ int i;
+
+ if (!fold || !context)
+ goto error;
+
+ fold = isl_qpolynomial_fold_cow(fold);
+ if (!fold)
+ return NULL;
+
+ for (i = 0; i < fold->n; ++i) {
+ fold->qp[i] = isl_qpolynomial_gist(fold->qp[i],
+ isl_set_copy(context));
+ if (!fold->qp[i])
+ goto error;
+ }
+
+ isl_set_free(context);
+ return fold;
+error:
+ isl_set_free(context);
+ isl_qpolynomial_fold_free(fold);
+ return NULL;
+}
+
#define HAS_TYPE
#undef PW
__isl_take isl_union_pw_qpolynomial_fold *upwf,
__isl_take isl_union_pw_qpolynomial *upwqp)
{
+ upwf = isl_union_pw_qpolynomial_fold_align_params(upwf,
+ isl_union_pw_qpolynomial_get_dim(upwqp));
+ upwqp = isl_union_pw_qpolynomial_align_params(upwqp,
+ isl_union_pw_qpolynomial_fold_get_dim(upwf));
+
upwf = isl_union_pw_qpolynomial_fold_cow(upwf);
if (!upwf || !upwqp)
goto error;
enum isl_fold type;
struct isl_apply_fold_data data;
+ upwf = isl_union_pw_qpolynomial_fold_align_params(upwf,
+ isl_union_map_get_dim(umap));
+ umap = isl_union_map_align_params(umap,
+ isl_union_pw_qpolynomial_fold_get_dim(upwf));
+
data.upwf = upwf;
data.tight = tight ? 1 : 0;
dim = isl_union_pw_qpolynomial_fold_get_dim(upwf);
isl_union_pw_qpolynomial_fold_free(data.res);
return NULL;
}
+
+/* Reorder the dimension of "fold" according to the given reordering.
+ */
+__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign(
+ __isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r)
+{
+ int i;
+
+ fold = isl_qpolynomial_fold_cow(fold);
+ if (!fold || !r)
+ goto error;
+
+ for (i = 0; i < fold->n; ++i) {
+ fold->qp[i] = isl_qpolynomial_realign(fold->qp[i],
+ isl_reordering_copy(r));
+ if (!fold->qp[i])
+ goto error;
+ }
+
+ fold = isl_qpolynomial_fold_reset_dim(fold, isl_dim_copy(r->dim));
+
+ isl_reordering_free(r);
+
+ return fold;
+error:
+ isl_qpolynomial_fold_free(fold);
+ isl_reordering_free(r);
+ return NULL;
+}