Kaydet (Commit) 97c934d9 authored tarafından Noel Grandin's avatar Noel Grandin

convert SwGlblDocContents to sorted_vector<unique_ptr<>>

Change-Id: I9766a03739aa63be8f42fc99012577cfa154298d
Reviewed-on: https://gerrit.libreoffice.org/60738
Tested-by: Jenkins
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst ace6bbf3
...@@ -60,10 +60,7 @@ public: ...@@ -60,10 +60,7 @@ public:
{ return GetDocPos() < rCmp.GetDocPos(); } { return GetDocPos() < rCmp.GetDocPos(); }
}; };
class SwGlblDocContents : public o3tl::sorted_vector<SwGlblDocContent*, o3tl::less_ptr_to<SwGlblDocContent> > { class SwGlblDocContents : public o3tl::sorted_vector<std::unique_ptr<SwGlblDocContent>, o3tl::less_uniqueptr_to<SwGlblDocContent> > {};
public:
~SwGlblDocContents() { DeleteAndDestroyAll(); }
};
#endif #endif
......
...@@ -53,7 +53,7 @@ bool SwEditShell::IsGlblDocSaveLinks() const ...@@ -53,7 +53,7 @@ bool SwEditShell::IsGlblDocSaveLinks() const
void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const
{ {
rArr.DeleteAndDestroyAll(); rArr.clear();
if( !getIDocumentSettingAccess().get(DocumentSettingId::GLOBAL_DOCUMENT) ) if( !getIDocumentSettingAccess().get(DocumentSettingId::GLOBAL_DOCUMENT) )
return; return;
...@@ -67,22 +67,21 @@ void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const ...@@ -67,22 +67,21 @@ void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const
const SwSection* pSect = rSectFormats[ --n ]->GetGlobalDocSection(); const SwSection* pSect = rSectFormats[ --n ]->GetGlobalDocSection();
if( pSect ) if( pSect )
{ {
SwGlblDocContent* pNew = nullptr; std::unique_ptr<SwGlblDocContent> pNew;
switch( pSect->GetType() ) switch( pSect->GetType() )
{ {
case TOX_HEADER_SECTION: case TOX_HEADER_SECTION:
break; // ignore break; // ignore
case TOX_CONTENT_SECTION: case TOX_CONTENT_SECTION:
OSL_ENSURE( dynamic_cast<const SwTOXBaseSection*>( pSect) != nullptr, "no TOXBaseSection!" ); OSL_ENSURE( dynamic_cast<const SwTOXBaseSection*>( pSect) != nullptr, "no TOXBaseSection!" );
pNew = new SwGlblDocContent( static_cast<const SwTOXBaseSection*>(pSect) ); pNew.reset(new SwGlblDocContent( static_cast<const SwTOXBaseSection*>(pSect) ));
break; break;
default: default:
pNew = new SwGlblDocContent( pSect ); pNew.reset(new SwGlblDocContent( pSect ));
break; break;
} }
if( pNew && !rArr.insert( pNew ).second ) rArr.insert( std::move(pNew) );
delete pNew;
} }
} }
...@@ -98,10 +97,8 @@ void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const ...@@ -98,10 +97,8 @@ void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const
if( ( pNd = pMyDoc->GetNodes()[ nSttIdx ])->IsContentNode() if( ( pNd = pMyDoc->GetNodes()[ nSttIdx ])->IsContentNode()
|| pNd->IsSectionNode() || pNd->IsTableNode() ) || pNd->IsSectionNode() || pNd->IsTableNode() )
{ {
SwGlblDocContent* pNew = new SwGlblDocContent( nSttIdx ); std::unique_ptr<SwGlblDocContent> pNew(new SwGlblDocContent( nSttIdx ));
if( !rArr.insert( pNew ).second ) if( rArr.insert( std::move(pNew) ).second )
delete pNew;
else
++n; // to the next position ++n; // to the next position
break; break;
} }
...@@ -119,17 +116,15 @@ void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const ...@@ -119,17 +116,15 @@ void SwEditShell::GetGlobalDocContent( SwGlblDocContents& rArr ) const
if( ( pNd = pMyDoc->GetNodes()[ nSttIdx ])->IsContentNode() if( ( pNd = pMyDoc->GetNodes()[ nSttIdx ])->IsContentNode()
|| pNd->IsSectionNode() || pNd->IsTableNode() ) || pNd->IsSectionNode() || pNd->IsTableNode() )
{ {
SwGlblDocContent* pNew = new SwGlblDocContent( nSttIdx ); rArr.insert( o3tl::make_unique<SwGlblDocContent>( nSttIdx ) );
if( !rArr.insert( pNew ).second )
delete pNew;
break; break;
} }
} }
else else
{ {
SwGlblDocContent* pNew = new SwGlblDocContent( std::unique_ptr<SwGlblDocContent> pNew(new SwGlblDocContent(
pMyDoc->GetNodes().GetEndOfExtras().GetIndex() + 2 ); pMyDoc->GetNodes().GetEndOfExtras().GetIndex() + 2 ));
rArr.insert( pNew ); rArr.insert( std::move(pNew) );
} }
} }
......
...@@ -270,7 +270,7 @@ sal_Int8 SwGlobalTree::ExecuteDrop( const ExecuteDropEvent& rEvt ) ...@@ -270,7 +270,7 @@ sal_Int8 SwGlobalTree::ExecuteDrop( const ExecuteDropEvent& rEvt )
{ {
nEntryCount++; nEntryCount++;
nAbsContPos++; nAbsContPos++;
pCnt = (*pTempContents)[ nAbsContPos ]; pCnt = (*pTempContents)[ nAbsContPos ].get();
} }
} }
} }
...@@ -659,7 +659,7 @@ void SwGlobalTree::Display(bool bOnlyUpdateUserData) ...@@ -659,7 +659,7 @@ void SwGlobalTree::Display(bool bOnlyUpdateUserData)
SvTreeListEntry* pEntry = First(); SvTreeListEntry* pEntry = First();
for (size_t i = 0; i < nCount && pEntry; i++) for (size_t i = 0; i < nCount && pEntry; i++)
{ {
SwGlblDocContent* pCont = (*m_pSwGlblDocContents)[i]; SwGlblDocContent* pCont = (*m_pSwGlblDocContents)[i].get();
pEntry->SetUserData(pCont); pEntry->SetUserData(pCont);
pEntry = Next(pEntry); pEntry = Next(pEntry);
assert(pEntry || i == nCount - 1); assert(pEntry || i == nCount - 1);
...@@ -683,7 +683,7 @@ void SwGlobalTree::Display(bool bOnlyUpdateUserData) ...@@ -683,7 +683,7 @@ void SwGlobalTree::Display(bool bOnlyUpdateUserData)
SvTreeListEntry* pSelEntry = nullptr; SvTreeListEntry* pSelEntry = nullptr;
for( size_t i = 0; i < nCount; i++) for( size_t i = 0; i < nCount; i++)
{ {
SwGlblDocContent* pCont = (*m_pSwGlblDocContents)[i]; SwGlblDocContent* pCont = (*m_pSwGlblDocContents)[i].get();
OUString sEntry; OUString sEntry;
Image aImage; Image aImage;
switch( pCont->GetType() ) switch( pCont->GetType() )
...@@ -1130,8 +1130,8 @@ bool SwGlobalTree::Update(bool bHard) ...@@ -1130,8 +1130,8 @@ bool SwGlobalTree::Update(bool bHard)
{ {
for(size_t i = 0; i < pTempContents->size() && !bCopy; i++) for(size_t i = 0; i < pTempContents->size() && !bCopy; i++)
{ {
SwGlblDocContent* pLeft = (*pTempContents)[i]; SwGlblDocContent* pLeft = (*pTempContents)[i].get();
SwGlblDocContent* pRight = (*m_pSwGlblDocContents)[i]; SwGlblDocContent* pRight = (*m_pSwGlblDocContents)[i].get();
GlobalDocContentType eType = pLeft->GetType(); GlobalDocContentType eType = pLeft->GetType();
SvTreeListEntry* pEntry = GetEntry(i); SvTreeListEntry* pEntry = GetEntry(i);
OUString sTemp = GetEntryText(pEntry); OUString sTemp = GetEntryText(pEntry);
...@@ -1153,10 +1153,7 @@ bool SwGlobalTree::Update(bool bHard) ...@@ -1153,10 +1153,7 @@ bool SwGlobalTree::Update(bool bHard)
} }
if(bCopy || bHard) if(bCopy || bHard)
{ {
m_pSwGlblDocContents->DeleteAndDestroyAll(); *m_pSwGlblDocContents = std::move( *pTempContents );
m_pSwGlblDocContents->insert( *pTempContents );
pTempContents->clear();
} }
} }
...@@ -1165,7 +1162,7 @@ bool SwGlobalTree::Update(bool bHard) ...@@ -1165,7 +1162,7 @@ bool SwGlobalTree::Update(bool bHard)
{ {
Clear(); Clear();
if(m_pSwGlblDocContents) if(m_pSwGlblDocContents)
m_pSwGlblDocContents->DeleteAndDestroyAll(); m_pSwGlblDocContents->clear();
} }
// FIXME: Implement a test for changes! // FIXME: Implement a test for changes!
return bRet; return bRet;
...@@ -1308,9 +1305,9 @@ void SwGlobalTree::InsertRegion( const SwGlblDocContent* _pContent, const Sequen ...@@ -1308,9 +1305,9 @@ void SwGlobalTree::InsertRegion( const SwGlblDocContent* _pContent, const Sequen
SwGlblDocContent* pAnchorContent = nullptr; SwGlblDocContent* pAnchorContent = nullptr;
OSL_ENSURE(aTempContents.size() > (nAnchorContent + nFile), "invalid anchor content -> last insertion failed"); OSL_ENSURE(aTempContents.size() > (nAnchorContent + nFile), "invalid anchor content -> last insertion failed");
if ( aTempContents.size() > (nAnchorContent + nFile) ) if ( aTempContents.size() > (nAnchorContent + nFile) )
pAnchorContent = aTempContents[nAnchorContent + nFile]; pAnchorContent = aTempContents[nAnchorContent + nFile].get();
else else
pAnchorContent = aTempContents.back(); pAnchorContent = aTempContents.back().get();
OUString sFileName(pFileNames[nFile]); OUString sFileName(pFileNames[nFile]);
INetURLObject aFileUrl; INetURLObject aFileUrl;
aFileUrl.SetSmartURL( sFileName ); aFileUrl.SetSmartURL( sFileName );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment