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);
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;
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);
}
#include "isl_lp.h"
#include "isl_map.h"
#include "isl_mat.h"
+#include "isl_set.h"
struct isl_tab_var {
int index;
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,
};
struct isl_tab_undo *top;
struct isl_vec *dual;
+ struct isl_basic_set *bset;
unsigned need_undo : 1;
unsigned rational : 1;