source: pacpusframework/branches/2.0-beta1/include/Pacpus/kernel/PacpusEvent.h@ 150

Last change on this file since 150 was 150, checked in by morasjul, 11 years ago

Fix boost log for linux (add link with boost_log_setup and pthread)

  • Property svn:executable set to *
File size: 3.6 KB
Line 
1#ifndef PACPUS_EVENT_H
2#define PACPUS_EVENT_H
3
4#include <algorithm>
5#include <Pacpus/kernel/road_time.h>
6#include <Pacpus/kernel/pacpus.h>
7#include <QDataStream>
8#include <QEvent>
9
10namespace pacpus {
11
12// registerEventType // TODO
13
14// FIXME: move to another header file
15enum PacpusEventType {
16 TYPED_EVENT = 1000,
17 GENERIC_EVENT = 2000,
18 GENERIC_EVENT2 = 2002,
19 GENERIC_EVENT3 = 2003,
20 CONFIG_EVENT = 3000
21};
22
23class PACPUSLIB_API PacpusEvent
24 : public QEvent
25{
26 Q_GADGET // permits to use signals and slots (using Q_SIGNAL, Q_SLOT) without inheriting from QObject
27
28public:
29 PacpusEvent(PacpusEventType type, road_time_t t = road_time(), road_timerange_t tr = 0)
30 : QEvent(QEvent::Type(type))
31 , m_time(t)
32 , m_timerange(tr)
33 {}
34
35 virtual ~PacpusEvent()
36 {}
37
38 // TODO: should we make it virtual pure ???
39 virtual QDataStream& streamOut(QDataStream& out)
40 {
41 return out;
42 }
43
44 // TODO: should we make it virtual pure ???
45 virtual QDataStream& streamIn(QDataStream& in)
46 {
47 return in;
48 }
49
50 road_time_t & time()
51 {
52 return m_time;
53 }
54
55 const road_time_t & time() const
56 {
57 return m_time;
58 }
59
60 road_timerange_t & timerange()
61 {
62 return m_timerange;
63 }
64
65 const road_timerange_t & timerange() const
66 {
67 return m_timerange;
68 }
69protected:
70 road_time_t m_time;
71 road_timerange_t m_timerange;
72};
73
74template <typename T>
75class /*PACPUSLIB_API*/ TypedData
76{
77public:
78 TypedData(const T& data)
79 : m_data(data)
80 {
81 }
82
83 ~TypedData()
84 {
85 }
86
87 T & data()
88 {
89 return m_data;
90 }
91
92 const T & data() const
93 {
94 return m_data;
95 }
96
97 size_t size() const
98 {
99 return sizeof(T);
100 }
101
102private:
103 T m_data;
104};
105
106template<class T>
107class /*PACPUSLIB_API*/ PacpusTypedEvent
108 : public PacpusEvent
109 , public TypedData<T>
110{
111public:
112 // FIXME: why we need `data = T()` ???
113 PacpusTypedEvent(PacpusEventType type, const T & data = T(), road_time_t t = road_time(), road_timerange_t tr = 0 )
114 : PacpusEvent(type, t, tr)
115 , TypedData<T>(data)
116 {}
117
118 ~PacpusTypedEvent()
119 {}
120
121 QDataStream& streamOut(QDataStream& out)
122 {
123 // FIXME Stream Data errors
124 return out << (quint64) time() << timerange() /*<< m_data*/;
125 }
126
127 QDataStream& streamIn(QDataStream& in)
128 {
129 return in >> (quint64&) time() >> timerange() /*>> m_data*/;
130 }
131};
132
133class PACPUSLIB_API GenericData
134{
135public:
136 GenericData(const char* data, size_t size)
137 : m_data(NULL)
138 , m_dataSize(size)
139 {
140 m_data = new char[m_dataSize];
141 ::std::copy(data, data + m_dataSize, m_data);
142 }
143
144 ~GenericData()
145 {
146 delete[] m_data;
147 }
148
149 char * data()
150 {
151 return m_data;
152 }
153
154 const char * data() const
155 {
156 return m_data;
157 }
158
159 size_t size() const
160 {
161 return m_dataSize;
162 }
163
164private:
165 char* m_data;
166 size_t m_dataSize;
167};
168
169class PACPUSLIB_API PacpusGenericEvent
170 : public PacpusEvent
171 , public GenericData
172{
173public:
174 PacpusGenericEvent(PacpusEventType type, const char* data, size_t size)
175 : PacpusEvent(type)
176 , GenericData(data, size)
177 {
178 }
179
180 virtual ~PacpusGenericEvent()
181 {
182 }
183};
184
185} // namespace pacpus
186
187PACPUSLIB_API inline QDataStream& operator<< (QDataStream& out, pacpus::PacpusEvent& ev)
188{
189 /*return ev.streamOut(out);*/
190 return out;
191}
192
193PACPUSLIB_API inline QDataStream& operator>> (QDataStream& in, pacpus::PacpusEvent& ev)
194{
195 /*return ev.streamIn(in);*/
196 return in;
197}
198
199#endif // PACPUS_EVENT_H
Note: See TracBrowser for help on using the repository browser.