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(); }
567 template <
typename A =
void>
576 ListenerList listeners;
579 this->m_Mutex.Lock();
580 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
581 this->m_Mutex.Unlock();
584 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
595 template <
typename T,
typename A =
void>
604 ListenerList listeners;
607 this->m_Mutex.Lock();
608 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
609 this->m_Mutex.Unlock();
612 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
623 template <
typename T,
typename U,
typename A =
void>
632 ListenerList listeners;
635 this->m_Mutex.Lock();
636 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
637 this->m_Mutex.Unlock();
640 for (
auto iter = listeners.begin(); iter != listeners.end(); ++iter)
643 (*iter)->Execute(t, u);
651 template <
typename T,
typename U,
typename V,
typename A =
void>
660 ListenerList listeners;
663 this->m_Mutex.Lock();
664 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
665 this->m_Mutex.Unlock();
668 for (
typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
671 (*iter)->Execute(t, u, v);
679 template <
typename T,
typename U,
typename V,
typename W,
typename A =
void>
688 ListenerList listeners;
691 this->m_Mutex.Lock();
692 listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
693 this->m_Mutex.Unlock();
696 for (
typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
699 (*iter)->Execute(t, u, v, w);
703 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
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
static void swap(T &x, T &y)
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