Mercurial > hg > orthanc-stone
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 } |