From: Sven Verdoolaege Date: Mon, 3 May 2010 20:03:39 +0000 (+0200) Subject: add isl_qpolynomial_from_constraint X-Git-Tag: isl-0.03~188 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1684f83048aced70def8134bb80634fe3132e183;p=platform%2Fupstream%2Fisl.git add isl_qpolynomial_from_constraint --- diff --git a/include/isl_polynomial.h b/include/isl_polynomial.h index 71115fc..a75524d 100644 --- a/include/isl_polynomial.h +++ b/include/isl_polynomial.h @@ -2,6 +2,7 @@ #define ISL_POLYNOMIAL_H #include +#include #include #include #include @@ -86,6 +87,9 @@ int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp, __isl_give isl_qpolynomial *isl_qpolynomial_eval( __isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt); +__isl_give isl_qpolynomial *isl_qpolynomial_from_constraint( + __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos); + __isl_give isl_printer *isl_printer_print_qpolynomial( __isl_take isl_printer *p, __isl_keep isl_qpolynomial *qp); void isl_qpolynomial_print(__isl_keep isl_qpolynomial *qp, FILE *out, diff --git a/isl_polynomial.c b/isl_polynomial.c index 18c8ea3..0625cce 100644 --- a/isl_polynomial.c +++ b/isl_polynomial.c @@ -2263,6 +2263,41 @@ __isl_give struct isl_upoly *isl_upoly_from_affine(isl_ctx *ctx, isl_int *f, return up; } +__isl_give isl_qpolynomial *isl_qpolynomial_from_constraint( + __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos) +{ + isl_int denom; + isl_dim *dim; + struct isl_upoly *up; + isl_qpolynomial *qp; + int sgn; + + if (!c) + return NULL; + + isl_int_init(denom); + + isl_constraint_get_coefficient(c, type, pos, &denom); + isl_constraint_set_coefficient(c, type, pos, c->ctx->zero); + sgn = isl_int_sgn(denom); + isl_int_abs(denom, denom); + up = isl_upoly_from_affine(c->ctx, c->line[0], denom, + 1 + isl_constraint_dim(c, isl_dim_all)); + if (sgn < 0) + isl_int_neg(denom, denom); + isl_constraint_set_coefficient(c, type, pos, denom); + + dim = isl_dim_copy(c->bmap->dim); + + isl_int_clear(denom); + isl_constraint_free(c); + + qp = isl_qpolynomial_alloc(dim, 0, up); + if (sgn > 0) + qp = isl_qpolynomial_neg(qp); + return qp; +} + __isl_give struct isl_upoly *isl_upoly_subs(__isl_take struct isl_upoly *up, unsigned first, unsigned n, __isl_keep struct isl_upoly **subs) {