commit f8da042312cf9a563f46e4a767fc3c4ae6ecb764 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Fri Mar 21 12:24:47 2014 +0100
Do not store Languages objects in completion words lists In the current code each paragraph contains a map<Language, WordList*>, which means that it contains a full copy of the language object. Since these objects contain translation tables nowadays, this is a very bad idea. This patch simply replaces the Language key by a string. When loading the Userguide on linux/x86_64, the total memory consumption decreases from 36.27MB to 31.50MB. diff --git a/src/LyX.cpp b/src/LyX.cpp index 41c69f7..b784831 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -33,6 +33,7 @@ #include "FuncStatus.h" #include "HunspellChecker.h" #include "KeyMap.h" +#include "Language.h" #include "LaTeXFonts.h" #include "LayoutFile.h" #include "Lexer.h" diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index ffcb5f2..4d9b37c 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -499,7 +499,7 @@ public: TextContainer text_; typedef set<docstring> Words; - typedef map<Language, Words> LangWordsMap; + typedef map<string, Words> LangWordsMap; /// LangWordsMap words_; /// @@ -3867,7 +3867,7 @@ void Paragraph::collectWords() if (cit == d->fontlist_.end()) return; Language const * lang = cit->font().language(); - d->words_[*lang].insert(word); + d->words_[lang->lang()].insert(word); } } } diff --git a/src/Text.cpp b/src/Text.cpp index c4cac88..cdcc200 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -2120,7 +2120,7 @@ bool Text::completionSupported(Cursor const & cur) const CompletionList const * Text::createCompletionList(Cursor const & cur) const { - WordList const * list = theWordList(*cur.getFont().language()); + WordList const * list = theWordList(cur.getFont().language()->lang()); return new TextCompletionList(cur, list); } diff --git a/src/WordList.cpp b/src/WordList.cpp index 762e1b9..3a095af 100644 --- a/src/WordList.cpp +++ b/src/WordList.cpp @@ -12,14 +12,11 @@ #include "WordList.h" -#include "Language.h" - #include "support/convert.h" #include "support/debug.h" #include "support/docstring.h" -#include "support/weighted_btree.h" - #include "support/lassert.h" +#include "support/weighted_btree.h" #include <map> @@ -28,12 +25,13 @@ using namespace std; namespace lyx { /// -map<Language, WordList *> theGlobalWordList; +typedef map<string, WordList *> GlobalWordList; +GlobalWordList theGlobalWordList; -WordList * theWordList(Language const & lang) +WordList * theWordList(string const & lang) { - map<Language, WordList *>::iterator it = theGlobalWordList.find(lang); + GlobalWordList::iterator it = theGlobalWordList.find(lang); if (it != theGlobalWordList.end()) return it->second; else @@ -44,7 +42,7 @@ WordList * theWordList(Language const & lang) void WordList::cleanupWordLists() { - map<Language, WordList *>::const_iterator it = theGlobalWordList.begin(); + GlobalWordList::const_iterator it = theGlobalWordList.begin(); for (; it != theGlobalWordList.end(); ++it) delete it->second; theGlobalWordList.clear(); diff --git a/src/WordList.h b/src/WordList.h index b7f88fb..f57f20b 100644 --- a/src/WordList.h +++ b/src/WordList.h @@ -14,8 +14,6 @@ #include "support/docstring.h" -#include "Language.h" - namespace lyx { class WordList { @@ -41,7 +39,7 @@ private: Impl * d; }; -WordList * theWordList(Language const & lang); +WordList * theWordList(std::string const & lang); } // namespace lyx