add isl_pw_qpolynomial_gist and isl_pw_qpolynomial_fold_gist
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 16 Mar 2010 15:42:59 +0000 (16:42 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 18 Mar 2010 22:15:48 +0000 (23:15 +0100)
include/isl_polynomial.h
isl_pw_templ.c

index 6fad5c7..b28049c 100644 (file)
@@ -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
index 0f74263..7157dd9 100644 (file)
@@ -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;
+}