From 01df8b6ff05914c2542e3eb6e502e0df475f932b Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 20 Aug 2026 14:20:21 +0200 Subject: [PATCH] map->unordered_map in lcl_fillNativeSymbols no need to use an ordered map here, and an unordered map is much faster. Also avoid repeatedly indexing into the map. Change-Id: Ia6b39800a9890ab0df3e8e73282d504e91e679ec Signed-off-by: Noel Grandin Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/9633 Reviewed-by: Mike Kaganski Tested-by: Jenkins CPCI (cherry picked from commit 1e786f1a4b588ce289b90979231b3c5e55cab27d) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210492 Reviewed-by: Xisco Fauli Tested-by: Xisco Fauli --- formula/source/core/api/FormulaCompiler.cxx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index c7e8633c65ec..8a02407ca694 100644 --- a/formula/source/core/api/FormulaCompiler.cxx +++ b/formula/source/core/api/FormulaCompiler.cxx @@ -1039,7 +1039,7 @@ FormulaCompiler::OpCodeMapPtr FormulaCompiler::CreateOpCodeMap( static bool lcl_fillNativeSymbols( FormulaCompiler::NonConstOpCodeMapPtr& xMap, FormulaCompiler::InitSymbols eWhat = FormulaCompiler::InitSymbols::INIT ) { static OpCodeMapData aSymbolMap; - static std::map aLocaleSymbolMap; + static std::unordered_map aLocaleSymbolMap; std::unique_lock aGuard(aSymbolMap.maMtx); if (comphelper::LibreOfficeKit::isActive()) @@ -1050,23 +1050,25 @@ static bool lcl_fillNativeSymbols( FormulaCompiler::NonConstOpCodeMapPtr& xMap, return aLocaleSymbolMap.contains(language) && bool(aLocaleSymbolMap[language].mxSymbolMap); } - else if (eWhat == FormulaCompiler::InitSymbols::DESTROY) + + auto& rEntry = aLocaleSymbolMap[language]; + if (eWhat == FormulaCompiler::InitSymbols::DESTROY) { - aLocaleSymbolMap[language].mxSymbolMap.reset(); + rEntry.mxSymbolMap.reset(); } - else if (!aLocaleSymbolMap[language].mxSymbolMap) + else if (!rEntry.mxSymbolMap) { // Core - aLocaleSymbolMap[language].mxSymbolMap = std::make_shared( + rEntry.mxSymbolMap = std::make_shared( ocLastOpcodeId + 1, true, FormulaGrammar::GRAM_NATIVE_UI); OpCodeList aOpCodeListSymbols(RID_STRLIST_FUNCTION_NAMES_SYMBOLS, - aLocaleSymbolMap[language].mxSymbolMap); + rEntry.mxSymbolMap); OpCodeList aOpCodeListNative(RID_STRLIST_FUNCTION_NAMES, - aLocaleSymbolMap[language].mxSymbolMap); + rEntry.mxSymbolMap); // No AddInMap for native core mapping. } - xMap = aLocaleSymbolMap[language].mxSymbolMap; + xMap = rEntry.mxSymbolMap; } else {