46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
#include "XPCBroadcaster.h"
|
|
#include "XPCListener.h"
|
|
|
|
XPCBroadcaster::XPCBroadcaster() : mIterator(NULL) {}
|
|
|
|
XPCBroadcaster::~XPCBroadcaster()
|
|
{
|
|
ListenerVector::iterator iter;
|
|
mIterator = &iter;
|
|
for (iter = mListeners.begin(); iter != mListeners.end(); ++iter) {
|
|
(*iter)->BroadcasterRemoved(this);
|
|
}
|
|
}
|
|
|
|
void XPCBroadcaster::AddListener(XPCListener *inListener)
|
|
{
|
|
mListeners.push_back(inListener);
|
|
inListener->BroadcasterAdded(this);
|
|
}
|
|
|
|
void XPCBroadcaster::RemoveListener(XPCListener *inListener)
|
|
{
|
|
ListenerVector::iterator iter =
|
|
std::find(mListeners.begin(), mListeners.end(), inListener);
|
|
if (iter == mListeners.end())
|
|
return;
|
|
|
|
if (mIterator != NULL) {
|
|
if (*mIterator >= iter)
|
|
(*mIterator)--;
|
|
}
|
|
|
|
mListeners.erase(iter);
|
|
inListener->BroadcasterRemoved(this);
|
|
}
|
|
|
|
void XPCBroadcaster::BroadcastMessage(int inMessage, void *inParam)
|
|
{
|
|
ListenerVector::iterator iter;
|
|
mIterator = &iter;
|
|
for (iter = mListeners.begin(); iter != mListeners.end(); ++iter) {
|
|
(*iter)->ListenToMessage(inMessage, inParam);
|
|
}
|
|
mIterator = NULL;
|
|
}
|