From e9550d0b383ffaacb83325343eb1952849951208 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 16 Oct 2009 14:30:24 +0200 Subject: [PATCH] isl_tab: support generic undo records --- isl_tab.c | 9 +++++++++ isl_tab.h | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/isl_tab.c b/isl_tab.c index c09b6cb..0316a73 100644 --- a/isl_tab.c +++ b/isl_tab.c @@ -799,6 +799,13 @@ int isl_tab_push_basis(struct isl_tab *tab) 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) @@ -2755,6 +2762,8 @@ static int perform_undo(struct isl_tab *tab, struct isl_tab_undo *undo) 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); } diff --git a/isl_tab.h b/isl_tab.h index 5036273..13919cf 100644 --- a/isl_tab.h +++ b/isl_tab.h @@ -31,12 +31,18 @@ enum isl_tab_undo_type { 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 { @@ -237,4 +243,7 @@ int isl_tab_save_samples(struct isl_tab *tab) WARN_UNUSED; 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 -- 2.7.4