LibreOffice Module cppuhelper (master) 1
Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
cppu::OInterfaceContainerHelper Class Reference

A container of interfaces. More...

#include <interfacecontainer.h>

Collaboration diagram for cppu::OInterfaceContainerHelper:
[legend]

Classes

class  NotifySingleListener
 

Public Member Functions

 OInterfaceContainerHelper (::osl::Mutex &rMutex)
 Create an interface container. More...
 
 ~OInterfaceContainerHelper ()
 Release all interfaces. More...
 
sal_Int32 SAL_CALL getLength () const
 Return the number of Elements in the container. More...
 
css::uno::Sequence< css::uno::Reference< css::uno::XInterface > > SAL_CALL getElements () const
 Return all interfaces added to this container. More...
 
sal_Int32 SAL_CALL addInterface (const css::uno::Reference< css::uno::XInterface > &rxIFace)
 Inserts an element into the container. More...
 
sal_Int32 SAL_CALL removeInterface (const css::uno::Reference< css::uno::XInterface > &rxIFace)
 Removes an element from the container. More...
 
void SAL_CALL disposeAndClear (const css::lang::EventObject &rEvt)
 Call disposing on all object in the container that support XEventListener. More...
 
void SAL_CALL 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...
 

Static Public Member Functions

static void *SAL_CALL operator new (size_t nSize)
 
static void SAL_CALL operator delete (void *pMem)
 
static void *SAL_CALL operator new (size_t, void *pMem)
 
static void SAL_CALL operator delete (void *, void *)
 

Private Member Functions

 OInterfaceContainerHelper (const OInterfaceContainerHelper &) SAL_DELETED_FUNCTION
 
OInterfaceContainerHelperoperator= (const OInterfaceContainerHelper &) SAL_DELETED_FUNCTION
 
void copyAndResetInUse ()
 

Private Attributes

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

Friends

class OInterfaceIteratorHelper
 

Detailed Description

A container of interfaces.

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

See also
OInterfaceIteratorHelper

Definition at line 131 of file interfacecontainer.h.

Constructor & Destructor Documentation

◆ OInterfaceContainerHelper() [1/2]

cppu::OInterfaceContainerHelper::OInterfaceContainerHelper ( ::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().

◆ ~OInterfaceContainerHelper()

cppu::OInterfaceContainerHelper::~OInterfaceContainerHelper ( )

Release all interfaces.

All iterators must be destroyed before the container is destructed.

Definition at line 128 of file interfacecontainer.cxx.

References aData, bInUse, bIsList, cppu::detail::element_alias::pAsInterface, and cppu::detail::element_alias::pAsVector.

◆ OInterfaceContainerHelper() [2/2]

cppu::OInterfaceContainerHelper::OInterfaceContainerHelper ( const OInterfaceContainerHelper )
private

Member Function Documentation

◆ addInterface()

sal_Int32 cppu::OInterfaceContainerHelper::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 176 of file interfacecontainer.cxx.

References aData, bInUse, bIsList, copyAndResetInUse(), cppu::detail::element_alias::pAsInterface, cppu::detail::element_alias::pAsVector, rMutex, and SAL_WARN_IF.

Referenced by cppu::OMultiTypeInterfaceContainerHelper::addInterface(), cppu::OMultiTypeInterfaceContainerHelperVar< key, hashImpl, equalImpl >::addInterface(), and cppu::OMultiTypeInterfaceContainerHelperInt32::addInterface().

◆ clear()

void cppu::OInterfaceContainerHelper::clear ( )

Clears the container without calling disposing().

Definition at line 283 of file interfacecontainer.cxx.

References aData, bInUse, bIsList, copyAndResetInUse(), cppu::detail::element_alias::pAsInterface, cppu::detail::element_alias::pAsVector, and rMutex.

◆ copyAndResetInUse()

void cppu::OInterfaceContainerHelper::copyAndResetInUse ( )
private

◆ disposeAndClear()

void cppu::OInterfaceContainerHelper::disposeAndClear ( const css::lang::EventObject &  rEvt)

◆ forEach()

template<typename ListenerT , typename FuncT >
void cppu::OInterfaceContainerHelper::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 284 of file interfacecontainer.h.

References cppu::OInterfaceIteratorHelper::hasMoreElements(), cppu::OInterfaceIteratorHelper::next(), and cppu::OInterfaceIteratorHelper::remove().

◆ getElements()

Sequence< Reference< XInterface > > cppu::OInterfaceContainerHelper::getElements ( ) const

Return all interfaces added to this container.

Definition at line 147 of file interfacecontainer.cxx.

References aData, bIsList, comphelper::containerToSequence(), cppu::detail::element_alias::pAsInterface, cppu::detail::element_alias::pAsVector, rMutex, and x.

◆ getLength()

sal_Int32 cppu::OInterfaceContainerHelper::getLength ( ) const

◆ notifyEach()

template<typename ListenerT , typename EventT >
void cppu::OInterfaceContainerHelper::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
Base class to implement a UNO object supporting weak references, i.e.
Definition: weak.hxx:48

Definition at line 302 of file interfacecontainer.h.

◆ operator delete() [1/2]

static void SAL_CALL cppu::OInterfaceContainerHelper::operator delete ( void *  ,
void *   
)
inlinestatic

Definition at line 141 of file interfacecontainer.h.

◆ operator delete() [2/2]

static void SAL_CALL cppu::OInterfaceContainerHelper::operator delete ( void *  pMem)
inlinestatic

Definition at line 137 of file interfacecontainer.h.

◆ operator new() [1/2]

static void *SAL_CALL cppu::OInterfaceContainerHelper::operator new ( size_t  nSize)
inlinestatic

Definition at line 135 of file interfacecontainer.h.

◆ operator new() [2/2]

static void *SAL_CALL cppu::OInterfaceContainerHelper::operator new ( size_t  ,
void *  pMem 
)
inlinestatic

Definition at line 139 of file interfacecontainer.h.

◆ operator=()

OInterfaceContainerHelper & cppu::OInterfaceContainerHelper::operator= ( const OInterfaceContainerHelper )
private

◆ removeInterface()

sal_Int32 cppu::OInterfaceContainerHelper::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 204 of file interfacecontainer.cxx.

References aData, bInUse, bIsList, copyAndResetInUse(), get(), p, cppu::detail::element_alias::pAsInterface, cppu::detail::element_alias::pAsVector, rMutex, and SAL_WARN_IF.

Referenced by cppu::OInterfaceIteratorHelper::remove().

Friends And Related Function Documentation

◆ OInterfaceIteratorHelper

friend class OInterfaceIteratorHelper
friend

Definition at line 242 of file interfacecontainer.h.

Member Data Documentation

◆ aData

detail::element_alias cppu::OInterfaceContainerHelper::aData
private

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

Definition at line 247 of file interfacecontainer.h.

Referenced by addInterface(), clear(), copyAndResetInUse(), disposeAndClear(), getElements(), getLength(), cppu::OInterfaceIteratorHelper::OInterfaceIteratorHelper(), removeInterface(), ~OInterfaceContainerHelper(), and cppu::OInterfaceIteratorHelper::~OInterfaceIteratorHelper().

◆ bInUse

sal_Bool cppu::OInterfaceContainerHelper::bInUse
private

◆ bIsList

sal_Bool cppu::OInterfaceContainerHelper::bIsList
private

◆ rMutex

::osl::Mutex& cppu::OInterfaceContainerHelper::rMutex
private

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