writerfilter/source/dmapper/StyleSheetTable.cxx | 43 +++++++++--------------- writerfilter/source/dmapper/StyleSheetTable.hxx | 2 - 2 files changed, 18 insertions(+), 27 deletions(-)
New commits: commit a9920e1fb8e7a1eb8158c8c699c2bf973d95bb32 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Thu Jun 24 15:01:02 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Jun 30 20:57:16 2021 +0200 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.gran...@collabora.co.uk> (cherry picked from commit ab5ac64bdd3205ba2ba9ac038719826f703a09a3) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118110 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(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits