improve OMultiTypeInterfaceContainerHelperVar2::disposeAndClear
no need to create an array, just move/empty the map in one step
Change-Id: I6480d671ca0542c4a871756df1eeee257087db5c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126154
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/include/comphelper/multiinterfacecontainer2.hxx b/include/comphelper/multiinterfacecontainer2.hxx
index e15c267..b9eea1b 100644
--- a/include/comphelper/multiinterfacecontainer2.hxx
+++ b/include/comphelper/multiinterfacecontainer2.hxx
@@ -170,36 +170,15 @@ public:
*/
inline void disposeAndClear(const css::lang::EventObject& rEvt)
{
typename InterfaceMap::size_type nSize = 0;
OInterfaceContainerHelper2** ppListenerContainers = nullptr;
// create a copy, because do not fire event in a guarded section
InterfaceMap tempMap;
{
::osl::MutexGuard aGuard(rMutex);
nSize = m_aMap.size();
if (nSize)
{
typedef OInterfaceContainerHelper2* ppp;
ppListenerContainers = new ppp[nSize];
typename InterfaceMap::iterator iter = m_aMap.begin();
typename InterfaceMap::iterator end = m_aMap.end();
typename InterfaceMap::size_type i = 0;
while (iter != end)
{
ppListenerContainers[i++] = (*iter).second.get();
++iter;
}
}
tempMap = std::move(m_aMap);
}
// create a copy, because do not fire event in a guarded section
for (typename InterfaceMap::size_type i = 0; i < nSize; i++)
{
if (ppListenerContainers[i])
ppListenerContainers[i]->disposeAndClear(rEvt);
}
delete[] ppListenerContainers;
for (auto& rPair : m_aMap)
rPair.second->disposeAndClear(rEvt);
}
/**