diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-02-14 04:38:18 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-02-14 05:22:07 +0100 |
commit | dd4947d015548dc4c1c299a50dda4f86d6d31bdc (patch) | |
tree | 713ac6e065c1ac996981c8773eb7f5452a8a197d | |
parent | 0f5c2c89f20dc07c1e0f8e8a619850629825c9c3 (diff) | |
download | sciteco-dd4947d015548dc4c1c299a50dda4f86d6d31bdc.tar.gz |
undo q-register table initializations (insertions) on rubout
-rw-r--r-- | src/qregisters.cpp | 1 | ||||
-rw-r--r-- | src/qregisters.h | 24 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 5d526a7..b5e3080 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -430,6 +430,7 @@ done: if (!initialize) throw State::InvalidQRegError(name, is_local); reg = table.insert(new QRegister(name)); + table.undo_remove(reg); } return reg; diff --git a/src/qregisters.h b/src/qregisters.h index c5740f6..15acd86 100644 --- a/src/qregisters.h +++ b/src/qregisters.h @@ -153,11 +153,33 @@ public: }; class QRegisterTable : public RBTree { + class UndoTokenRemove : public UndoToken { + QRegisterTable *table; + QRegister *reg; + + public: + UndoTokenRemove(QRegisterTable *_table, QRegister *_reg) + : table(_table), reg(_reg) {} + + void + run(void) + { + delete table->remove(reg); + } + }; + bool must_undo; public: QRegisterTable(bool _undo = true); + inline void + undo_remove(QRegister *reg) + { + if (must_undo) + undo.push(new UndoTokenRemove(this, reg)); + } + inline QRegister * insert(QRegister *reg) { @@ -189,7 +211,7 @@ public: inline QRegister * operator [](gchar chr) { - return operator []((gchar []){chr, '\0'}); + return operator [](CHR2STR(chr)); } void edit(QRegister *reg); |