isl_tab_add_valid_eq: return int instead of isl_tab *
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 26 Jun 2010 09:56:56 +0000 (11:56 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 26 Jun 2010 15:37:40 +0000 (17:37 +0200)
basis_reduction_tab.c
isl_sample.c
isl_scan.c
isl_tab.c
isl_tab.h

index 11c43ad..aebf897 100644 (file)
@@ -222,7 +222,8 @@ static int add_lp_row(struct tab_lp *lp, isl_int *row, int dim)
        isl_seq_cpy(lp->row->el + 1, row, lp->dim);
        isl_seq_neg(lp->row->el + 1 + lp->dim, row, lp->dim);
 
-       lp->tab = isl_tab_add_valid_eq(lp->tab, lp->row->el);
+       if (isl_tab_add_valid_eq(lp->tab, lp->row->el) < 0)
+               return -1;
 
        return lp->neq++;
 }
index 8a99d7e..986b5a7 100644 (file)
@@ -508,7 +508,8 @@ struct isl_vec *isl_tab_sample(struct isl_tab *tab)
                        continue;
                }
                isl_int_neg(tab->basis->row[1 + level][0], min->el[level]);
-               tab = isl_tab_add_valid_eq(tab, tab->basis->row[1 + level]);
+               if (isl_tab_add_valid_eq(tab, tab->basis->row[1 + level]) < 0)
+                       goto error;
                isl_int_set_si(tab->basis->row[1 + level][0], 0);
                if (level + tab->n_unbounded < dim - 1) {
                        ++level;
index f6eb9fe..c8eba37 100644 (file)
@@ -185,7 +185,8 @@ int isl_basic_set_scan(struct isl_basic_set *bset,
                        continue;
                }
                isl_int_neg(B->row[1 + level][0], min->el[level]);
-               tab = isl_tab_add_valid_eq(tab, B->row[1 + level]);
+               if (isl_tab_add_valid_eq(tab, B->row[1 + level]) < 0)
+                       goto error;
                isl_int_set_si(B->row[1 + level][0], 0);
                if (level < dim - 1) {
                        ++level;
index 35c05c3..3b2d90a 100644 (file)
--- a/isl_tab.c
+++ b/isl_tab.c
@@ -1829,24 +1829,24 @@ static int row_is_manifestly_zero(struct isl_tab *tab, int row)
 
 /* Add an equality that is known to be valid for the given tableau.
  */
-struct isl_tab *isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq)
+int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq)
 {
        struct isl_tab_var *var;
        int r;
 
        if (!tab)
-               return NULL;
+               return -1;
        r = isl_tab_add_row(tab, eq);
        if (r < 0)
-               goto error;
+               return -1;
 
        var = &tab->con[r];
        r = var->index;
        if (row_is_manifestly_zero(tab, r)) {
                var->is_zero = 1;
                if (isl_tab_mark_redundant(tab, r) < 0)
-                       goto error;
-               return tab;
+                       return -1;
+               return 0;
        }
 
        if (isl_int_is_neg(tab->mat->row[r][1])) {
@@ -1856,15 +1856,12 @@ struct isl_tab *isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq)
        }
        var->is_nonneg = 1;
        if (to_col(tab, var) < 0)
-               goto error;
+               return -1;
        var->is_nonneg = 0;
        if (isl_tab_kill_col(tab, var->index) < 0)
-               goto error;
+               return -1;
 
-       return tab;
-error:
-       isl_tab_free(tab);
-       return NULL;
+       return 0;
 }
 
 static int add_zero_row(struct isl_tab *tab)
index da7089c..f288c0c 100644 (file)
--- a/isl_tab.h
+++ b/isl_tab.h
@@ -193,7 +193,7 @@ enum isl_lp_result isl_tab_min(struct isl_tab *tab,
 struct isl_tab *isl_tab_extend(struct isl_tab *tab, unsigned n_new) WARN_UNUSED;
 int isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq) WARN_UNUSED;
 int isl_tab_add_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED;
-struct isl_tab *isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED;
+int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED;
 
 int isl_tab_freeze_constraint(struct isl_tab *tab, int con) WARN_UNUSED;