LibreOffice Module comphelper (master) 1
Classes | Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
comphelper::OInterfaceContainerHelper2 Class Reference

A container of interfaces. More...

#include <interfacecontainer2.hxx>

Collaboration diagram for comphelper::OInterfaceContainerHelper2:
[legend]

Classes

class  NotifySingleListener
 

Public Member Functions

 OInterfaceContainerHelper2 (::osl::Mutex &rMutex)
 Create an interface container. More...
 
 ~OInterfaceContainerHelper2 ()
 Release all interfaces. More...
 
sal_Int32 getLength () const
 Return the number of Elements in the container. More...
 
std::vector< css::uno::Reference< css::uno::XInterface > > getElements () const
 Return all interfaces added to this container. More...
 
sal_Int32 addInterface (const css::uno::Reference< css::uno::XInterface > &rxIFace)
 Inserts an element into the container. More...
 
sal_Int32 removeInterface (const css::uno::Reference< css::uno::XInterface > &rxIFace)
 Removes an element from the container. More...
 
css::uno::Reference< css::uno::XInterface > getInterface (sal_Int32 nIndex) const
 Return an interface by index. More...
 
void disposeAndClear (const css::lang::EventObject &rEvt)
 Call disposing on all object in the container that support XEventListener. More...
 
void clear ()
 Clears the container without calling disposing(). More...
 
template<typename ListenerT , typename FuncT >
void forEach (FuncT const &func)
 Executes a functor for each contained listener of specified type, e.g. More...
 
template<typename ListenerT , typename EventT >
void notifyEach (void(SAL_CALL ListenerT::*NotificationMethod)(const EventT &), const EventT &Event)
 Calls a UNO listener method for each contained listener. More...
 

Private Member Functions

 OInterfaceContainerHelper2 (const OInterfaceContainerHelper2 &)=delete
 
OInterfaceContainerHelper2operator= (const OInterfaceContainerHelper2 &)=delete
 
void copyAndResetInUse ()
 

Private Attributes

detail::element_alias2 aData
 bIsList == TRUE -> aData.pAsVector of type vector< XInterfaceSequence >, otherwise aData.pAsInterface == of type (XEventListener *) More...
 
::osl::Mutex & rMutex
 
bool bInUse
 TRUE -> used by an iterator. More...
 
bool bIsList
 TRUE -> aData.pAsVector is of type Sequence< XInterfaceSequence >. More...
 

Friends

class OInterfaceIteratorHelper2
 

Detailed Description

A container of interfaces.

To access the elements use an iterator. This implementation is thread-safe.

This is a copy of the code at include/cppuhelper/interfacecontainer.h, Except that it uses a std::vector instead of a Sequence for the mutable listener list, which provides far better performance.

See also
OInterfaceIteratorHelper2

Definition at line 121 of file interfacecontainer2.hxx.

Constructor & Destructor Documentation

◆ OInterfaceContainerHelper2() [1/2]

comphelper::OInterfaceContainerHelper2::OInterfaceContainerHelper2 ( ::osl::Mutex &  rMutex)

Create an interface container.

Parameters
rMutexthe mutex to protect multi thread access. The lifetime must be longer than the lifetime of this object.

References getLength().

◆ ~OInterfaceContainerHelper2()

comphelper::OInterfaceContainerHelper2::~OInterfaceContainerHelper2 ( )

Release all interfaces.

All iterators must be destroyed before the container is destructed.

Definition at line 124 of file interfacecontainer2.cxx.

References aData, bInUse, bIsList, comphelper::detail::element_alias2::pAsInterface, and comphelper::detail::element_alias2::pAsVector.

◆ OInterfaceContainerHelper2() [2/2]

comphelper::OInterfaceContainerHelper2::OInterfaceContainerHelper2 ( const OInterfaceContainerHelper2 )
privatedelete

Member Function Documentation

◆ addInterface()

sal_Int32 comphelper::OInterfaceContainerHelper2::addInterface ( const css::uno::Reference< css::uno::XInterface > &  rxIFace)

Inserts an element into the container.

The position is not specified, thus it is not specified in which order events are fired.

Attention: \n
If you add the same interface more than once, then it will be added to the elements list more than once and thus if you want to remove that interface from the list, you have to call removeInterface() the same number of times. In the latter case, you will also get events fired more than once (if the interface is a listener interface).
Parameters
rxIFaceinterface to be added; it is allowed to insert null or the same interface more than once
Returns
the new count of elements in the container

Definition at line 172 of file interfacecontainer2.cxx.

References aData, bInUse, bIsList, copyAndResetInUse(), comphelper::detail::element_alias2::pAsInterface, comphelper::detail::element_alias2::pAsVector, and rMutex.

Referenced by comphelper::OMultiTypeInterfaceContainerHelper2::addInterface().

◆ clear()

void comphelper::OInterfaceContainerHelper2::clear ( )

Clears the container without calling disposing().

Definition at line 288 of file interfacecontainer2.cxx.

References aData, bInUse, bIsList, copyAndResetInUse(), comphelper::detail::element_alias2::pAsInterface, comphelper::detail::element_alias2::pAsVector, and rMutex.

◆ copyAndResetInUse()

void comphelper::OInterfaceContainerHelper2::copyAndResetInUse ( )
private

◆ disposeAndClear()

void comphelper::OInterfaceContainerHelper2::disposeAndClear ( const css::lang::EventObject &  rEvt)

Call disposing on all object in the container that support XEventListener.

Then clear the container.

Definition at line 258 of file interfacecontainer2.cxx.

References aData, bInUse, bIsList, comphelper::OInterfaceIteratorHelper2::hasMoreElements(), comphelper::OInterfaceIteratorHelper2::next(), comphelper::detail::element_alias2::pAsInterface, and rMutex.

◆ forEach()

template<typename ListenerT , typename FuncT >
void comphelper::OInterfaceContainerHelper2::forEach ( FuncT const &  func)
inline

Executes a functor for each contained listener of specified type, e.g.

forEach<awt::XPaintListener>(....

If a css::lang::DisposedException occurs which relates to the called listener, then that listener is removed from the container.

Template Parameters
ListenerTlistener type
FuncTunary functor type, let your compiler deduce this for you
Parameters
funcunary functor object expecting an argument of type css::uno::Reference<ListenerT>

Definition at line 264 of file interfacecontainer2.hxx.

References comphelper::OInterfaceIteratorHelper2::hasMoreElements(), comphelper::OInterfaceIteratorHelper2::next(), and comphelper::OInterfaceIteratorHelper2::remove().

◆ getElements()

std::vector< Reference< XInterface > > comphelper::OInterfaceContainerHelper2::getElements ( ) const

Return all interfaces added to this container.

Definition at line 143 of file interfacecontainer2.cxx.

References aData, bIsList, comphelper::detail::element_alias2::pAsInterface, comphelper::detail::element_alias2::pAsVector, and rMutex.

◆ getInterface()

Reference< XInterface > comphelper::OInterfaceContainerHelper2::getInterface ( sal_Int32  nIndex) const

◆ getLength()

sal_Int32 comphelper::OInterfaceContainerHelper2::getLength ( ) const

Return the number of Elements in the container.

Only useful if you have acquired the mutex.

Definition at line 133 of file interfacecontainer2.cxx.

References aData, bIsList, comphelper::detail::element_alias2::pAsInterface, comphelper::detail::element_alias2::pAsVector, and rMutex.

◆ notifyEach()

template<typename ListenerT , typename EventT >
void comphelper::OInterfaceContainerHelper2::notifyEach ( void(SAL_CALL ListenerT::*)(const EventT &)  NotificationMethod,
const EventT &  Event 
)
inline

Calls a UNO listener method for each contained listener.

The listener method must take a single argument of type EventT, and return void.

If a css::lang::DisposedException occurs which relates to the called listener, then that listener is removed from the container.

Template Parameters
ListenerTUNO event listener type, let your compiler deduce this for you
EventTevent type, let your compiler deduce this for you
Parameters
NotificationMethodPointer to a method of a ListenerT interface.
EventEvent to notify to all contained listeners

Example:

awt::PaintEvent aEvent( static_cast< cppu::OWeakObject* >( this ), ... );
listeners.notifyEach( &XPaintListener::windowPaint, aEvent );
AnyEventRef aEvent

Definition at line 282 of file interfacecontainer2.hxx.

◆ operator=()

OInterfaceContainerHelper2 & comphelper::OInterfaceContainerHelper2::operator= ( const OInterfaceContainerHelper2 )
privatedelete

◆ removeInterface()

sal_Int32 comphelper::OInterfaceContainerHelper2::removeInterface ( const css::uno::Reference< css::uno::XInterface > &  rxIFace)

Removes an element from the container.

It uses interface equality to remove the interface.

Parameters
rxIFaceinterface to be removed
Returns
the new count of elements in the container

Definition at line 203 of file interfacecontainer2.cxx.

References aData, bInUse, bIsList, copyAndResetInUse(), find(), get(), p, comphelper::detail::element_alias2::pAsInterface, comphelper::detail::element_alias2::pAsVector, and rMutex.

Referenced by comphelper::OInterfaceIteratorHelper2::remove().

Friends And Related Function Documentation

◆ OInterfaceIteratorHelper2

friend class OInterfaceIteratorHelper2
friend

Definition at line 224 of file interfacecontainer2.hxx.

Member Data Documentation

◆ aData

detail::element_alias2 comphelper::OInterfaceContainerHelper2::aData
private

bIsList == TRUE -> aData.pAsVector of type vector< XInterfaceSequence >, otherwise aData.pAsInterface == of type (XEventListener *)

Definition at line 229 of file interfacecontainer2.hxx.

Referenced by addInterface(), clear(), copyAndResetInUse(), disposeAndClear(), getElements(), getInterface(), getLength(), comphelper::OInterfaceIteratorHelper2::OInterfaceIteratorHelper2(), removeInterface(), ~OInterfaceContainerHelper2(), and comphelper::OInterfaceIteratorHelper2::~OInterfaceIteratorHelper2().

◆ bInUse

bool comphelper::OInterfaceContainerHelper2::bInUse
private

◆ bIsList

bool comphelper::OInterfaceContainerHelper2::bIsList
private

◆ rMutex

::osl::Mutex& comphelper::OInterfaceContainerHelper2::rMutex
private

The documentation for this class was generated from the following files: