13 #ifndef mitkMessageHIncluded 14 #define mitkMessageHIncluded 17 #include <itkSimpleFastMutexLock.h> 24 #define mitkNewMessageMacro(msgHandleObject) \ 26 ::mitk::Message<> m_##msgHandleObject##Message; \ 29 inline void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<> &delegate) \ 31 m_##msgHandleObject##Message += delegate; \ 33 inline void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<> &delegate) \ 35 m_##msgHandleObject##Message -= delegate; \ 38 #define mitkNewMessageWithReturnMacro(msgHandleObject, returnType) \ 40 ::mitk::Message<returnType> m_##msgHandleObject##Message; \ 43 inline void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<returnType> &delegate) \ 45 m_##msgHandleObject##Message += delegate; \ 47 inline void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<returnType> &delegate) \ 49 m_##msgHandleObject##Message -= delegate; \ 52 #define mitkNewMessage1Macro(msgHandleObject, type1) \ 54 ::mitk::Message1<type1> m_##msgHandleObject##Message; \ 57 void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate1<type1> &delegate) \ 59 m_##msgHandleObject##Message += delegate; \ 61 void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate1<type1> &delegate) \ 63 m_##msgHandleObject##Message -= delegate; \ 66 #define mitkNewMessage2Macro(msgHandleObject, type1, type2) \ 68 ::mitk::Message2<type1, type2> m_##msgHandleObject##Message; \ 71 void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate2<type1, type2> &delegate) \ 73 m_##msgHandleObject##Message += delegate; \ 75 void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate2<type1, type2> &delegate) \ 77 m_##msgHandleObject##Message -= delegate; \ 82 template <
typename A =
void>
92 template <
typename T,
typename A =
void>
97 virtual A
Execute(T t)
const = 0;
102 template <
typename T,
typename U,
typename A =
void>
107 virtual A
Execute(T t, U u)
const = 0;
112 template <
typename T,
typename U,
typename V,
typename A =
void>
117 virtual A
Execute(T t, U u, V v)
const = 0;
122 template <
typename T,
typename U,
typename V,
typename W,
typename A =
void>
127 virtual A
Execute(T t, U u, V v, W w)
const = 0;
140 template <
class R,
typename A =
void>
147 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
155 return (m_Object->*m_MemberFunctionPointer)();
164 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
166 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
174 A (R::*m_MemberFunctionPointer)();
188 template <
class R,
typename T,
typename A =
void>
195 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
203 return (m_Object->*m_MemberFunctionPointer)(t);
212 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
214 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
222 A (R::*m_MemberFunctionPointer)(T);
225 template <
class R,
typename T,
typename U,
typename A =
void>
232 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
240 return (m_Object->*m_MemberFunctionPointer)(t, u);
249 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
251 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
259 A (R::*m_MemberFunctionPointer)(T, U);
262 template <
class R,
typename T,
typename U,
typename V,
typename A =
void>
269 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
277 return (m_Object->*m_MemberFunctionPointer)(t, u, v);
286 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
288 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
300 A (R::*m_MemberFunctionPointer)(T, U, V);
303 template <
class R,
typename T,
typename U,
typename V,
typename W,
typename A =
void>
310 : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
318 return (m_Object->*m_MemberFunctionPointer)(t, u, v, w);
323 const MessageDelegate4<R, T, U, V, W, A> *cmd =
dynamic_cast<const MessageDelegate4<R, T, U, V, W, A> *
>(c);
327 if ((
void *)this->m_Object != (
void *)cmd->m_Object)
329 if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
341 A (R::*m_MemberFunctionPointer)(T, U, V, W);
344 template <
typename AbstractDelegate>
352 for (
auto iter = m_Listeners.begin(); iter != m_Listeners.end(); ++iter)
363 m_Listeners.push_back((*iter)->Clone());
376 AbstractDelegate *msgCmd = delegate.Clone();
379 for (
auto iter = m_Listeners.begin(); iter != m_Listeners.end(); ++iter)
381 if ((*iter)->operator==(msgCmd))
388 m_Listeners.push_back(msgCmd);
392 void operator+=(
const AbstractDelegate &delegate)
const { this->AddListener(delegate); }
396 for (
auto iter = m_Listeners.begin(); iter != m_Listeners.end(); ++iter)
398 if ((*iter)->operator==(&delegate))
401 m_Listeners.erase(iter);
409 void operator-=(
const AbstractDelegate &delegate)
const { this->RemoveListener(delegate); }
412 bool IsEmpty()
const {
return m_Listeners.empty(); }
451 template <
typename A =
void>
460 ListenerList listeners;
463 this->m_Mutex.Lock();
464 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
465 this->m_Mutex.Unlock();
468 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
479 template <
typename T,
typename A =
void>
488 ListenerList listeners;
491 this->m_Mutex.Lock();
492 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
493 this->m_Mutex.Unlock();
496 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
507 template <
typename T,
typename U,
typename A =
void>
516 ListenerList listeners;
519 this->m_Mutex.Lock();
520 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
521 this->m_Mutex.Unlock();
524 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
527 (*iter)->Execute(t, u);
535 template <
typename T,
typename U,
typename V,
typename A =
void>
544 ListenerList listeners;
547 this->m_Mutex.Lock();
548 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
549 this->m_Mutex.Unlock();
552 for (
typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
555 (*iter)->Execute(t, u, v);
563 template <
typename T,
typename U,
typename V,
typename W,
typename A =
void>
572 ListenerList listeners;
575 this->m_Mutex.Lock();
576 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
577 this->m_Mutex.Unlock();
580 for (
typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
583 (*iter)->Execute(t, u, v, w);
587 void operator()(T t, U u, V v, W w) { this->Send(t, u, v, w); }
Super::ListenerList ListenerList
MessageAbstractDelegate1< T, A > * Clone() const override
MessageDelegate(R *object, A(R::*memberFunctionPointer)())
bool operator==(const MessageAbstractDelegate4< T, U, V, W, A > *c) const
~MessageDelegate1() override
virtual ~MessageAbstractDelegate1()
void operator()(T t, U u, V v, W w)
MessageDelegate4(R *object, A(R::*memberFunctionPointer)(T, U, V, W))
Super::ListenerList ListenerList
MessageDelegate2(R *object, A(R::*memberFunctionPointer)(T, U))
MessageAbstractDelegate3< T, U, V, A > * Clone() const override
MessageBase< MessageAbstractDelegate< A > > Super
DataCollection - Class to facilitate loading/accessing structured data.
A Execute(T t) const override
MessageBase< MessageAbstractDelegate1< T, A > > Super
Super::ListenerList ListenerList
itk::SimpleFastMutexLock m_Mutex
void Send(T t, U u, V v, W w)
~MessageDelegate() override
A Execute(T t, U u) const override
virtual ~MessageAbstractDelegate2()
virtual A Execute() const =0
MessageBase< MessageAbstractDelegate2< T, U, A > > Super
virtual ~MessageAbstractDelegate3()
void operator()(T t, U u)
MessageBase & operator=(const MessageBase &o)
MessageDelegate1(R *object, A(R::*memberFunctionPointer)(T))
bool operator==(const MessageAbstractDelegate2< T, U, A > *c) const override
virtual ~MessageDelegate4()
virtual ~MessageAbstractDelegate()
bool HasListeners() const
void AddListener(const AbstractDelegate &delegate) const
virtual A Execute(T t, U u, V v, W w) const
const ListenerList & GetListeners() const
Event/message/notification class.
bool operator==(const MessageAbstractDelegate< A > *c) const override
A Execute() const override
void swap(CustomMimeType &l, CustomMimeType &r)
MessageDelegate3(R *object, A(R::*memberFunctionPointer)(T, U, V))
void operator()(T t, U u, V v)
~MessageDelegate3() override
Super::ListenerList ListenerList
MessageAbstractDelegate< A > * Clone() const override
std::vector< AbstractDelegate * > ListenerList
virtual ~MessageAbstractDelegate4()
MessageBase< MessageAbstractDelegate3< T, U, V, A > > Super
MessageAbstractDelegate2< T, U, A > * Clone() const override
void RemoveListener(const AbstractDelegate &delegate) const
void operator+=(const AbstractDelegate &delegate) const
MessageBase< MessageAbstractDelegate4< T, U, V, W, A > > Super
void operator-=(const AbstractDelegate &delegate) const
bool operator==(const MessageAbstractDelegate3< T, U, V, A > *c) const override
Super::ListenerList ListenerList
virtual MessageAbstractDelegate * Clone() const =0
ListenerList m_Listeners
List of listeners.
~MessageDelegate2() override
MessageAbstractDelegate4< T, U, V, W, A > * Clone() const
virtual bool operator==(const MessageAbstractDelegate *cmd) const =0
MessageBase(const MessageBase &o)
A Execute(T t, U u, V v) const override
bool operator==(const MessageAbstractDelegate1< T, A > *c) const override