From 19675a1a4899f68a4e7afbd45cebc63b544650e4 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sun, 20 Nov 2016 05:27:10 +0100 Subject: optimized RBTree: avoid unnecessary virtual RBTree and RBEntry implementation classes * whenever the implementation class was not exactly RBEntryType, it had to have a virtual destructor since RBTree cared about cleanup and had to delete its members. * Since it does not allocate them, it is consistent to remove RBTree::clear(). The destructor now only checks that subclasses have cleaned up. Implementing cleanup in the subclasses is trivial. * Consequently, RBEntryString no longer has to be virtual. HelpIndex and GotoTables are completely non-virtual now which saves memory (and a bit of cleanup speed). For QRegister, not much changes, though. --- src/goto.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/goto.h') diff --git a/src/goto.h b/src/goto.h index f2064d1..5d29e8b 100644 --- a/src/goto.h +++ b/src/goto.h @@ -77,6 +77,11 @@ class GotoTable : private RBTreeString { public: GotoTable(bool _undo = true) : must_undo(_undo) {} + ~GotoTable() + { + clear(); + } + gint remove(const gchar *name); gint find(const gchar *name); @@ -91,7 +96,10 @@ public: inline void clear(void) { - RBTreeString::clear(); + Label *cur; + + while ((cur = (Label *)min())) + delete (Label *)RBTreeString::remove(cur); } inline gchar * -- cgit v1.2.3