diff options
-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); |