From: Sven Verdoolaege Date: Fri, 16 Oct 2009 12:30:24 +0000 (+0200) Subject: isl_tab: support generic undo records X-Git-Tag: isl-0.02~218 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9550d0b383ffaacb83325343eb1952849951208;hp=d059396b4e4cda927161af041ea3b07913400b28;p=platform%2Fupstream%2Fisl.git isl_tab: support generic undo records --- 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