[Libreoffice-commits] core.git: sc/inc sc/source svl/source

Michael Meeks michael.meeks at collabora.com
Wed May 21 08:58:06 PDT 2014


 sc/inc/compiler.hxx              |    4 +++-
 sc/source/core/tool/compiler.cxx |   25 +++++++++++++++++++------
 svl/source/numbers/zforfind.cxx  |    1 -
 3 files changed, 22 insertions(+), 8 deletions(-)

New commits:
commit 34f0e4f42594adb97bdb64e5f2e8f00801b48e2e
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Wed May 21 14:26:27 2014 +0100

    ODS load perf: 7% of the time re-creating sheet name strings.
    
    No need to create cached versions of stringified sheet tokens for
    a given grammar at great for every formula that we compile; defer
    until use. Is this a large cost on save ?
    
    Change-Id: I8058ed564dbdc00ff45c02cb483c1a20a48af272

diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index 527ad76..8b5158c 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -328,7 +328,9 @@ private:
     bool        mbCloseBrackets;            // whether to close open brackets automatically, default TRUE
     bool        mbRewind;                   // whether symbol is to be rewound to some step during lexical analysis
     std::vector<sal_uInt16> maExternalFiles;
-    std::vector<OUString> maTabNames;
+
+    std::vector<OUString> maTabNames;                /// sheet names mangled for the current grammer for output
+    std::vector<OUString> &GetSetupTabNames() const; /// get or setup tab names for the current grammar
 
     bool   NextNewToken(bool bInArray = false);
 
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 751b98b..6f6b89d 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -228,14 +228,24 @@ void ScCompiler::SetGrammar( const FormulaGrammar::Grammar eGrammar )
         if (eMyGrammar != GetGrammar())
             SetGrammarAndRefConvention( eMyGrammar, eOldGrammar);
     }
+}
+
+// Unclear how this was intended to be refreshed when the
+// grammer or sheet count is changed ? Ideally this would be
+// a method on Document that would globally cache these.
+std::vector<OUString> &ScCompiler::GetSetupTabNames() const
+{
+    std::vector<OUString> &rTabNames = const_cast<ScCompiler *>(this)->maTabNames;
 
-    if (pDoc && maTabNames.empty())
+    if (pDoc && rTabNames.empty())
     {
-        maTabNames = pDoc->GetAllTableNames();
-        std::vector<OUString>::iterator it = maTabNames.begin(), itEnd = maTabNames.end();
+        rTabNames = pDoc->GetAllTableNames();
+        std::vector<OUString>::iterator it = rTabNames.begin(), itEnd = rTabNames.end();
         for (; it != itEnd; ++it)
             ScCompiler::CheckTabQuotes(*it, formula::FormulaGrammar::extractRefConvention(meGrammar));
     }
+
+    return rTabNames;
 }
 
 void ScCompiler::SetNumberFormatter( SvNumberFormatter* pFormatter )
@@ -4207,17 +4217,20 @@ void ScCompiler::CreateStringFromSingleRef(OUStringBuffer& rBuffer,FormulaToken*
         else
         {
             rBuffer.append(ScGlobal::GetRscString(STR_NO_NAME_REF));
-            pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef, maTabNames, aRef, true);
+            pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef,
+                              GetSetupTabNames(), aRef, true);
         }
     }
     else
-        pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef, maTabNames, aRef, true);
+        pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef,
+                          GetSetupTabNames(), aRef, true);
 }
 
 void ScCompiler::CreateStringFromDoubleRef(OUStringBuffer& rBuffer,FormulaToken* _pTokenP) const
 {
     OUString aErrRef = GetCurrentOpCodeMap()->getSymbol(ocErrRef);
-    pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef, maTabNames, static_cast<ScToken*>(_pTokenP)->GetDoubleRef(), false);
+    pConv->makeRefStr(rBuffer, meGrammar, aPos, aErrRef, GetSetupTabNames(),
+                      static_cast<ScToken*>(_pTokenP)->GetDoubleRef(), false);
 }
 
 void ScCompiler::CreateStringFromIndex(OUStringBuffer& rBuffer,FormulaToken* _pTokenP) const
diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index 0385970..cca342f 100644
--- a/svl/source/numbers/zforfind.cxx
+++ b/svl/source/numbers/zforfind.cxx
@@ -17,7 +17,6 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-
 #include <ctype.h>
 #include <cstdlib>
 #include <float.h>


More information about the Libreoffice-commits mailing list