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
 

Reply via email to