summaryrefslogtreecommitdiff
path: root/toolkit
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2016-01-19 19:45:45 +0200
committerNoel Grandin <noel@peralex.com>2016-01-25 08:52:03 +0200
commit752cd07d085ac0aadc99bd512d49072843139032 (patch)
tree21ff2f55761b34bfdd721b5e1ed43333e8874e46 /toolkit
parent0e7cd653ea90da388820220bf6a3eb140b57bbd6 (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.cxx2
-rw-r--r--toolkit/source/awt/vclxtoolkit.cxx24
-rw-r--r--toolkit/source/awt/vclxtopwindow.cxx2
-rw-r--r--toolkit/source/awt/vclxwindow.cxx20
-rw-r--r--toolkit/source/controls/controlmodelcontainerbase.cxx10
-rw-r--r--toolkit/source/controls/grid/defaultgridcolumnmodel.cxx3
-rw-r--r--toolkit/source/controls/tree/treecontrol.cxx4
-rw-r--r--toolkit/source/helper/listenermultiplexer.cxx4
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(