sw/inc/calbck.hxx | 7 +++++++ sw/inc/swtable.hxx | 3 +++ sw/source/filter/xml/XMLRedlineImportHelper.cxx | 2 +- sw/source/filter/xml/xmlfmt.cxx | 8 ++++---- sw/source/filter/xml/xmlimp.cxx | 12 +----------- sw/source/filter/xml/xmlimp.hxx | 4 ---- sw/source/filter/xml/xmlmeta.cxx | 2 +- sw/source/filter/xml/xmltbli.cxx | 4 ++-- sw/source/filter/xml/xmltexti.cxx | 4 ++-- 9 files changed, 21 insertions(+), 25 deletions(-)
New commits: commit 2c4aabb220ad1e8f1cbc75f2361fe17893d7cc29 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Sat Oct 29 11:11:36 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sat Oct 29 18:10:42 2022 +0200 tdf#126788 speed up GetDocFromXMLImport we can just static_cast to SwXMLImport, no need to use XUnoTunnel Change-Id: I5ca1a1e2d63ae632578261630f67c9d164727cef Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142016 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.cxx b/sw/source/filter/xml/XMLRedlineImportHelper.cxx index e681f2025b6c..5b7b008129b5 100644 --- a/sw/source/filter/xml/XMLRedlineImportHelper.cxx +++ b/sw/source/filter/xml/XMLRedlineImportHelper.cxx @@ -343,7 +343,7 @@ XMLRedlineImportHelper::~XMLRedlineImportHelper() aAny <<= true; m_xModelPropertySet->setPropertyValue( g_sShowChanges, aAny ); // TODO maybe we need some property for the view-setting? - SwDoc *const pDoc(SwImport::GetDocFromXMLImport(m_rImport)); + SwDoc *const pDoc(static_cast<SwXMLImport&>(m_rImport).getDoc()); assert(pDoc); pDoc->GetDocumentRedlineManager().SetHideRedlines(!m_bShowChanges); } diff --git a/sw/source/filter/xml/xmlfmt.cxx b/sw/source/filter/xml/xmlfmt.cxx index ac12df0779bf..8d21591e12b9 100644 --- a/sw/source/filter/xml/xmlfmt.cxx +++ b/sw/source/filter/xml/xmlfmt.cxx @@ -525,7 +525,7 @@ SvXMLImportContext *SwXMLItemSetStyleContext_Impl::CreateItemSetContext( SvXMLImportContext *pContext = nullptr; - SwDoc* pDoc = SwImport::GetDocFromXMLImport( GetSwImport() ); + SwDoc* pDoc = GetSwImport().getDoc(); SfxItemPool& rItemPool = pDoc->GetAttrPool(); switch( GetFamily() ) @@ -615,7 +615,7 @@ void SwXMLItemSetStyleContext_Impl::ConnectPageDesc() return; m_bPageDescConnected = true; - SwDoc *pDoc = SwImport::GetDocFromXMLImport( GetSwImport() ); + SwDoc *pDoc = GetSwImport().getDoc(); // #i40788# - first determine the display name of the page style, // then map this name to the corresponding user interface name. @@ -673,7 +673,7 @@ bool SwXMLItemSetStyleContext_Impl::ResolveDataStyleName() { if( !m_oItemSet ) { - SwDoc *pDoc = SwImport::GetDocFromXMLImport( GetSwImport() ); + SwDoc *pDoc = GetSwImport().getDoc(); SfxItemPool& rItemPool = pDoc->GetAttrPool(); m_oItemSet.emplace( rItemPool, aTableBoxSetRange ); @@ -1006,7 +1006,7 @@ void SwXMLImport::FinishStyles() void SwXMLImport::UpdateTextCollConditions( SwDoc *pDoc ) { if( !pDoc ) - pDoc = SwImport::GetDocFromXMLImport( *this ); + pDoc = getDoc(); const SwTextFormatColls& rColls = *pDoc->GetTextFormatColls(); const size_t nCount = rColls.size(); diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx index 62263ce2737f..1fa30ceedfdd 100644 --- a/sw/source/filter/xml/xmlimp.cxx +++ b/sw/source/filter/xml/xmlimp.cxx @@ -828,7 +828,7 @@ void SwXMLImport::endDocument() // tdf#150753: pDoc may be null e.g. when the package lacks content.xml; // we should not forget to tidy up here, including unlocking draw model if (!pDoc) - pDoc = SwImport::GetDocFromXMLImport(*this); + pDoc = getDoc(); assert(pDoc); // SJ: #i49801# -> now permitting repaints if (getImportFlags() == SvXMLImportFlags::ALL) @@ -1632,16 +1632,6 @@ void SwXMLImport::initialize( } } -SwDoc* SwImport::GetDocFromXMLImport( SvXMLImport const & rImport ) -{ - auto pTextDoc = comphelper::getFromUnoTunnel<SwXTextDocument>(rImport.GetModel()); - assert( pTextDoc ); - assert( pTextDoc->GetDocShell() ); - SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); - OSL_ENSURE( pDoc, "Where is my document?" ); - return pDoc; -} - void SwXMLImport::initXForms() { // obtain SwDoc diff --git a/sw/source/filter/xml/xmlimp.hxx b/sw/source/filter/xml/xmlimp.hxx index d5e988badeb7..22f012c4dbfc 100644 --- a/sw/source/filter/xml/xmlimp.hxx +++ b/sw/source/filter/xml/xmlimp.hxx @@ -48,10 +48,6 @@ enum class SfxStyleFamily; // for styles, autostyles and settings + meta #define PROGRESS_BAR_STEP 20 -namespace SwImport { - SwDoc* GetDocFromXMLImport( SvXMLImport const & ); -} - // we only need this scoped enum to be flags here, in sw namespace o3tl { diff --git a/sw/source/filter/xml/xmlmeta.cxx b/sw/source/filter/xml/xmlmeta.cxx index 69d07702aa8f..925fea5d9aea 100644 --- a/sw/source/filter/xml/xmlmeta.cxx +++ b/sw/source/filter/xml/xmlmeta.cxx @@ -109,7 +109,7 @@ void SwXMLImport::SetStatistics( SvXMLImport::SetStatistics(i_rStats); - SwDoc *pDoc = SwImport::GetDocFromXMLImport( *this ); + SwDoc *pDoc = getDoc(); SwDocStat aDocStat( pDoc->getIDocumentStatistics().GetDocStat() ); sal_uInt32 nTokens = 0; diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx index b2fed3e3376f..e53be9b8ff4f 100644 --- a/sw/source/filter/xml/xmltbli.cxx +++ b/sw/source/filter/xml/xmltbli.cxx @@ -1166,7 +1166,7 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport, } } - SwDoc *pDoc = SwImport::GetDocFromXMLImport( GetSwImport() ); + SwDoc *pDoc = GetSwImport().getDoc(); OUString sTableName; if( !aName.isEmpty() ) @@ -2687,7 +2687,7 @@ const SwStartNode *SwXMLTableContext::InsertTableSection( } else { - SwDoc* pDoc = SwImport::GetDocFromXMLImport( GetSwImport() ); + SwDoc* pDoc = GetSwImport().getDoc(); const SwEndNode *pEndNd = pPrevSttNd ? pPrevSttNd->EndOfSectionNode() : m_pTableNode->EndOfSectionNode(); // #i78921# - make code robust diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx index 8c88e8a8b13c..7ec4616f76dd 100644 --- a/sw/source/filter/xml/xmltexti.cxx +++ b/sw/source/filter/xml/xmltexti.cxx @@ -220,7 +220,7 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertOLEObject( assert(xCursorTunnel.is() && "missing XUnoTunnel for Cursor"); OTextCursorHelper* pTextCursor = comphelper::getFromUnoTunnel<OTextCursorHelper>(xCursorTunnel); SAL_WARN_IF(!pTextCursor, "sw.uno", "SwXTextCursor missing"); - SwDoc *pDoc = SwImport::GetDocFromXMLImport( rImport ); + SwDoc *pDoc = static_cast<SwXMLImport&>(rImport).getDoc(); SfxItemSetFixed<RES_FRMATR_BEGIN, RES_FRMATR_END> aItemSet( pDoc->GetAttrPool() ); Size aTwipSize( 0, 0 ); @@ -522,7 +522,7 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertOOoLink( assert(xCursorTunnel.is() && "missing XUnoTunnel for Cursor"); OTextCursorHelper* pTextCursor = comphelper::getFromUnoTunnel<OTextCursorHelper>(xCursorTunnel); OSL_ENSURE( pTextCursor, "SwXTextCursor missing" ); - SwDoc *pDoc = SwImport::GetDocFromXMLImport( rImport ); + SwDoc *pDoc = static_cast<SwXMLImport&>(rImport).getDoc(); SfxItemSetFixed<RES_FRMATR_BEGIN, RES_FRMATR_END> aItemSet( pDoc->GetAttrPool() ); Size aTwipSize( 0, 0 ); commit f2ec354bf4f535132d34b206382cceb22ec7f43c Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Sat Oct 29 11:09:40 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sat Oct 29 18:10:32 2022 +0200 tdf#126788 dynamic_cast -> virtual call use a virtual method to speed up dynamic_cast to SwTable node Change-Id: I0e8eb8d671ac7aa1d15f1f4b37fb4c17220fafca Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142014 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx index 5359973a86d2..26dcd2566fc1 100644 --- a/sw/inc/calbck.hxx +++ b/sw/inc/calbck.hxx @@ -38,6 +38,7 @@ class SwAttrSet; class SwCellFrame; class SwTabFrame; class SwRowFrame; +class SwTable; /* SwModify and SwClient cooperate in propagating attribute changes. @@ -123,6 +124,7 @@ namespace sw virtual const SwCellFrame* DynCastCellFrame() const { return nullptr; } virtual const SwTabFrame* DynCastTabFrame() const { return nullptr; } virtual const SwRowFrame* DynCastRowFrame() const { return nullptr; } + virtual const SwTable* DynCastTable() const { return nullptr; } }; enum class IteratorMode { Exact, UnwrapMulti }; } @@ -328,6 +330,11 @@ namespace sw::detail return dynamic_cast<const CastDest *>(pSource); } template<> + inline const SwTable* internal_dyn_cast(const sw::WriterListener * pSource) + { + return pSource->DynCastTable(); + } + template<> inline const SwCellFrame* internal_dyn_cast(const sw::WriterListener * pSource) { return pSource->DynCastCellFrame(); diff --git a/sw/inc/swtable.hxx b/sw/inc/swtable.hxx index e750ee02bd4d..49f5bf8418af 100644 --- a/sw/inc/swtable.hxx +++ b/sw/inc/swtable.hxx @@ -154,6 +154,9 @@ public: // @@@ public copy ctor, but no copy assignment? SwTable( const SwTable& rTable ); // no copy of the lines !! + + virtual const SwTable* DynCastTable() const override { return this; } + private: // @@@ public copy ctor, but no copy assignment? SwTable & operator= (const SwTable &) = delete;