diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2024-05-29 18:32:52 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2024-05-30 09:17:37 +0200 |
commit | 50a27ef3fb3d7ceab2acacdccd4048cbedb866f1 (patch) | |
tree | 799ae71f18593fb348f9f9f75baf5a4e6de5792e /sw/source | |
parent | ee4d61b08dabe1c184a49c7301a301ed0dcfc710 (diff) |
reduce allocation of SwPaM
Change-Id: I32536dbdb178a5f234cf64a8e7627a569986d942
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168228
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/core/doc/DocumentContentOperationsManager.cxx | 11 | ||||
-rw-r--r-- | sw/source/core/doc/docsort.cxx | 10 |
2 files changed, 10 insertions, 11 deletions
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index 0e5e0db06be1..366cd276440b 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -95,6 +95,7 @@ #include <tuple> #include <memory> +#include <optional> using namespace ::com::sun::star::i18n; @@ -2051,10 +2052,10 @@ bool DocumentContentOperationsManager::CopyRange(SwPaM& rPam, SwPosition& rPos, } } - SwPaM* pRedlineRange = nullptr; + std::optional<SwPaM> pRedlineRange; if( rDoc.getIDocumentRedlineAccess().IsRedlineOn() || (!rDoc.getIDocumentRedlineAccess().IsIgnoreRedline() && !rDoc.getIDocumentRedlineAccess().GetRedlineTable().empty() ) ) - pRedlineRange = new SwPaM( rPos ); + pRedlineRange.emplace( rPos ); RedlineFlags eOld = rDoc.getIDocumentRedlineAccess().GetRedlineFlags(); @@ -2062,7 +2063,7 @@ bool DocumentContentOperationsManager::CopyRange(SwPaM& rPam, SwPosition& rPos, if( &rDoc != &m_rDoc ) { // ordinary copy - bRet = CopyImpl(rPam, rPos, flags & ~SwCopyFlags::CheckPosInFly, pRedlineRange); + bRet = CopyImpl(rPam, rPos, flags & ~SwCopyFlags::CheckPosInFly, pRedlineRange ? &*pRedlineRange : nullptr); } else if( ! ( *pStt <= rPos && rPos < *pEnd && ( pStt->GetNode() != pEnd->GetNode() || @@ -2070,7 +2071,7 @@ bool DocumentContentOperationsManager::CopyRange(SwPaM& rPam, SwPosition& rPos, { // Copy to a position outside of the area, or copy a single TextNode // Do an ordinary copy - bRet = CopyImpl(rPam, rPos, flags & ~SwCopyFlags::CheckPosInFly, pRedlineRange); + bRet = CopyImpl(rPam, rPos, flags & ~SwCopyFlags::CheckPosInFly, pRedlineRange ? &*pRedlineRange : nullptr); } else { @@ -2086,7 +2087,7 @@ bool DocumentContentOperationsManager::CopyRange(SwPaM& rPam, SwPosition& rPos, new SwRangeRedline(RedlineType::Insert, *pRedlineRange, nMovedID), true); else rDoc.getIDocumentRedlineAccess().SplitRedline( *pRedlineRange ); - delete pRedlineRange; + pRedlineRange.reset(); } return bRet; diff --git a/sw/source/core/doc/docsort.cxx b/sw/source/core/doc/docsort.cxx index 5be48cdedd30..df5aaf6e5c89 100644 --- a/sw/source/core/doc/docsort.cxx +++ b/sw/source/core/doc/docsort.cxx @@ -312,14 +312,14 @@ bool SwDoc::SortText(const SwPaM& rPaM, const SwSortOptions& rOpt) GetIDocumentUndoRedo().StartUndo( SwUndoId::START, nullptr ); } - SwPaM* pRedlPam = nullptr; + std::optional<SwPaM> pRedlPam; SwUndoRedlineSort* pRedlUndo = nullptr; SwUndoSort* pUndoSort = nullptr; // To-Do - add 'SwExtraRedlineTable' also ? if( getIDocumentRedlineAccess().IsRedlineOn() || (!getIDocumentRedlineAccess().IsIgnoreRedline() && !getIDocumentRedlineAccess().GetRedlineTable().empty() )) { - pRedlPam = new SwPaM( pStart->GetNode(), pEnd->GetNode(), SwNodeOffset(-1), SwNodeOffset(1) ); + pRedlPam.emplace( pStart->GetNode(), pEnd->GetNode(), SwNodeOffset(-1), SwNodeOffset(1) ); SwContentNode* pCNd = pRedlPam->GetMarkContentNode(); if( pCNd ) pRedlPam->GetMark()->SetContent( pCNd->Len() ); @@ -362,8 +362,7 @@ bool SwDoc::SortText(const SwPaM& rPaM, const SwSortOptions& rOpt) else { getIDocumentRedlineAccess().DeleteRedline( *pRedlPam, true, RedlineType::Any ); - delete pRedlPam; - pRedlPam = nullptr; + pRedlPam.reset(); } } @@ -447,8 +446,7 @@ bool SwDoc::SortText(const SwPaM& rPaM, const SwSortOptions& rOpt) pRedlUndo->SetValues( *pRedlPam ); } - delete pRedlPam; - pRedlPam = nullptr; + pRedlPam.reset(); } GetIDocumentUndoRedo().DoUndo( bUndo ); if( bUndo ) |