source: pacpusframework/trunk/include/Pacpus/kernel/PacpusEvent.h@ 196

Last change on this file since 196 was 196, checked in by Marek Kurdej, 11 years ago

Fixed: using auto-generated PacpusLibConfig.h instead of pacpus.h.

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