From 8c7b42c942d6693915dc825ede80279f720a5775 Mon Sep 17 00:00:00 2001 From: Julien Nabet Date: Fri, 1 Sep 2017 21:05:26 +0200 Subject: Replace list by vector session.cxx (vcl) + simplify loops Change-Id: Ic25576db83fe47f7da45667912d24d8ec44494e1 Reviewed-on: https://gerrit.libreoffice.org/41803 Tested-by: Jenkins Reviewed-by: Noel Grandin --- vcl/source/app/session.cxx | 94 +++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 52 deletions(-) diff --git a/vcl/source/app/session.cxx b/vcl/source/app/session.cxx index 93b019372566..57a4303e2aea 100644 --- a/vcl/source/app/session.cxx +++ b/vcl/source/app/session.cxx @@ -35,7 +35,7 @@ #include #include -#include +#include using namespace com::sun::star::uno; using namespace com::sun::star::lang; @@ -64,7 +64,7 @@ class VCLSession: {} }; - std::list< Listener > m_aListeners; + std::vector< Listener > m_aListeners; std::unique_ptr< SalSession > m_xSession; bool m_bInteractionRequested; bool m_bInteractionGranted; @@ -111,17 +111,15 @@ void VCLSession::callSaveRequested( bool bShutdown ) { SAL_INFO("vcl.se", "VCLSession::callSaveRequested" ); - std::list< Listener > aListeners; + std::vector< Listener > aListeners; { osl::MutexGuard aGuard( m_aMutex ); // reset listener states - for( std::list< Listener >::iterator it = m_aListeners.begin(); - it != m_aListeners.end(); ++it ) - { - it->m_bSaveDone = it->m_bInteractionRequested = it->m_bInteractionDone = false; + for (auto & it: m_aListeners) { + it.m_bSaveDone = it.m_bInteractionRequested = it.m_bInteractionDone = false; } - // copy listener list since calling a listener may remove it. + // copy listener vector since calling a listener may remove it. aListeners = m_aListeners; // set back interaction state m_bSaveDone = false; @@ -144,21 +142,21 @@ void VCLSession::callSaveRequested( bool bShutdown ) } SolarMutexReleaser aReleaser; - for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) - it->m_xListener->doSave( bShutdown, false/*bCancelable*/ ); + for (auto const & it: aListeners) + it.m_xListener->doSave( bShutdown, false/*bCancelable*/ ); } void VCLSession::callInteractionGranted( bool bInteractionGranted ) { SAL_INFO("vcl.se", "VCLSession::callInteractionGranted" ); - std::list< Listener > aListeners; + std::vector< Listener > aListeners; { osl::MutexGuard aGuard( m_aMutex ); - // copy listener list since calling a listener may remove it. - for( std::list< Listener >::const_iterator it = m_aListeners.begin(); it != m_aListeners.end(); ++it ) - if( it->m_bInteractionRequested ) - aListeners.push_back( *it ); + // copy listener vector since calling a listener may remove it. + for (auto const & it: m_aListeners) + if( it.m_bInteractionRequested ) + aListeners.push_back( it ); m_bInteractionGranted = bInteractionGranted; @@ -176,45 +174,45 @@ void VCLSession::callInteractionGranted( bool bInteractionGranted ) } SolarMutexReleaser aReleaser; - for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) - it->m_xListener->approveInteraction( bInteractionGranted ); + for (auto const & it: aListeners) + it.m_xListener->approveInteraction( bInteractionGranted ); } void VCLSession::callShutdownCancelled() { SAL_INFO("vcl.se", "VCLSession::callShutdownCancelled"); - std::list< Listener > aListeners; + std::vector< Listener > aListeners; { osl::MutexGuard aGuard( m_aMutex ); - // copy listener list since calling a listener may remove it. + // copy listener vector since calling a listener may remove it. aListeners = m_aListeners; // set back interaction state m_bInteractionRequested = m_bInteractionDone = m_bInteractionGranted = false; } SolarMutexReleaser aReleaser; - for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) - it->m_xListener->shutdownCanceled(); + for (auto const & it: aListeners) + it.m_xListener->shutdownCanceled(); } void VCLSession::callQuit() { SAL_INFO("vcl.se", "VCLSession::callQuit"); - std::list< Listener > aListeners; + std::vector< Listener > aListeners; { osl::MutexGuard aGuard( m_aMutex ); - // copy listener list since calling a listener may remove it. + // copy listener vector since calling a listener may remove it. aListeners = m_aListeners; // set back interaction state m_bInteractionRequested = m_bInteractionDone = m_bInteractionGranted = false; } SolarMutexReleaser aReleaser; - for( std::list< Listener >::const_iterator it = aListeners.begin(); it != aListeners.end(); ++it ) + for (auto const & it: aListeners) { - css::uno::Reference< XSessionManagerListener2 > xListener2( it->m_xListener, UNO_QUERY ); + css::uno::Reference< XSessionManagerListener2 > xListener2( it.m_xListener, UNO_QUERY ); if( xListener2.is() ) xListener2->doQuit(); } @@ -268,18 +266,11 @@ void SAL_CALL VCLSession::removeSessionManagerListener( const css::uno::Referenc osl::MutexGuard aGuard( m_aMutex ); - std::list< Listener >::iterator it = m_aListeners.begin(); + std::vector< Listener >::iterator it = m_aListeners.begin(); SAL_INFO("vcl.se.debug", " m_aListeners.size() = " << m_aListeners.size() ); - while( it != m_aListeners.end() ) - { - if( it->m_xListener == xListener ) - { - it = m_aListeners.erase(it); - } - else - ++it; - } + + m_aListeners.erase(std::remove_if(m_aListeners.begin(), m_aListeners.end(), [&](Listener& listener) {return xListener == listener.m_xListener;}), m_aListeners.end()); } void SAL_CALL VCLSession::queryInteraction( const css::uno::Reference& xListener ) @@ -303,13 +294,13 @@ void SAL_CALL VCLSession::queryInteraction( const css::uno::ReferencequeryInteraction(); m_bInteractionRequested = true; } - for( std::list< Listener >::iterator it = m_aListeners.begin(); it != m_aListeners.end(); ++it ) + for (auto & it: m_aListeners) { - if( it->m_xListener == xListener ) + if( it.m_xListener == xListener ) { SAL_INFO("vcl.se.debug", " it->m_xListener == xListener"); - it->m_bInteractionRequested = true; - it->m_bInteractionDone = false; + it.m_bInteractionRequested = true; + it.m_bInteractionDone = false; } } } @@ -320,15 +311,15 @@ void SAL_CALL VCLSession::interactionDone( const css::uno::Reference< XSessionMa osl::MutexGuard aGuard( m_aMutex ); int nRequested = 0, nDone = 0; - for( std::list< Listener >::iterator it = m_aListeners.begin(); it != m_aListeners.end(); ++it ) + for (auto & it: m_aListeners) { - if( it->m_bInteractionRequested ) + if( it.m_bInteractionRequested ) { nRequested++; - if( xListener == it->m_xListener ) - it->m_bInteractionDone = true; + if( xListener == it.m_xListener ) + it.m_bInteractionDone = true; } - if( it->m_bInteractionDone ) + if( it.m_bInteractionDone ) nDone++; } @@ -349,12 +340,11 @@ void SAL_CALL VCLSession::saveDone( const css::uno::Reference< XSessionManagerLi osl::MutexGuard aGuard( m_aMutex ); bool bSaveDone = true; - for( std::list< Listener >::iterator it = m_aListeners.begin(); - it != m_aListeners.end(); ++it ) + for (auto & it: m_aListeners) { - if( it->m_xListener == xListener ) - it->m_bSaveDone = true; - if( ! it->m_bSaveDone ) + if( it.m_xListener == xListener ) + it.m_bSaveDone = true; + if( ! it.m_bSaveDone ) bSaveDone = false; } @@ -378,13 +368,13 @@ sal_Bool SAL_CALL VCLSession::cancelShutdown() void VCLSession::disposing() { SAL_INFO("vcl.se", "VCLSession::disposing"); - std::list list; + std::vector vector; { osl::MutexGuard g(m_aMutex); - list.swap(m_aListeners); + vector.swap(m_aListeners); } css::lang::EventObject src(static_cast(this)); - for (auto const & i: list) { + for (auto const & i: vector) { try { i.m_xListener->disposing(src); SAL_INFO("vcl.se.debug", " call Listener disposing"); -- cgit