add isl_pw_qpolynomial_from_pw_aff
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 25 Jul 2011 07:01:53 +0000 (09:01 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 28 Jul 2011 14:44:50 +0000 (16:44 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/polynomial.h
isl_polynomial.c

index 96107d1..0ef1e1e 100644 (file)
@@ -2814,6 +2814,8 @@ be combined to create more complicated piecewise quasipolynomials.
                __isl_take isl_qpolynomial *qp);
        __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_qpolynomial(
                __isl_take isl_qpolynomial *qp);
+       __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_pw_aff(
+               __isl_take isl_pw_aff *pwaff);
 
        __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_zero(
                __isl_take isl_dim *dim);
index efefe74..2b2ac4c 100644 (file)
@@ -228,6 +228,9 @@ int isl_pw_qpolynomial_foreach_lifted_piece(__isl_keep isl_pw_qpolynomial *pwqp,
        int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp,
                    void *user), void *user);
 
+__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_pw_aff(
+       __isl_take isl_pw_aff *pwaff);
+
 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_str(isl_ctx *ctx,
                const char *str);
 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_file(isl_ctx *ctx,
index 5a78619..14a7b52 100644 (file)
@@ -3026,6 +3026,30 @@ error:
        return NULL;
 }
 
+__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_pw_aff(
+       __isl_take isl_pw_aff *pwaff)
+{
+       int i;
+       isl_pw_qpolynomial *pwqp;
+
+       if (!pwaff)
+               return NULL;
+
+       pwqp = isl_pw_qpolynomial_alloc_(isl_pw_aff_get_dim(pwaff), pwaff->n);
+
+       for (i = 0; i < pwaff->n; ++i) {
+               isl_set *dom;
+               isl_qpolynomial *qp;
+
+               dom = isl_set_copy(pwaff->p[i].set);
+               qp = isl_qpolynomial_from_aff(isl_aff_copy(pwaff->p[i].aff));
+               pwqp = isl_pw_qpolynomial_add_piece(pwqp,  dom, qp);
+       }
+
+       isl_pw_aff_free(pwaff);
+       return pwqp;
+}
+
 __isl_give isl_qpolynomial *isl_qpolynomial_from_constraint(
        __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos)
 {