diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-04-19 14:43:40 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-04-20 12:20:01 +0200 |
commit | 9887cd14e2777eed019aacfd0ac75554686c6b79 (patch) | |
tree | f1979a832227ea5030836814bf4eb9b414032f8c /filter | |
parent | f5a9fb18b2b523e517ab425948c4488fe19e39a8 (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.cxx | 21 |
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; |