summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2021-06-24 15:01:02 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-06-30 20:57:16 +0200
commita9920e1fb8e7a1eb8158c8c699c2bf973d95bb32 (patch)
tree21f80a9f5a90b8248d4ff305d8994e44bb545d55 /writerfilter
parent2577db3d6b1e59e14441704dc408200d7ce3e256 (diff)
tdf#135316 store stylesheets in a map
for faster lookup. Shaves 3% off my loading time Change-Id: I075b42db52914988be4adef303825c211b02353f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117848 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> (cherry picked from commit ab5ac64bdd3205ba2ba9ac038719826f703a09a3) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118110
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx43
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.hxx2
2 files changed, 18 insertions, 27 deletions
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 361914a60aea..af4eefc0d54f 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -270,6 +270,7 @@ struct StyleSheetTable_Impl
uno::Reference< text::XTextDocument> m_xTextDocument;
uno::Reference< beans::XPropertySet> m_xTextDefaults;
std::vector< StyleSheetEntryPtr > m_aStyleSheetEntries;
+ std::map< OUString, StyleSheetEntryPtr > m_aStyleSheetEntriesMap;
StyleSheetEntryPtr m_pCurrentEntry;
PropertyMapPtr m_pDefaultParaProps, m_pDefaultCharProps;
OUString m_sDefaultParaStyleName; //WW8 name
@@ -809,6 +810,7 @@ void StyleSheetTable::lcl_entry(writerfilter::Reference<Properties>::Pointer_t r
{
m_pImpl->m_pCurrentEntry->sConvertedStyleName = ConvertStyleName( m_pImpl->m_pCurrentEntry->sStyleName );
m_pImpl->m_aStyleSheetEntries.push_back( m_pImpl->m_pCurrentEntry );
+ m_pImpl->m_aStyleSheetEntriesMap.emplace( m_pImpl->m_pCurrentEntry->sStyleIdentifierD, m_pImpl->m_pCurrentEntry );
}
else
{
@@ -1111,16 +1113,14 @@ void StyleSheetTable::ApplyStyleSheets( const FontTablePtr& rFontTable )
if (rVal.Name == "customStyle" && rVal.Value == true)
{
OUString sBaseId = pEntry->sBaseStyleIdentifier;
- for (const auto& aSheetProps : m_pImpl->m_aStyleSheetEntries)
+ auto findIt = m_pImpl->m_aStyleSheetEntriesMap.find(sBaseId);
+ if (findIt != m_pImpl->m_aStyleSheetEntriesMap.end())
{
- if (aSheetProps->sStyleIdentifierD == sBaseId)
- {
- StyleSheetPropertyMap& rStyleSheetProps
- = dynamic_cast<StyleSheetPropertyMap&>(*aSheetProps->pProperties);
- pStyleSheetProperties->SetListLevel(rStyleSheetProps.GetListLevel());
- pStyleSheetProperties->SetOutlineLevel(rStyleSheetProps.GetOutlineLevel());
- break;
- }
+ const auto& aSheetProps = findIt->second;
+ StyleSheetPropertyMap& rStyleSheetProps
+ = dynamic_cast<StyleSheetPropertyMap&>(*aSheetProps->pProperties);
+ pStyleSheetProperties->SetListLevel(rStyleSheetProps.GetListLevel());
+ pStyleSheetProperties->SetOutlineLevel(rStyleSheetProps.GetOutlineLevel());
}
}
}
@@ -1300,18 +1300,12 @@ void StyleSheetTable::ApplyStyleSheets( const FontTablePtr& rFontTable )
}
-StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(std::u16string_view sIndex)
+StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(const OUString& sIndex)
{
- StyleSheetEntryPtr pRet;
- for(const StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
- {
- if( rpEntry->sStyleIdentifierD == sIndex)
- {
- pRet = rpEntry;
- break;
- }
- }
- return pRet;
+ auto findIt = m_pImpl->m_aStyleSheetEntriesMap.find(sIndex);
+ if (findIt != m_pImpl->m_aStyleSheetEntriesMap.end())
+ return findIt->second;
+ return StyleSheetEntryPtr();
}
@@ -1346,12 +1340,9 @@ OUString StyleSheetTable::ConvertStyleName( const OUString& rWWName, bool bExten
if( bExtendedSearch )
{
//search for the rWWName in the IdentifierD of the existing styles and convert the sStyleName member
- //TODO: performance issue - put styles list into a map sorted by its sStyleIdentifierD members
- for( const auto& rStyleSheetEntryPtr : m_pImpl->m_aStyleSheetEntries )
- {
- if( rWWName == rStyleSheetEntryPtr->sStyleIdentifierD )
- sRet = rStyleSheetEntryPtr->sStyleName;
- }
+ auto findIt = m_pImpl->m_aStyleSheetEntriesMap.find(rWWName);
+ if (findIt != m_pImpl->m_aStyleSheetEntriesMap.end())
+ sRet = findIt->second->sStyleName;
}
// create a map only once
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
index ade93bb5da4d..94e7d4112430 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.hxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -90,7 +90,7 @@ public:
void ApplyNumberingStyleNameToParaStyles();
void ApplyStyleSheets( const FontTablePtr& rFontTable );
- StyleSheetEntryPtr FindStyleSheetByISTD(std::u16string_view sIndex);
+ StyleSheetEntryPtr FindStyleSheetByISTD(const OUString& sIndex);
StyleSheetEntryPtr FindStyleSheetByConvertedStyleName(std::u16string_view rIndex);
StyleSheetEntryPtr FindDefaultParaStyle();