diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-24 19:54:20 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-24 19:54:20 +0100 |
commit | 2add69b7f08f19ae2687276ebafcf6989915aa69 (patch) | |
tree | be0e81f4c8477967ed3e448c93519fd9f0afe8ef | |
parent | a532338ca642ed386270047aefc56ed11ef120d3 (diff) | |
download | sciteco-2add69b7f08f19ae2687276ebafcf6989915aa69.tar.gz |
cache GLists corresponding to symbol lists
-rw-r--r-- | symbols.cpp | 8 | ||||
-rw-r--r-- | symbols.h | 9 |
2 files changed, 12 insertions, 5 deletions
diff --git a/symbols.cpp b/symbols.cpp index 8e81354..c05d153 100644 --- a/symbols.cpp +++ b/symbols.cpp @@ -51,10 +51,10 @@ SymbolList::lookup(const gchar *name, const gchar *prefix, bool case_sensitive) GList * SymbolList::get_glist(void) { - GList *list = NULL; - - while (size--) - list = g_list_prepend(list, (gchar *)entries[size].name); + if (!list) { + for (gint i = size; i; i--) + list = g_list_prepend(list, (gchar *)entries[i-1].name); + } return list; } @@ -14,9 +14,16 @@ private: const Entry *entries; gint size; + /* for auto-completions */ + GList *list; + public: SymbolList(const Entry *_entries = NULL, gint _size = 0) - : entries(_entries), size(_size) {} + : entries(_entries), size(_size), list(NULL) {} + ~SymbolList() + { + g_list_free(list); + } gint lookup(const gchar *name, const gchar *prefix = "", bool case_sensitive = false); |