comparison Framework/Messages/IMessage.h @ 377:8eb4fe74000f

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 05 Nov 2018 16:18:27 +0100
parents 6c22e0506587
children e7a494bdd956
comparison
equal deleted inserted replaced
376:70256a53ff21 377:8eb4fe74000f
27 27
28 namespace OrthancStone { 28 namespace OrthancStone {
29 29
30 30
31 // base message that are exchanged between IObservable and IObserver 31 // base message that are exchanged between IObservable and IObserver
32 struct IMessage : public boost::noncopyable 32 class IMessage : public boost::noncopyable
33 { 33 {
34 private:
34 int messageType_; 35 int messageType_;
36
35 protected: 37 protected:
36 IMessage(const int& messageType) 38 IMessage(const int& messageType) :
37 : messageType_(messageType) 39 messageType_(messageType)
38 {} 40 {
41 }
42
39 public: 43 public:
40 virtual ~IMessage() {} 44 virtual ~IMessage()
45 {
46 }
41 47
42 virtual int GetType() const {return messageType_;} 48 virtual int GetType() const
49 {
50 return messageType_;
51 }
43 }; 52 };
44 53
45 54
46 // base class to derive from to implement your own messages 55 // base class to derive from to implement your own messages
47 // it handles the message type for you 56 // it handles the message type for you
48 template <int type> 57 template <int type>
49 struct BaseMessage : public IMessage 58 class BaseMessage : public IMessage
50 { 59 {
60 public:
51 enum 61 enum
52 { 62 {
53 Type = type 63 Type = type
54 }; 64 };
55 65
56 BaseMessage() 66 BaseMessage() :
57 : IMessage(static_cast<int>(Type)) 67 IMessage(static_cast<int>(Type))
58 {} 68 {
69 }
59 }; 70 };
71
60 72
61 // simple message implementation when no payload is needed 73 // simple message implementation when no payload is needed
62 // sample usage: 74 // sample usage:
63 // typedef NoPayloadMessage<MessageType_LayerSource_GeometryReady> GeometryReadyMessage; 75 // typedef NoPayloadMessage<MessageType_LayerSource_GeometryReady> GeometryReadyMessage;
64 template <int type> 76 template <int type>
65 struct NoPayloadMessage : public BaseMessage<type> 77 class NoPayloadMessage : public BaseMessage<type>
66 { 78 {
67 NoPayloadMessage() 79 public:
68 : BaseMessage<type>() 80 NoPayloadMessage() :
69 {} 81 BaseMessage<type>()
70 82 {
83 }
71 }; 84 };
72 85
73 // simple message implementation when no payload is needed but the origin is required 86 // simple message implementation when no payload is needed but the origin is required
74 // sample usage: 87 // sample usage:
75 // typedef OriginMessage<MessageType_SliceLoader_GeometryError, OrthancSlicesLoader> SliceGeometryErrorMessage; 88 // typedef OriginMessage<MessageType_SliceLoader_GeometryError, OrthancSlicesLoader> SliceGeometryErrorMessage;
76 template <int type, typename TOrigin> 89 template <int type, typename TOrigin>
77 struct OriginMessage : public BaseMessage<type> 90 class OriginMessage : public BaseMessage<type>
78 { 91 {
92 private:
79 TOrigin& origin_; 93 TOrigin& origin_;
80 OriginMessage(TOrigin& origin)
81 : BaseMessage<type>(),
82 origin_(origin)
83 {}
84 94
95 public:
96 OriginMessage(TOrigin& origin) :
97 BaseMessage<type>(),
98 origin_(origin)
99 {
100 }
101
102 TOrigin& GetOrigin() const
103 {
104 return origin_;
105 }
85 }; 106 };
86
87 } 107 }