summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-04-19 14:43:40 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-04-20 12:20:01 +0200
commit9887cd14e2777eed019aacfd0ac75554686c6b79 (patch)
treef1979a832227ea5030836814bf4eb9b414032f8c /filter
parentf5a9fb18b2b523e517ab425948c4488fe19e39a8 (diff)
use a map to avoid looping on every obj delete
Change-Id: I47ff4f0f959b7d09fc91593b7dacb3d1a2b50472 Reviewed-on: https://gerrit.libreoffice.org/53164 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'filter')
-rw-r--r--filter/source/msfilter/msdffimp.cxx21
1 files changed, 14 insertions, 7 deletions
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
index 6e1726c9785c..f2fbc026c16d 100644
--- a/filter/source/msfilter/msdffimp.cxx
+++ b/filter/source/msfilter/msdffimp.cxx
@@ -5030,14 +5030,18 @@ void SvxMSDffManager::GetGroupAnchors( const DffRecordHeader& rHd, SvStream& rSt
SvxMSDffImportRec* SvxMSDffImportData::find(const SdrObject* pObj)
{
- for (const auto& it : *this)
- {
- if (it->pObj == pObj)
- return it.get();
- }
+ auto it = m_ObjToRecMap.find(pObj);
+ if (it != m_ObjToRecMap.end())
+ return it->second;
return nullptr;
}
+void SvxMSDffImportData::insert(SvxMSDffImportRec* pImpRec)
+{
+ m_ObjToRecMap[pImpRec->pObj] = pImpRec;
+ m_Records.insert(std::unique_ptr<SvxMSDffImportRec>(pImpRec));
+}
+
void SvxMSDffManager::NotifyFreeObj(void* pData, SdrObject* pObj)
{
if (SdrObjGroup* pGroup = dynamic_cast<SdrObjGroup*>(pObj))
@@ -5050,7 +5054,10 @@ void SvxMSDffManager::NotifyFreeObj(void* pData, SdrObject* pObj)
SvxMSDffImportData& rImportData = *static_cast<SvxMSDffImportData*>(pData);
if (SvxMSDffImportRec* pRecord = rImportData.find(pObj))
+ {
+ rImportData.unmap(pObj);
pRecord->pObj = nullptr;
+ }
}
void SvxMSDffManager::FreeObj(void* pData, SdrObject* pObj)
@@ -5543,7 +5550,7 @@ SdrObject* SvxMSDffManager::ProcessObj(SvStream& rSt,
if( pOrgObj )
{
pImpRec->pObj = pOrgObj;
- rImportData.m_Records.insert(std::unique_ptr<SvxMSDffImportRec>(pImpRec));
+ rImportData.insert(pImpRec);
bDeleteImpRec = false;
if (pImpRec == pTextImpRec)
bDeleteTextImpRec = false;
@@ -5554,7 +5561,7 @@ SdrObject* SvxMSDffManager::ProcessObj(SvStream& rSt,
// Modify ShapeId (must be unique)
pImpRec->nShapeId |= 0x8000000;
pTextImpRec->pObj = pTextObj;
- rImportData.m_Records.insert(std::unique_ptr<SvxMSDffImportRec>(pTextImpRec));
+ rImportData.insert(pTextImpRec);
bDeleteTextImpRec = false;
if (pTextImpRec == pImpRec)
bDeleteImpRec = false;