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 <noel.grandin@collabora.co.uk>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/9633
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 1e786f1a4b588ce289b90979231b3c5e55cab27d)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210492
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Noel Grandin
2026-09-04 19:47:34 +02:00
committed by Xisco Fauli
parent 75589a573e
commit 01df8b6ff0
+10 -8
View File
@@ -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<OUString, OpCodeMapData> aLocaleSymbolMap;
static std::unordered_map<OUString, OpCodeMapData> 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<FormulaCompiler::OpCodeMap>(
rEntry.mxSymbolMap = std::make_shared<FormulaCompiler::OpCodeMap>(
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
{