diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2016-01-19 19:45:45 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2016-01-25 08:52:03 +0200 |
commit | 752cd07d085ac0aadc99bd512d49072843139032 (patch) | |
tree | 21ff2f55761b34bfdd721b5e1ed43333e8874e46 /toolkit | |
parent | 0e7cd653ea90da388820220bf6a3eb140b57bbd6 (diff) |
InterfaceContainer2 with vector instead of Sequence
create an InterfaceContainer2 class to replace InterfaceContainer.
It uses a std::vector instead of a Sequence for the mutable listener
list, which provides far better performance.
Switch all our internal use-sites to the new class.
Change-Id: I6b56cfa511ded2395faa22e68fab3b2f16c3cb88
Diffstat (limited to 'toolkit')
-rw-r--r-- | toolkit/source/awt/stylesettings.cxx | 2 | ||||
-rw-r--r-- | toolkit/source/awt/vclxtoolkit.cxx | 24 | ||||
-rw-r--r-- | toolkit/source/awt/vclxtopwindow.cxx | 2 | ||||
-rw-r--r-- | toolkit/source/awt/vclxwindow.cxx | 20 | ||||
-rw-r--r-- | toolkit/source/controls/controlmodelcontainerbase.cxx | 10 | ||||
-rw-r--r-- | toolkit/source/controls/grid/defaultgridcolumnmodel.cxx | 3 | ||||
-rw-r--r-- | toolkit/source/controls/tree/treecontrol.cxx | 4 | ||||
-rw-r--r-- | toolkit/source/helper/listenermultiplexer.cxx | 4 |
8 files changed, 34 insertions, 35 deletions
diff --git a/toolkit/source/awt/stylesettings.cxx b/toolkit/source/awt/stylesettings.cxx index 1fcd4452ad2b..78bac8dd25bd 100644 --- a/toolkit/source/awt/stylesettings.cxx +++ b/toolkit/source/awt/stylesettings.cxx @@ -57,7 +57,7 @@ namespace toolkit struct WindowStyleSettings_Data { VCLXWindow* pOwningWindow; - ::cppu::OInterfaceContainerHelper aStyleChangeListeners; + ::comphelper::OInterfaceContainerHelper2 aStyleChangeListeners; WindowStyleSettings_Data( ::osl::Mutex& i_rListenerMutex, VCLXWindow& i_rOwningWindow ) : pOwningWindow( &i_rOwningWindow ) diff --git a/toolkit/source/awt/vclxtoolkit.cxx b/toolkit/source/awt/vclxtoolkit.cxx index 13e79821e925..6929c5849045 100644 --- a/toolkit/source/awt/vclxtoolkit.cxx +++ b/toolkit/source/awt/vclxtoolkit.cxx @@ -157,9 +157,9 @@ class VCLXToolkit : public VCLXToolkitMutexHelper, oslModule hSvToolsLib; FN_SvtCreateWindow fnSvtCreateWindow; - ::cppu::OInterfaceContainerHelper m_aTopWindowListeners; - ::cppu::OInterfaceContainerHelper m_aKeyHandlers; - ::cppu::OInterfaceContainerHelper m_aFocusListeners; + ::comphelper::OInterfaceContainerHelper2 m_aTopWindowListeners; + ::comphelper::OInterfaceContainerHelper2 m_aKeyHandlers; + ::comphelper::OInterfaceContainerHelper2 m_aFocusListeners; ::Link<VclSimpleEvent&,void> m_aEventListenerLink; ::Link<VclWindowEvent&,bool> m_aKeyListenerLink; bool m_bEventListener; @@ -1774,13 +1774,13 @@ void VCLXToolkit::callTopWindowListeners( = static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow(); if (pWindow->IsTopWindow()) { - css::uno::Sequence< css::uno::Reference< css::uno::XInterface > > + std::vector< css::uno::Reference< css::uno::XInterface > > aListeners(m_aTopWindowListeners.getElements()); - if (aListeners.hasElements()) + if (!aListeners.empty()) { css::lang::EventObject aAwtEvent( static_cast< css::awt::XWindow * >(pWindow->GetWindowPeer())); - for (::sal_Int32 i = 0; i < aListeners.getLength(); ++i) + for (::sal_Int32 i = 0; i < (sal_Int32)aListeners.size(); ++i) { css::uno::Reference< css::awt::XTopWindowListener > xListener(aListeners[i], css::uno::UNO_QUERY); @@ -1803,10 +1803,10 @@ void VCLXToolkit::callTopWindowListeners( bool VCLXToolkit::callKeyHandlers(::VclSimpleEvent const * pEvent, bool bPressed) { - css::uno::Sequence< css::uno::Reference< css::uno::XInterface > > + std::vector< css::uno::Reference< css::uno::XInterface > > aHandlers(m_aKeyHandlers.getElements()); - if (aHandlers.hasElements()) + if (!aHandlers.empty()) { vcl::Window * pWindow = static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow(); @@ -1826,7 +1826,7 @@ bool VCLXToolkit::callKeyHandlers(::VclSimpleEvent const * pEvent, pKeyEvent->GetKeyCode().GetCode(), pKeyEvent->GetCharCode(), sal::static_int_cast< sal_Int16 >( pKeyEvent->GetKeyCode().GetFunction())); - for (::sal_Int32 i = 0; i < aHandlers.getLength(); ++i) + for (::sal_Int32 i = 0; i < (sal_Int32)aHandlers.size(); ++i) { css::uno::Reference< css::awt::XKeyHandler > xHandler( aHandlers[i], css::uno::UNO_QUERY); @@ -1855,9 +1855,9 @@ void VCLXToolkit::callFocusListeners(::VclSimpleEvent const * pEvent, = static_cast< ::VclWindowEvent const * >(pEvent)->GetWindow(); if (pWindow->IsTopWindow()) { - css::uno::Sequence< css::uno::Reference< css::uno::XInterface > > + std::vector< css::uno::Reference< css::uno::XInterface > > aListeners(m_aFocusListeners.getElements()); - if (aListeners.hasElements()) + if (!aListeners.empty()) { // Ignore the interior of compound controls when determining the // window that gets the focus next (see implementation in @@ -1876,7 +1876,7 @@ void VCLXToolkit::callFocusListeners(::VclSimpleEvent const * pEvent, static_cast< css::awt::XWindow * >(pWindow->GetWindowPeer()), static_cast<sal_Int16>(pWindow->GetGetFocusFlags()), xNext, false); - for (::sal_Int32 i = 0; i < aListeners.getLength(); ++i) + for (::sal_Int32 i = 0; i < (sal_Int32)aListeners.size(); ++i) { css::uno::Reference< css::awt::XFocusListener > xListener( aListeners[i], css::uno::UNO_QUERY); diff --git a/toolkit/source/awt/vclxtopwindow.cxx b/toolkit/source/awt/vclxtopwindow.cxx index 967cb5f97e1b..a9853e17468b 100644 --- a/toolkit/source/awt/vclxtopwindow.cxx +++ b/toolkit/source/awt/vclxtopwindow.cxx @@ -260,7 +260,7 @@ vcl::Window* VCLXTopWindow::GetWindowImpl() return VCLXContainer::GetWindow(); } -::cppu::OInterfaceContainerHelper& VCLXTopWindow::GetTopWindowListenersImpl() +::comphelper::OInterfaceContainerHelper2& VCLXTopWindow::GetTopWindowListenersImpl() { return GetTopWindowListeners(); } diff --git a/toolkit/source/awt/vclxwindow.cxx b/toolkit/source/awt/vclxwindow.cxx index a1f4bb3ac7ad..444ac1a1c59c 100644 --- a/toolkit/source/awt/vclxwindow.cxx +++ b/toolkit/source/awt/vclxwindow.cxx @@ -97,8 +97,8 @@ private: bool mbDirectVisible; ::osl::Mutex maListenerContainerMutex; - ::cppu::OInterfaceContainerHelper maWindow2Listeners; - ::cppu::OInterfaceContainerHelper maDockableWindowListeners; + ::comphelper::OInterfaceContainerHelper2 maWindow2Listeners; + ::comphelper::OInterfaceContainerHelper2 maDockableWindowListeners; EventListenerMultiplexer maEventListeners; FocusListenerMultiplexer maFocusListeners; WindowListenerMultiplexer maWindowListeners; @@ -173,8 +173,8 @@ public: /** returns the container of registered XWindowListener2 listeners */ - inline ::cppu::OInterfaceContainerHelper& getWindow2Listeners() { return maWindow2Listeners; } - inline ::cppu::OInterfaceContainerHelper& getDockableWindowListeners(){ return maDockableWindowListeners; } + inline ::comphelper::OInterfaceContainerHelper2& getWindow2Listeners() { return maWindow2Listeners; } + inline ::comphelper::OInterfaceContainerHelper2& getDockableWindowListeners(){ return maDockableWindowListeners; } inline EventListenerMultiplexer& getEventListeners() { return maEventListeners; } inline FocusListenerMultiplexer& getFocusListeners() { return maFocusListeners; } inline WindowListenerMultiplexer& getWindowListeners() { return maWindowListeners; } @@ -416,7 +416,7 @@ namespace { struct CallWindow2Listener { - CallWindow2Listener( ::cppu::OInterfaceContainerHelper& i_rWindow2Listeners, const bool i_bEnabled, const EventObject& i_rEvent ) + CallWindow2Listener( ::comphelper::OInterfaceContainerHelper2& i_rWindow2Listeners, const bool i_bEnabled, const EventObject& i_rEvent ) :m_rWindow2Listeners( i_rWindow2Listeners ) ,m_bEnabled( i_bEnabled ) ,m_aEvent( i_rEvent ) @@ -428,7 +428,7 @@ namespace m_rWindow2Listeners.notifyEach( m_bEnabled ? &XWindowListener2::windowEnabled : &XWindowListener2::windowDisabled, m_aEvent ); } - ::cppu::OInterfaceContainerHelper& m_rWindow2Listeners; + ::comphelper::OInterfaceContainerHelper2& m_rWindow2Listeners; const bool m_bEnabled; const EventObject m_aEvent; }; @@ -774,7 +774,7 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) aEvent.bInteractive = pData->mbInteractive; Reference< XDockableWindowListener > xFirstListener; - ::cppu::OInterfaceIteratorHelper aIter( mpImpl->getDockableWindowListeners() ); + ::comphelper::OInterfaceIteratorHelper2 aIter( mpImpl->getDockableWindowListeners() ); while ( aIter.hasMoreElements() && !xFirstListener.is() ) { xFirstListener.set( aIter.next(), UNO_QUERY ); @@ -816,7 +816,7 @@ void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) aEvent.Source = static_cast<cppu::OWeakObject*>(this); Reference< XDockableWindowListener > xFirstListener; - ::cppu::OInterfaceIteratorHelper aIter( mpImpl->getDockableWindowListeners() ); + ::comphelper::OInterfaceIteratorHelper2 aIter( mpImpl->getDockableWindowListeners() ); while ( aIter.hasMoreElements() && !xFirstListener.is() ) { xFirstListener.set( aIter.next(), UNO_QUERY ); @@ -1340,12 +1340,12 @@ void VCLXWindow::GetPropertyIds( std::list< sal_uInt16 >& _out_rIds ) return ImplGetPropertyIds( _out_rIds, mpImpl->mbWithDefaultProps ); } -::cppu::OInterfaceContainerHelper& VCLXWindow::GetContainerListeners() +::comphelper::OInterfaceContainerHelper2& VCLXWindow::GetContainerListeners() { return mpImpl->getContainerListeners(); } -::cppu::OInterfaceContainerHelper& VCLXWindow::GetTopWindowListeners() +::comphelper::OInterfaceContainerHelper2& VCLXWindow::GetTopWindowListeners() { return mpImpl->getTopWindowListeners(); } diff --git a/toolkit/source/controls/controlmodelcontainerbase.cxx b/toolkit/source/controls/controlmodelcontainerbase.cxx index cf0c1ac6f36e..f137aeae762c 100644 --- a/toolkit/source/controls/controlmodelcontainerbase.cxx +++ b/toolkit/source/controls/controlmodelcontainerbase.cxx @@ -916,13 +916,11 @@ void ControlModelContainerBase::implNotifyTabModelChange( const OUString& _rAcce aEvent.Changes[ 0 ].Accessor <<= _rAccessor; - Sequence< Reference< XInterface > > aChangeListeners( maChangeListeners.getElements() ); - const Reference< XInterface >* pListener = aChangeListeners.getConstArray(); - const Reference< XInterface >* pListenerEnd = aChangeListeners.getConstArray() + aChangeListeners.getLength(); - for ( ; pListener != pListenerEnd; ++pListener ) + std::vector< Reference< XInterface > > aChangeListeners( maChangeListeners.getElements() ); + for ( const auto& rListener : aChangeListeners ) { - if ( pListener->is() ) - static_cast< XChangesListener* >( pListener->get() )->changesOccurred( aEvent ); + if ( rListener.is() ) + static_cast< XChangesListener* >( rListener.get() )->changesOccurred( aEvent ); } } diff --git a/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx index 41d95d5f8824..99d3d3a8384a 100644 --- a/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx +++ b/toolkit/source/controls/grid/defaultgridcolumnmodel.cxx @@ -28,6 +28,7 @@ #include <comphelper/sequence.hxx> #include <comphelper/componentguard.hxx> +#include <comphelper/interfacecontainer2.hxx> #include <cppuhelper/basemutex.hxx> #include <cppuhelper/compbase.hxx> #include <cppuhelper/supportsservice.hxx> @@ -84,7 +85,7 @@ public: private: typedef ::std::vector< css::uno::Reference< css::awt::grid::XGridColumn > > Columns; - ::cppu::OInterfaceContainerHelper m_aContainerListeners; + ::comphelper::OInterfaceContainerHelper2 m_aContainerListeners; Columns m_aColumns; }; diff --git a/toolkit/source/controls/tree/treecontrol.cxx b/toolkit/source/controls/tree/treecontrol.cxx index ffc9109822e8..b8f17bddecce 100644 --- a/toolkit/source/controls/tree/treecontrol.cxx +++ b/toolkit/source/controls/tree/treecontrol.cxx @@ -490,7 +490,7 @@ void UnoTreeControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolk void SAL_CALL TreeEditListenerMultiplexer::nodeEditing( const Reference< XTreeNode >& Node ) throw (RuntimeException, css::util::VetoException, std::exception) { - ::cppu::OInterfaceIteratorHelper aIt( *this ); + ::comphelper::OInterfaceIteratorHelper2 aIt( *this ); while( aIt.hasMoreElements() ) { Reference< XTreeEditListener > xListener(static_cast< XTreeEditListener* >( aIt.next() ) ); @@ -514,7 +514,7 @@ void SAL_CALL TreeEditListenerMultiplexer::nodeEditing( const Reference< XTreeNo void SAL_CALL TreeEditListenerMultiplexer::nodeEdited( const Reference< XTreeNode >& Node, const OUString& NewText ) throw (RuntimeException, std::exception) { - ::cppu::OInterfaceIteratorHelper aIt( *this ); + ::comphelper::OInterfaceIteratorHelper2 aIt( *this ); while( aIt.hasMoreElements() ) { Reference< XTreeEditListener > xListener( static_cast< XTreeEditListener* >( aIt.next() ) ); diff --git a/toolkit/source/helper/listenermultiplexer.cxx b/toolkit/source/helper/listenermultiplexer.cxx index 13c82aa32e6a..cce3444d2dd3 100644 --- a/toolkit/source/helper/listenermultiplexer.cxx +++ b/toolkit/source/helper/listenermultiplexer.cxx @@ -24,7 +24,7 @@ // class ListenerMultiplexerBase ListenerMultiplexerBase::ListenerMultiplexerBase( ::cppu::OWeakObject& rSource ) - : ::cppu::OInterfaceContainerHelper( GetMutex() ), mrContext( rSource ) + : ::comphelper::OInterfaceContainerHelper2( GetMutex() ), mrContext( rSource ) { } @@ -166,7 +166,7 @@ void TabListenerMultiplexer::changed( sal_Int32 evt, const css::uno::Sequence< c { sal_Int32 aMulti( evt ); css::uno::Sequence< css::beans::NamedValue > aMulti2( evt2 ); - ::cppu::OInterfaceIteratorHelper aIt( *this ); + ::comphelper::OInterfaceIteratorHelper2 aIt( *this ); while( aIt.hasMoreElements() ) { css::uno::Reference< css::awt::XTabListener > xListener( |