From bedd3092211576058d270a7c2cf49aa97988a1d0 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 16 Mar 2010 16:42:59 +0100 Subject: [PATCH] add isl_pw_qpolynomial_gist and isl_pw_qpolynomial_fold_gist --- include/isl_polynomial.h | 6 ++++++ isl_pw_templ.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/isl_polynomial.h b/include/isl_polynomial.h index 6fad5c7..b28049c 100644 --- a/include/isl_polynomial.h +++ b/include/isl_polynomial.h @@ -117,6 +117,9 @@ __isl_give isl_printer *isl_printer_print_pw_qpolynomial( void isl_pw_qpolynomial_print(__isl_keep isl_pw_qpolynomial *pwqp, FILE *out, unsigned output_format); +__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist( + __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *context); + enum isl_fold { isl_fold_min, isl_fold_max, @@ -181,6 +184,9 @@ __isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( void isl_pw_qpolynomial_fold_print(__isl_keep isl_pw_qpolynomial_fold *pwf, FILE *out, unsigned output_format); +__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist( + __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *context); + #if defined(__cplusplus) } #endif diff --git a/isl_pw_templ.c b/isl_pw_templ.c index 0f74263..7157dd9 100644 --- a/isl_pw_templ.c +++ b/isl_pw_templ.c @@ -324,3 +324,40 @@ error: FN(PW,free)(pw); return NULL; } + +__isl_give PW *FN(PW,gist)(__isl_take PW *pw, __isl_take isl_set *context) +{ + int i; + isl_basic_set *hull = NULL; + + if (!pw || !context) + goto error; + + if (pw->n == 0) { + isl_set_free(context); + return pw; + } + + hull = isl_set_convex_hull(isl_set_copy(context)); + + pw = FN(PW,cow)(pw); + if (!pw) + goto error; + + for (i = 0; i < pw->n; ++i) { + pw->p[i].set = isl_set_gist(pw->p[i].set, + isl_basic_set_copy(hull)); + if (!pw->p[i].set) + goto error; + } + + isl_basic_set_free(hull); + isl_set_free(context); + + return pw; +error: + FN(PW,free)(pw); + isl_basic_set_free(hull); + isl_set_free(context); + return NULL; +} -- 2.7.4