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

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

Corrections in PacpusEvent, InputOutputBase, InputOutputInterface.
Fixed: DLL import/export in geodesie.h.

  • Property svn:executable set to *
File size: 3.6 KB
RevLine 
[89]1#ifndef PACPUS_EVENT_H
2#define PACPUS_EVENT_H
3
[148]4#include <algorithm>
5#include <Pacpus/kernel/road_time.h>
[94]6#include <Pacpus/kernel/pacpus.h>
[96]7#include <QDataStream>
[148]8#include <QEvent>
[89]9
10namespace pacpus {
11
[110]12// registerEventType // TODO
13
[148]14// FIXME: move to another header file
15enum PacpusEventType {
[89]16 TYPED_EVENT = 1000,
17 GENERIC_EVENT = 2000,
18 GENERIC_EVENT2 = 2002,
19 GENERIC_EVENT3 = 2003,
20 CONFIG_EVENT = 3000
21};
22
[131]23class PACPUSLIB_API PacpusEvent
24 : public QEvent
[89]25{
[131]26 Q_GADGET // permits to use signals and slots (using Q_SIGNAL, Q_SLOT) without inheriting from QObject
27
[89]28public:
[146]29 PacpusEvent(PacpusEventType type, road_time_t t = road_time(), road_timerange_t tr = 0)
30 : QEvent(QEvent::Type(type))
[148]31 , m_time(t)
32 , m_timerange(tr)
[146]33 {}
[148]34
[146]35 virtual ~PacpusEvent()
36 {}
[96]37
[148]38 // TODO: should we make it virtual pure ???
[146]39 virtual QDataStream& streamOut(QDataStream& out)
40 {
41 return out;
[148]42 }
43
44 // TODO: should we make it virtual pure ???
[146]45 virtual QDataStream& streamIn(QDataStream& in)
46 {
47 return in;
48 }
[96]49
[148]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;
[89]72};
73
[148]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
[89]106template<class T>
[148]107class /*PACPUSLIB_API*/ PacpusTypedEvent
108 : public PacpusEvent
109 , public TypedData<T>
[89]110{
111public:
[148]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(data)
116 {}
[96]117
[148]118 ~PacpusTypedEvent()
119 {}
[96]120
[148]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 }
[89]131};
132
[148]133class PACPUSLIB_API GenericData
[89]134{
135public:
[148]136 GenericData(const char* data, size_t size)
137 : m_data(NULL)
138 , m_dataSize(size)
[146]139 {
[148]140 m_data = new char[m_dataSize];
141 ::std::copy(data, data + m_dataSize, m_data);
142 }
[89]143
[148]144 ~GenericData()
145 {
146 delete[] m_data;
[89]147 }
[148]148
149 char * data()
150 {
151 return m_data;
152 }
[146]153
[148]154 const char * data() const
[146]155 {
[148]156 return m_data;
[146]157 }
158
[148]159 size_t size() const
160 {
161 return m_dataSize;
162 }
163
164private:
165 char* m_data;
166 size_t m_dataSize;
[89]167};
168
[148]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 }
[89]179
[148]180 virtual ~PacpusGenericEvent()
181 {
182 }
183};
184
[89]185} // namespace pacpus
186
[148]187PACPUSLIB_API inline QDataStream& operator<< (QDataStream& out, pacpus::PacpusEvent& ev)
188{
189 /*return ev.streamOut(out);*/
190 return out;
191}
[110]192
[148]193PACPUSLIB_API inline QDataStream& operator>> (QDataStream& in, pacpus::PacpusEvent& ev)
194{
195 /*return ev.streamIn(in);*/
196 return in;
197}
198
[89]199#endif // PACPUS_EVENT_H
Note: See TracBrowser for help on using the repository browser.