Changeset 148 in pacpusframework for branches/2.0-beta1/include/Pacpus/kernel/PacpusEvent.h
- Timestamp:
- 07/31/13 14:42:05 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.0-beta1/include/Pacpus/kernel/PacpusEvent.h
r146 r148 2 2 #define PACPUS_EVENT_H 3 3 4 #include < QEvent>5 #include "Pacpus/kernel/road_time.h"4 #include <algorithm> 5 #include <Pacpus/kernel/road_time.h> 6 6 #include <Pacpus/kernel/pacpus.h> 7 7 #include <QDataStream> 8 #include <QEvent> 8 9 9 10 namespace pacpus { … … 11 12 // registerEventType // TODO 12 13 13 class GenericData { 14 public: 15 GenericData(char* data, size_t size) { 16 data_ = (char*)malloc(size); 17 memcpy(data_,data,size); 18 _size = size;} 19 20 ~GenericData() {free(data_);} 21 22 char * data() { return data_;} 23 size_t size() {return _size;} 24 25 private: 26 char* data_; 27 size_t _size; 28 }; 29 30 enum PacpusEventType { 14 // FIXME: move to another header file 15 enum PacpusEventType { 31 16 TYPED_EVENT = 1000, 32 17 GENERIC_EVENT = 2000, … … 44 29 PacpusEvent(PacpusEventType type, road_time_t t = road_time(), road_timerange_t tr = 0) 45 30 : QEvent(QEvent::Type(type)) 46 , t_(t)47 , tr_(tr)31 , m_time(t) 32 , m_timerange(tr) 48 33 {} 34 49 35 virtual ~PacpusEvent() 50 36 {} 51 37 52 // NOTE virtual pure??38 // TODO: should we make it virtual pure ??? 53 39 virtual QDataStream& streamOut(QDataStream& out) 54 40 { 55 41 return out; 56 } 42 } 43 44 // TODO: should we make it virtual pure ??? 57 45 virtual QDataStream& streamIn(QDataStream& in) 58 46 { … … 60 48 } 61 49 62 protected: // TODO make protected 63 road_time_t t_; 64 road_timerange_t tr_; 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 } 69 protected: 70 road_time_t m_time; 71 road_timerange_t m_timerange; 72 }; 73 74 template <typename T> 75 class /*PACPUSLIB_API*/ TypedData 76 { 77 public: 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 102 private: 103 T m_data; 65 104 }; 66 105 67 106 template<class T> 68 class PacpusTypedEvent : public PacpusEvent 107 class /*PACPUSLIB_API*/ PacpusTypedEvent 108 : public PacpusEvent 109 , public TypedData<T> 69 110 { 70 111 public: 71 PacpusTypedEvent(PacpusEventType type, T data = T(), road_time_t t = road_time(), road_timerange_t tr = 0 ):PacpusEvent(type, t, tr),data_(data) {} 72 ~PacpusTypedEvent() {} 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 {} 73 117 74 QDataStream& streamOut(QDataStream& out) {return out << (quint64)t_ << tr_ /*<<data_*/;} // FIXME Stream Data errors75 QDataStream& streamIn(QDataStream& in) {return in >> (quint64&)t_ >> tr_ /*>> data_*/;}118 ~PacpusTypedEvent() 119 {} 76 120 77 protected: 78 T data_; 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 } 79 131 }; 80 132 81 class PACPUSLIB_API PacpusGenericEvent : public PacpusEvent133 class PACPUSLIB_API GenericData 82 134 { 83 135 public: 84 PacpusGenericEvent(PacpusEventType type, char* data, size_t size) 85 : PacpusEvent(type) 136 GenericData(const char* data, size_t size) 137 : m_data(NULL) 138 , m_dataSize(size) 86 139 { 87 data_ = new char[size];88 memcpy(data_,data,size);89 _size = size;140 m_data = new char[m_dataSize]; 141 ::std::copy(data, data + m_dataSize, m_data); 142 } 90 143 144 ~GenericData() 145 { 146 delete[] m_data; 147 } 148 149 char * data() 150 { 151 return m_data; 91 152 } 92 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 164 private: 165 char* m_data; 166 size_t m_dataSize; 167 }; 168 169 class PACPUSLIB_API PacpusGenericEvent 170 : public PacpusEvent 171 , public GenericData 172 { 173 public: 174 PacpusGenericEvent(PacpusEventType type, const char* data, size_t size) 175 : PacpusEvent(type) 176 , GenericData(data, size) 177 { 178 } 179 93 180 virtual ~PacpusGenericEvent() 94 181 { 95 delete[] data_;96 182 } 97 98 char* data_;99 size_t _size;100 183 }; 101 102 184 103 185 } // namespace pacpus 104 186 105 inline QDataStream& operator << (QDataStream& out, pacpus::PacpusEvent& ev) {/*return ev.streamOut(out);*/ return out;} 106 inline QDataStream& operator >> (QDataStream& in, pacpus::PacpusEvent& ev) {/*return ev.streamIn(in);*/ return in;} 187 PACPUSLIB_API inline QDataStream& operator<< (QDataStream& out, pacpus::PacpusEvent& ev) 188 { 189 /*return ev.streamOut(out);*/ 190 return out; 191 } 192 193 PACPUSLIB_API inline QDataStream& operator>> (QDataStream& in, pacpus::PacpusEvent& ev) 194 { 195 /*return ev.streamIn(in);*/ 196 return in; 197 } 107 198 108 199 #endif // PACPUS_EVENT_H
Note:
See TracChangeset
for help on using the changeset viewer.