add isl_tab_basic_set_non_neg_lexmin
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 19 Apr 2011 13:45:05 +0000 (15:45 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 21 Apr 2011 11:13:12 +0000 (13:13 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
isl_tab.h
isl_tab_pip.c

index 66a2804..6888044 100644 (file)
--- a/isl_tab.h
+++ b/isl_tab.h
@@ -245,6 +245,8 @@ __isl_give isl_vec *isl_tab_basic_set_non_trivial_lexmin(
        __isl_take isl_basic_set *bset, int n_op, int n_region,
        struct isl_region *region,
        int (*conflict)(int con, void *user), void *user);
+__isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin(
+       __isl_take isl_basic_set *bset);
 
 /* private */
 
index 0e49e21..94b868d 100644 (file)
@@ -4955,3 +4955,30 @@ error:
        isl_vec_free(sol);
        return NULL;
 }
+
+/* Return the lexicographically smallest rational point in "bset",
+ * assuming that all variables are non-negative.
+ * If "bset" is empty, then return a zero-length vector.
+ */
+ __isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin(
+       __isl_take isl_basic_set *bset)
+{
+       struct isl_tab *tab;
+       isl_ctx *ctx = isl_basic_set_get_ctx(bset);
+       isl_vec *sol;
+
+       tab = tab_for_lexmin(isl_basic_map_from_range(bset), NULL, 0, 0);
+       if (!tab)
+               goto error;
+       if (tab->empty)
+               sol = isl_vec_alloc(ctx, 0);
+       else
+               sol = isl_tab_get_sample_value(tab);
+       isl_tab_free(tab);
+       isl_basic_set_free(bset);
+       return sol;
+error:
+       isl_tab_free(tab);
+       isl_basic_set_free(bset);
+       return NULL;
+}