[Libreoffice-commits] core.git: writerfilter/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Fri Jun 25 12:51:48 UTC 2021


 writerfilter/source/dmapper/StyleSheetTable.cxx |   43 +++++++++---------------
 writerfilter/source/dmapper/StyleSheetTable.hxx |    2 -
 2 files changed, 18 insertions(+), 27 deletions(-)

New commits:
commit ab5ac64bdd3205ba2ba9ac038719826f703a09a3
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Jun 24 15:01:02 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Jun 25 14:51:08 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.grandin at collabora.co.uk>

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();
 


More information about the Libreoffice-commits mailing list