Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkMessage.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkMessage_h
14 #define mitkMessage_h
15 
16 #include <functional>
17 #include <mutex>
18 #include <vector>
19 
24 #define mitkNewMessageMacro(msgHandleObject) \
25 private: \
26  ::mitk::Message<> m_##msgHandleObject##Message; \
27  \
28 public: \
29  inline void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<> &delegate) \
30  { \
31  m_##msgHandleObject##Message += delegate; \
32  } \
33  inline void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<> &delegate) \
34  { \
35  m_##msgHandleObject##Message -= delegate; \
36  }
37 
38 #define mitkNewMessageWithReturnMacro(msgHandleObject, returnType) \
39 private: \
40  ::mitk::Message<returnType> m_##msgHandleObject##Message; \
41  \
42 public: \
43  inline void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<returnType> &delegate) \
44  { \
45  m_##msgHandleObject##Message += delegate; \
46  } \
47  inline void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate<returnType> &delegate) \
48  { \
49  m_##msgHandleObject##Message -= delegate; \
50  }
51 
52 #define mitkNewMessage1Macro(msgHandleObject, type1) \
53 private: \
54  ::mitk::Message1<type1> m_##msgHandleObject##Message; \
55  \
56 public: \
57  void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate1<type1> &delegate) const \
58  { \
59  m_##msgHandleObject##Message += delegate; \
60  } \
61  void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate1<type1> &delegate) const \
62  { \
63  m_##msgHandleObject##Message -= delegate; \
64  }
65 
66 #define mitkNewMessage2Macro(msgHandleObject, type1, type2) \
67 private: \
68  ::mitk::Message2<type1, type2> m_##msgHandleObject##Message; \
69  \
70 public: \
71  void Add##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate2<type1, type2> &delegate) \
72  { \
73  m_##msgHandleObject##Message += delegate; \
74  } \
75  void Remove##msgHandleObject##Listener(const ::mitk::MessageAbstractDelegate2<type1, type2> &delegate) \
76  { \
77  m_##msgHandleObject##Message -= delegate; \
78  }
79 
80 namespace mitk
81 {
85  template <typename A = void>
87  {
88  public:
90  virtual A Execute() const = 0;
91  virtual bool operator==(const MessageAbstractDelegate *cmd) const = 0;
92  virtual MessageAbstractDelegate *Clone() const = 0;
93  };
94 
99  template <typename T, typename A = void>
101  {
102  public:
104  virtual A Execute(T t) const = 0;
105  virtual bool operator==(const MessageAbstractDelegate1 *cmd) const = 0;
106  virtual MessageAbstractDelegate1 *Clone() const = 0;
107  };
108 
114  template <typename T, typename U, typename A = void>
116  {
117  public:
119  virtual A Execute(T t, U u) const = 0;
120  virtual bool operator==(const MessageAbstractDelegate2 *cmd) const = 0;
121  virtual MessageAbstractDelegate2 *Clone() const = 0;
122  };
123 
130  template <typename T, typename U, typename V, typename A = void>
132  {
133  public:
135  virtual A Execute(T t, U u, V v) const = 0;
136  virtual bool operator==(const MessageAbstractDelegate3 *cmd) const = 0;
137  virtual MessageAbstractDelegate3 *Clone() const = 0;
138  };
139 
147  template <typename T, typename U, typename V, typename W, typename A = void>
149  {
150  public:
152  virtual A Execute(T t, U u, V v, W w) const = 0;
153  virtual bool operator==(const MessageAbstractDelegate4 *cmd) const = 0;
154  virtual MessageAbstractDelegate4 *Clone() const = 0;
155  };
156 
167  template <class R, typename A = void>
169  {
170  public:
171  // constructor - takes pointer to an object and pointer to a member and stores
172  // them in two private variables
173  MessageDelegate(R *object, A (R::*memberFunctionPointer)())
174  : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
175  {
176  }
177 
178  ~MessageDelegate() override {}
179  // override function "Call"
180  A Execute() const override
181  {
182  return (m_Object->*m_MemberFunctionPointer)(); // execute member function
183  }
184 
185  bool operator==(const MessageAbstractDelegate<A> *c) const override
186  {
187  const MessageDelegate<R, A> *cmd = dynamic_cast<const MessageDelegate<R, A> *>(c);
188  if (!cmd)
189  return false;
190 
191  if ((void *)this->m_Object != (void *)cmd->m_Object)
192  return false;
193  if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
194  return false;
195  return true;
196  }
197 
198  MessageAbstractDelegate<A> *Clone() const override { return new MessageDelegate(m_Object, m_MemberFunctionPointer); }
199  private:
200  R *m_Object; // pointer to object
201  A (R::*m_MemberFunctionPointer)(); // pointer to member function
202  };
203 
217  template <class R, typename T, typename A = void>
219  {
220  public:
221  // constructor - takes pointer to an object and pointer to a member and stores
222  // them in two private variables
223  MessageDelegate1(R *object, A (R::*memberFunctionPointer)(T))
224  : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
225  {
226  }
227 
228  ~MessageDelegate1() override {}
229  // override function "Call"
230  A Execute(T t) const override
231  {
232  return (m_Object->*m_MemberFunctionPointer)(t); // execute member function
233  }
234 
235  bool operator==(const MessageAbstractDelegate1<T, A> *c) const override
236  {
237  const MessageDelegate1<R, T, A> *cmd = dynamic_cast<const MessageDelegate1<R, T, A> *>(c);
238  if (!cmd)
239  return false;
240 
241  if ((void *)this->m_Object != (void *)cmd->m_Object)
242  return false;
243  if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
244  return false;
245  return true;
246  }
247 
248  MessageAbstractDelegate1<T, A> *Clone() const override { return new MessageDelegate1(m_Object, m_MemberFunctionPointer); }
249  private:
250  R *m_Object; // pointer to object
251  A (R::*m_MemberFunctionPointer)(T); // pointer to member function
252  };
253 
260  template <class R, typename T, typename U, typename A = void>
262  {
263  public:
264  // constructor - takes pointer to an object and pointer to a member and stores
265  // them in two private variables
266  MessageDelegate2(R *object, A (R::*memberFunctionPointer)(T, U))
267  : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
268  {
269  }
270 
271  ~MessageDelegate2() override {}
272  // override function "Call"
273  A Execute(T t, U u) const override
274  {
275  return (m_Object->*m_MemberFunctionPointer)(t, u); // execute member function
276  }
277 
278  bool operator==(const MessageAbstractDelegate2<T, U, A> *c) const override
279  {
280  const MessageDelegate2<R, T, U, A> *cmd = dynamic_cast<const MessageDelegate2<R, T, U, A> *>(c);
281  if (!cmd)
282  return false;
283 
284  if ((void *)this->m_Object != (void *)cmd->m_Object)
285  return false;
286  if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
287  return false;
288  return true;
289  }
290 
291  MessageAbstractDelegate2<T, U, A> *Clone() const override { return new MessageDelegate2(m_Object, m_MemberFunctionPointer); }
292  private:
293  R *m_Object; // pointer to object
294  A (R::*m_MemberFunctionPointer)(T, U); // pointer to member function
295  };
296 
304  template <class R, typename T, typename U, typename V, typename A = void>
305  class MessageDelegate3 : public MessageAbstractDelegate3<T, U, V, A>
306  {
307  public:
308  // constructor - takes pointer to an object and pointer to a member and stores
309  // them in two private variables
310  MessageDelegate3(R *object, A (R::*memberFunctionPointer)(T, U, V))
311  : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
312  {
313  }
314 
315  ~MessageDelegate3() override {}
316  // override function "Call"
317  A Execute(T t, U u, V v) const override
318  {
319  return (m_Object->*m_MemberFunctionPointer)(t, u, v); // execute member function
320  }
321 
322  bool operator==(const MessageAbstractDelegate3<T, U, V, A> *c) const override
323  {
324  const MessageDelegate3<R, T, U, V, A> *cmd = dynamic_cast<const MessageDelegate3<R, T, U, V, A> *>(c);
325  if (!cmd)
326  return false;
327 
328  if ((void *)this->m_Object != (void *)cmd->m_Object)
329  return false;
330  if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
331  return false;
332  return true;
333  }
334 
336  {
337  return new MessageDelegate3(m_Object, m_MemberFunctionPointer);
338  }
339 
340  private:
341  R *m_Object; // pointer to object
342  A (R::*m_MemberFunctionPointer)(T, U, V); // pointer to member function
343  };
344 
353  template <class R, typename T, typename U, typename V, typename W, typename A = void>
354  class MessageDelegate4 : public MessageAbstractDelegate4<T, U, V, W, A>
355  {
356  public:
357  // constructor - takes pointer to an object and pointer to a member and stores
358  // them in two private variables
359  MessageDelegate4(R *object, A (R::*memberFunctionPointer)(T, U, V, W))
360  : m_Object(object), m_MemberFunctionPointer(memberFunctionPointer)
361  {
362  }
363 
364  virtual ~MessageDelegate4() {}
365  // override function "Call"
366  virtual A Execute(T t, U u, V v, W w) const
367  {
368  return (m_Object->*m_MemberFunctionPointer)(t, u, v, w); // execute member function
369  }
370 
372  {
373  const MessageDelegate4<R, T, U, V, W, A> *cmd = dynamic_cast<const MessageDelegate4<R, T, U, V, W, A> *>(c);
374  if (!cmd)
375  return false;
376 
377  if ((void *)this->m_Object != (void *)cmd->m_Object)
378  return false;
379  if (this->m_MemberFunctionPointer != cmd->m_MemberFunctionPointer)
380  return false;
381  return true;
382  }
383 
385  {
386  return new MessageDelegate4(m_Object, m_MemberFunctionPointer);
387  }
388 
389  private:
390  R *m_Object; // pointer to object
391  A (R::*m_MemberFunctionPointer)(T, U, V, W); // pointer to member function
392  };
393 
401  template <typename AbstractDelegate>
403  {
404  public:
405  typedef std::vector<AbstractDelegate *> ListenerList;
406 
407  virtual ~MessageBase()
408  {
409  for (auto iter = m_Listeners.begin(); iter != m_Listeners.end(); ++iter)
410  {
411  delete *iter;
412  }
413  }
414 
417  {
418  for (typename ListenerList::iterator iter = o.m_Listeners.begin(); iter != o.m_Listeners.end(); ++iter)
419  {
420  m_Listeners.push_back((*iter)->Clone());
421  }
422  }
423 
425  {
426  MessageBase tmp(o);
427  std::swap(tmp.m_Listeners, this->m_Listeners);
428  return *this;
429  }
430 
432  void AddListener(const AbstractDelegate &delegate) const
433  {
434  AbstractDelegate *msgCmd = delegate.Clone();
435 
436  m_Mutex.lock();
437  for (auto iter = m_Listeners.begin(); iter != m_Listeners.end(); ++iter)
438  {
439  if ((*iter)->operator==(msgCmd))
440  {
441  delete msgCmd;
442  m_Mutex.unlock();
443  return;
444  }
445  }
446  m_Listeners.push_back(msgCmd);
447  m_Mutex.unlock();
448  }
449 
451  void operator+=(const AbstractDelegate &delegate) const { this->AddListener(delegate); }
452 
454  void RemoveListener(const AbstractDelegate &delegate) const
455  {
456  m_Mutex.lock();
457  for (auto iter = m_Listeners.begin(); iter != m_Listeners.end(); ++iter)
458  {
459  if ((*iter)->operator==(&delegate))
460  {
461  delete *iter;
462  m_Listeners.erase(iter);
463  m_Mutex.unlock();
464  return;
465  }
466  }
467  m_Mutex.unlock();
468  }
469 
471  void operator-=(const AbstractDelegate &delegate) const { this->RemoveListener(delegate); }
472 
474  const ListenerList &GetListeners() const { return m_Listeners; }
475 
477  bool HasListeners() const { return !m_Listeners.empty(); }
478 
480  bool IsEmpty() const { return m_Listeners.empty(); }
481  protected:
492  mutable std::mutex m_Mutex;
493  };
494 
519  template <typename A = void>
520  class Message : public MessageBase<MessageAbstractDelegate<A>>
521  {
522  public:
525 
526  void Send() const
527  {
528  ListenerList listeners;
529 
530  {
531  this->m_Mutex.lock();
532  listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
533  this->m_Mutex.unlock();
534  }
535 
536  for (auto iter = listeners.begin(); iter != listeners.end(); ++iter)
537  {
538  // notify each listener
539  (*iter)->Execute();
540  }
541  }
542 
543  void operator()() const { this->Send(); }
544  };
545 
550  template <typename T, typename A = void>
551  class Message1 : public MessageBase<MessageAbstractDelegate1<T, A>>
552  {
553  public:
556 
557  void Send(T t) const
558  {
559  ListenerList listeners;
560 
561  {
562  this->m_Mutex.lock();
563  listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
564  this->m_Mutex.unlock();
565  }
566 
567  for (auto iter = listeners.begin(); iter != listeners.end(); ++iter)
568  {
569  // notify each listener
570  (*iter)->Execute(t);
571  }
572  }
573 
574  void operator() (T t) const { this->Send(t); }
575  };
576 
582  template <typename T, typename U, typename A = void>
583  class Message2 : public MessageBase<MessageAbstractDelegate2<T, U, A>>
584  {
585  public:
588 
589  void Send(T t, U u) const
590  {
591  ListenerList listeners;
592 
593  {
594  this->m_Mutex.lock();
595  listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
596  this->m_Mutex.unlock();
597  }
598 
599  for (auto iter = listeners.begin(); iter != listeners.end(); ++iter)
600  {
601  // notify each listener
602  (*iter)->Execute(t, u);
603  }
604  }
605 
606  void operator()(T t, U u) const { this->Send(t, u); }
607  };
608 
615  template <typename T, typename U, typename V, typename A = void>
616  class Message3 : public MessageBase<MessageAbstractDelegate3<T, U, V, A>>
617  {
618  public:
621 
622  void Send(T t, U u, V v) const
623  {
624  ListenerList listeners;
625 
626  {
627  this->m_Mutex.lock();
628  listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
629  this->m_Mutex.unlock();
630  }
631 
632  for (typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
633  {
634  // notify each listener
635  (*iter)->Execute(t, u, v);
636  }
637  }
638 
639  void operator()(T t, U u, V v) const { this->Send(t, u, v); }
640  };
641 
649  template <typename T, typename U, typename V, typename W, typename A = void>
650  class Message4 : public MessageBase<MessageAbstractDelegate4<T, U, V, W>>
651  {
652  public:
655 
656  void Send(T t, U u, V v, W w) const
657  {
658  ListenerList listeners;
659 
660  {
661  this->m_Mutex.lock();
662  listeners.assign(this->m_Listeners.begin(), this->m_Listeners.end());
663  this->m_Mutex.unlock();
664  }
665 
666  for (typename ListenerList::iterator iter = listeners.begin(); iter != listeners.end(); ++iter)
667  {
668  // notify each listener
669  (*iter)->Execute(t, u, v, w);
670  }
671  }
672 
673  void operator()(T t, U u, V v, W w) const { this->Send(t, u, v, w); }
674  };
675 
676 /* Here is an example how to use the macros and templates:
677 *
678 * // An object to be sent around
679 * class Law
680 * {
681 * private:
682 * std::string m_Description;
683 *
684 * public:
685 *
686 * Law(const std::string law) : m_Description(law)
687 * { }
688 *
689 * std::string GetDescription() const
690 * {
691 * return m_Description;
692 * }
693 * };
694 *
695 * // The NewtonMachine will issue specific events
696 * class NewtonMachine
697 * {
698 * mitkNewMessageMacro(AnalysisStarted);
699 * mitkNewMessage1Macro(AnalysisStopped, bool);
700 * mitkNewMessage1Macro(LawDiscovered, const Law&);
701 *
702 * public:
703 *
704 * void StartAnalysis()
705 * {
706 * // send the "started" signal
707 * m_AnalysisStartedMessage();
708 *
709 * // we found a new law of nature by creating one :-)
710 * Law massLaw("F=ma");
711 * m_LawDiscoveredMessage(massLaw);
712 * }
713 *
714 * void StopAnalysis()
715 * {
716 * // send the "stop" message with false, indicating
717 * // that no error occurred
718 * m_AnalysisStoppedMessage(false);
719 * }
720 * };
721 *
722 * class Observer
723 * {
724 * private:
725 *
726 * NewtonMachine* m_Machine;
727 *
728 * public:
729 *
730 * Observer(NewtonMachine* machine) : m_Machine(machine)
731 * {
732 * // Add "observers", i.e. function pointers to the machine
733 * m_Machine->AddAnalysisStartedListener(
734 * ::mitk::MessageDelegate<Observer>(this, &Observer::MachineStarted));
735 * m_Machine->AddAnalysisStoppedListener(
736 * ::mitk::MessageDelegate1<Observer, bool>(this, &Observer::MachineStopped));
737 * m_Machine->AddLawDiscoveredListener(
738 * ::mitk::MessageDelegate1<Observer, const Law&>(this, &Observer::LawDiscovered));
739 * }
740 *
741 * ~Observer()
742 * {
743 * // Always remove your observers when finished
744 * m_Machine->RemoveAnalysisStartedListener(
745 * ::mitk::MessagDelegate<Observer>(this, &Observer::MachineStarted));
746 * m_Machine->RemoveAnalysisStoppedListener(
747 * ::mitk::MessageDelegate1<Observer, bool>(this, &Observer::MachineStopped));
748 * m_Machine->RemoveLawDiscoveredListener(
749 * ::mitk::MessageDelegate1<Observer, const Law&>(this, &Observer::LawDiscovered));
750 * }
751 *
752 * void MachineStarted()
753 * {
754 * std::cout << "Observed machine has started" << std::endl;
755 * }
756 *
757 * void MachineStopped(bool error)
758 * {
759 * std::cout << "Observed machine stopped " << (error ? "with an error" : "") << std::endl;
760 * }
761 *
762 * void LawDiscovered(const Law& law)
763 * {
764 * std::cout << "New law of nature discovered: " << law.GetDescription() << std::endl;
765 * }
766 * };
767 *
768 * NewtonMachine newtonMachine;
769 * Observer observer(&newtonMachine);
770 *
771 * // This will send two events to registered observers
772 * newtonMachine.StartAnalysis();
773 * // This will send one event to registered observers
774 * newtonMachine.StopAnalysis();
775 *
776 * Another example of how to use these message classes can be
777 * found in the directory Testing, file mitkMessageTest.cpp
778 *
779 */
780 
781 } // namespace
782 
783 #endif
Event/message class with one parameter.
Definition: mitkMessage.h:552
MessageBase< MessageAbstractDelegate1< T, A > > Super
Definition: mitkMessage.h:554
Super::ListenerList ListenerList
Definition: mitkMessage.h:555
void operator()(T t) const
Definition: mitkMessage.h:574
void Send(T t) const
Definition: mitkMessage.h:557
Event/message class with two parameters.
Definition: mitkMessage.h:584
void operator()(T t, U u) const
Definition: mitkMessage.h:606
void Send(T t, U u) const
Definition: mitkMessage.h:589
Super::ListenerList ListenerList
Definition: mitkMessage.h:587
MessageBase< MessageAbstractDelegate2< T, U, A > > Super
Definition: mitkMessage.h:586
Event/message class with three parameters.
Definition: mitkMessage.h:617
Super::ListenerList ListenerList
Definition: mitkMessage.h:620
void operator()(T t, U u, V v) const
Definition: mitkMessage.h:639
void Send(T t, U u, V v) const
Definition: mitkMessage.h:622
MessageBase< MessageAbstractDelegate3< T, U, V, A > > Super
Definition: mitkMessage.h:619
Event/message class with four parameters.
Definition: mitkMessage.h:651
void operator()(T t, U u, V v, W w) const
Definition: mitkMessage.h:673
void Send(T t, U u, V v, W w) const
Definition: mitkMessage.h:656
MessageBase< MessageAbstractDelegate4< T, U, V, W, A > > Super
Definition: mitkMessage.h:653
Super::ListenerList ListenerList
Definition: mitkMessage.h:654
Abstract base class for message delegates with one parameter.
Definition: mitkMessage.h:101
virtual bool operator==(const MessageAbstractDelegate1 *cmd) const =0
virtual MessageAbstractDelegate1 * Clone() const =0
virtual A Execute(T t) const =0
Abstract base class for message delegates with two parameters.
Definition: mitkMessage.h:116
virtual bool operator==(const MessageAbstractDelegate2 *cmd) const =0
virtual MessageAbstractDelegate2 * Clone() const =0
virtual A Execute(T t, U u) const =0
Abstract base class for message delegates with three parameters.
Definition: mitkMessage.h:132
virtual bool operator==(const MessageAbstractDelegate3 *cmd) const =0
virtual MessageAbstractDelegate3 * Clone() const =0
virtual A Execute(T t, U u, V v) const =0
Abstract base class for message delegates with four parameters.
Definition: mitkMessage.h:149
virtual bool operator==(const MessageAbstractDelegate4 *cmd) const =0
virtual MessageAbstractDelegate4 * Clone() const =0
virtual A Execute(T t, U u, V v, W w) const =0
Abstract base class for message delegates with no parameters.
Definition: mitkMessage.h:87
virtual bool operator==(const MessageAbstractDelegate *cmd) const =0
virtual A Execute() const =0
virtual MessageAbstractDelegate * Clone() const =0
Base class for message/event objects that manage a list of delegate listeners.
Definition: mitkMessage.h:403
std::mutex m_Mutex
Definition: mitkMessage.h:492
MessageBase(const MessageBase &o)
Definition: mitkMessage.h:416
bool HasListeners() const
Check whether any listeners are registered.
Definition: mitkMessage.h:477
const ListenerList & GetListeners() const
Get the list of currently registered listeners.
Definition: mitkMessage.h:474
MessageBase & operator=(const MessageBase &o)
Definition: mitkMessage.h:424
std::vector< AbstractDelegate * > ListenerList
Definition: mitkMessage.h:405
bool IsEmpty() const
Check whether the listener list is empty.
Definition: mitkMessage.h:480
void AddListener(const AbstractDelegate &delegate) const
Add a listener delegate. Duplicates are silently ignored.
Definition: mitkMessage.h:432
void RemoveListener(const AbstractDelegate &delegate) const
Remove a listener delegate. If not found, nothing happens.
Definition: mitkMessage.h:454
virtual ~MessageBase()
Definition: mitkMessage.h:407
void operator+=(const AbstractDelegate &delegate) const
Shorthand for AddListener().
Definition: mitkMessage.h:451
ListenerList m_Listeners
List of listeners.
Definition: mitkMessage.h:491
void operator-=(const AbstractDelegate &delegate) const
Shorthand for RemoveListener().
Definition: mitkMessage.h:471
Wraps a member function pointer with signature A(R::*function)(T).
Definition: mitkMessage.h:219
~MessageDelegate1() override
Definition: mitkMessage.h:228
MessageAbstractDelegate1< T, A > * Clone() const override
Definition: mitkMessage.h:248
bool operator==(const MessageAbstractDelegate1< T, A > *c) const override
Definition: mitkMessage.h:235
MessageDelegate1(R *object, A(R::*memberFunctionPointer)(T))
Definition: mitkMessage.h:223
A Execute(T t) const override
Definition: mitkMessage.h:230
Wraps a member function pointer with signature A(R::*function)(T, U).
Definition: mitkMessage.h:262
MessageAbstractDelegate2< T, U, A > * Clone() const override
Definition: mitkMessage.h:291
A Execute(T t, U u) const override
Definition: mitkMessage.h:273
bool operator==(const MessageAbstractDelegate2< T, U, A > *c) const override
Definition: mitkMessage.h:278
~MessageDelegate2() override
Definition: mitkMessage.h:271
MessageDelegate2(R *object, A(R::*memberFunctionPointer)(T, U))
Definition: mitkMessage.h:266
Wraps a member function pointer with signature A(R::*function)(T, U, V).
Definition: mitkMessage.h:306
MessageDelegate3(R *object, A(R::*memberFunctionPointer)(T, U, V))
Definition: mitkMessage.h:310
~MessageDelegate3() override
Definition: mitkMessage.h:315
MessageAbstractDelegate3< T, U, V, A > * Clone() const override
Definition: mitkMessage.h:335
A Execute(T t, U u, V v) const override
Definition: mitkMessage.h:317
bool operator==(const MessageAbstractDelegate3< T, U, V, A > *c) const override
Definition: mitkMessage.h:322
Wraps a member function pointer with signature A(R::*function)(T, U, V, W).
Definition: mitkMessage.h:355
bool operator==(const MessageAbstractDelegate4< T, U, V, W, A > *c) const
Definition: mitkMessage.h:371
MessageDelegate4(R *object, A(R::*memberFunctionPointer)(T, U, V, W))
Definition: mitkMessage.h:359
virtual ~MessageDelegate4()
Definition: mitkMessage.h:364
MessageAbstractDelegate4< T, U, V, W, A > * Clone() const
Definition: mitkMessage.h:384
virtual A Execute(T t, U u, V v, W w) const
Definition: mitkMessage.h:366
Wraps a member function pointer with signature A(R::*function)().
Definition: mitkMessage.h:169
bool operator==(const MessageAbstractDelegate< A > *c) const override
Definition: mitkMessage.h:185
MessageAbstractDelegate< A > * Clone() const override
Definition: mitkMessage.h:198
~MessageDelegate() override
Definition: mitkMessage.h:178
MessageDelegate(R *object, A(R::*memberFunctionPointer)())
Definition: mitkMessage.h:173
A Execute() const override
Definition: mitkMessage.h:180
Event/message/notification class.
Definition: mitkMessage.h:521
Super::ListenerList ListenerList
Definition: mitkMessage.h:524
MessageBase< MessageAbstractDelegate< A > > Super
Definition: mitkMessage.h:523
void Send() const
Definition: mitkMessage.h:526
void operator()() const
Definition: mitkMessage.h:543
Find image slices visible on a given plane.
void swap(CustomMimeType &l, CustomMimeType &r)
Swap two CustomMimeType objects.