return push_union(tab, isl_tab_undo_saved_basis, u);
}
+int isl_tab_push_callback(struct isl_tab *tab, struct isl_tab_callback *callback)
+{
+ union isl_tab_undo_val u;
+ u.callback = callback;
+ return push_union(tab, isl_tab_undo_callback, u);
+}
+
struct isl_tab *isl_tab_init_samples(struct isl_tab *tab)
{
if (!tab)
case isl_tab_undo_saved_samples:
drop_samples_since(tab, undo->u.n);
break;
+ case isl_tab_undo_callback:
+ return undo->u.callback->run(undo->u.callback);
default:
isl_assert(tab->mat->ctx, 0, return -1);
}
isl_tab_undo_saved_basis,
isl_tab_undo_drop_sample,
isl_tab_undo_saved_samples,
+ isl_tab_undo_callback,
+};
+
+struct isl_tab_callback {
+ int (*run)(struct isl_tab_callback *cb);
};
union isl_tab_undo_val {
int var_index;
int *col_var;
int n;
+ struct isl_tab_callback *callback;
};
struct isl_tab_undo {
struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab,
struct isl_tab *tab_cone) WARN_UNUSED;
+int isl_tab_push_callback(struct isl_tab *tab,
+ struct isl_tab_callback *callback) WARN_UNUSED;
+
#endif