isl_tab: add isl_basic_set field for optionally keeping track of inequalities
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 5 Aug 2009 08:49:48 +0000 (10:49 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 7 Aug 2009 10:22:42 +0000 (12:22 +0200)
isl_tab.c
isl_tab.h

index c3d03fe..6bde890 100644 (file)
--- a/isl_tab.c
+++ b/isl_tab.c
@@ -157,6 +157,7 @@ void isl_tab_free(struct isl_tab *tab)
        free_undo(tab);
        isl_mat_free(tab->mat);
        isl_vec_free(tab->dual);
+       isl_basic_set_free(tab->bset);
        free(tab->var);
        free(tab->con);
        free(tab->row_var);
@@ -2010,6 +2011,15 @@ static int perform_undo(struct isl_tab *tab, struct isl_tab_undo *undo)
        case isl_tab_undo_relax:
                perform_undo_var(tab, undo);
                break;
+       case isl_tab_undo_bset_eq:
+               isl_basic_set_free_equality(tab->bset, 1);
+               break;
+       case isl_tab_undo_bset_ineq:
+               isl_basic_set_free_inequality(tab->bset, 1);
+               break;
+       case isl_tab_undo_bset_div:
+               isl_basic_set_free_div(tab->bset, 1);
+               break;
        case isl_tab_undo_saved_basis:
                if (restore_basis(tab, undo->u.col_var) < 0)
                        return -1;
@@ -2200,4 +2210,6 @@ void isl_tab_dump(struct isl_tab *tab, FILE *out, int indent)
        isl_mat_dump(tab->mat, out, indent);
        tab->mat->n_row = r;
        tab->mat->n_col = c;
+       if (tab->bset)
+               isl_basic_set_dump(tab->bset, out, indent);
 }
index 17de6ed..7dc321c 100644 (file)
--- a/isl_tab.h
+++ b/isl_tab.h
@@ -4,6 +4,7 @@
 #include "isl_lp.h"
 #include "isl_map.h"
 #include "isl_mat.h"
+#include "isl_set.h"
 
 struct isl_tab_var {
        int index;
@@ -23,6 +24,9 @@ enum isl_tab_undo_type {
        isl_tab_undo_zero,
        isl_tab_undo_allocate,
        isl_tab_undo_relax,
+       isl_tab_undo_bset_ineq,
+       isl_tab_undo_bset_eq,
+       isl_tab_undo_bset_div,
        isl_tab_undo_saved_basis,
 };
 
@@ -111,6 +115,7 @@ struct isl_tab {
        struct isl_tab_undo *top;
 
        struct isl_vec *dual;
+       struct isl_basic_set *bset;
 
        unsigned need_undo : 1;
        unsigned rational : 1;