From 7dbb2831b81ff0174054d30b1fc105b2113c272d Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Thu, 8 Nov 2012 01:20:37 +0100 Subject: added support for labels, including the goto label table * uses BSD tree macros, might later be abstracted to a C++ table class --- undo.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'undo.h') diff --git a/undo.h b/undo.h index 17a8ba8..aeefb09 100644 --- a/undo.h +++ b/undo.h @@ -4,6 +4,7 @@ #include #include +#include #include @@ -48,6 +49,31 @@ public: } }; +class UndoTokenString : public UndoToken { + gchar **ptr; + gchar *str; + +public: + UndoTokenString(gchar *&variable, gchar *_str) + : UndoToken(), ptr(&variable) + { + str = _str ? g_strdup(_str) : NULL; + } + + ~UndoTokenString() + { + g_free(str); + } + + void + run(void) + { + g_free(*ptr); + *ptr = str; + str = NULL; + } +}; + extern class UndoStack { SLIST_HEAD(undo_head, UndoToken) head; @@ -86,6 +112,17 @@ public: push_var(variable, variable); } + inline void + push_str(gchar *&variable, gchar *str) + { + push(new UndoTokenString(variable, str)); + } + inline void + push_str(gchar *&variable) + { + push_str(variable, variable); + } + void pop(gint pos); } undo; -- cgit v1.2.3