19 class portable_binary_iarchive;
20 class portable_binary_oarchive;
35 typedef unsigned char Byte;
38 static const int theHeaderSize = (
sizeof(
unsigned short) +
sizeof(
char)) * 2;
41 #define packSizeOf(type) ((sizeof(type)-1)<<4)
44 #define unpackSizeOf(dataType) ((dataType>>4)+1)
47 #define isSimpleType(dataType) (dataType<128)
85 DtMessage(
unsigned short classId = 0,
unsigned short functionId = 0);
91 DtMessage(
const Byte* buffer,
size_t size);
102 void printDebugMessageContents(std::ostream&);
105 const char* dataTypeName(
unsigned char dataType);
108 unsigned short classId()
const;
111 unsigned short functionId()
const;
114 const Byte* data()
const;
129 void serializeHeader(
unsigned short classId,
unsigned short functionId);
133 bool serializeWriteOut()
const;
137 void setSerializeWriteOut(
bool writeOut);
178 DtMessage& operator << (const std::pair<void*,int>& rawData);
185 void addData(
unsigned int dataType,
const void* data,
int dataSize);
188 bool canReadData()
const;
192 unsigned char nextDataType()
const;
198 unsigned int nextDataSize()
const;
202 const void* nextDataPointer()
const;
205 void skipToNextData();
209 void advanceRead(
size_t bytes);
214 void getData(
int dataType,
void* output);
223 template <
typename T1>
224 void addMultiple(T1 t1)
229 template <
typename T1,
typename T2>
230 void addMultiple(T1 t1,T2 t2)
235 template <
typename T1,
typename T2,
typename T3>
236 void addMultiple(T1 t1,T2 t2,T3 t3)
238 *
this << t1 << t2 << t3;
241 template <
typename T1,
typename T2,
typename T3,
typename T4>
242 void addMultiple(T1 t1,T2 t2,T3 t3,T4 t4)
244 *
this << t1 << t2 << t3 << t4;
247 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
248 void addMultiple(T1 t1,T2 t2,T3 t3,T4 t4,T5 t5)
250 *
this << t1 << t2 << t3 << t4 << t5;
253 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
255 void addMultiple(T1 t1,T2 t2,T3 t3,T4 t4,T5 t5,T6 t6)
257 *
this << t1 << t2 << t3 << t4 << t5 << t6;
260 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
261 typename T6,
typename T7>
262 void addMultiple(T1 t1,T2 t2,T3 t3,T4 t4,T5 t5,T6 t6,T7 t7)
264 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7;
267 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
268 typename T6,
typename T7,
typename T8>
269 void addMultiple(T1 t1,T2 t2,T3 t3,T4 t4,T5 t5,T6 t6,T7 t7,T8 t8)
271 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
278 template <
typename T1>
279 void readMultiple(T1& t1)
284 template <
typename T1,
typename T2>
285 void readMultiple(T1& t1,T2& t2)
290 template <
typename T1,
typename T2,
typename T3>
291 void readMultiple(T1& t1,T2& t2,T3& t3)
293 *
this >> t1 >> t2 >> t3;
296 template <
typename T1,
typename T2,
typename T3,
typename T4>
297 void readMultiple(T1& t1,T2& t2,T3& t3,T4& t4)
299 *
this >> t1 >> t2 >> t3 >> t4;
302 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
303 void readMultiple(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5)
305 *
this >> t1 >> t2 >> t3 >> t4 >> t5;
308 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
310 void readMultiple(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6)
312 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6;
315 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
316 typename T6,
typename T7>
317 void readMultiple(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7)
319 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7;
322 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
323 typename T6,
typename T7,
typename T8>
324 void readMultiple(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7,T8& t8)
326 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7 >> t8;
330 template <
typename T1>
331 void serialize(T1& t1)
333 if(mySerializeWriteOutFlag)
339 template <
typename T1,
typename T2>
340 void serialize(T1& t1,T2& t2)
342 if(mySerializeWriteOutFlag)
348 template <
typename T1,
typename T2,
typename T3>
349 void serialize(T1& t1,T2& t2,T3& t3)
351 if(mySerializeWriteOutFlag)
352 *
this >> t1 >> t2 >> t3;
354 *
this << t1 << t2 << t3;
357 template <
typename T1,
typename T2,
typename T3,
typename T4>
358 void serialize(T1& t1,T2& t2,T3& t3,T4& t4)
360 if(mySerializeWriteOutFlag)
361 *
this >> t1 >> t2 >> t3 >> t4;
363 *
this << t1 << t2 << t3 << t4;
366 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
367 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5)
369 if(mySerializeWriteOutFlag)
370 *
this >> t1 >> t2 >> t3 >> t4 >> t5;
372 *
this << t1 << t2 << t3 << t4 << t5;
375 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
377 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6)
379 if(mySerializeWriteOutFlag)
380 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6;
382 *
this << t1 << t2 << t3 << t4 << t5 << t6;
385 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
386 typename T6,
typename T7>
387 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7)
389 if(mySerializeWriteOutFlag)
390 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7;
392 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7;
395 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
396 typename T6,
typename T7,
typename T8>
397 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7,T8& t8)
399 if(mySerializeWriteOutFlag)
400 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7 >> t8;
402 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
406 template <
typename T>
407 void serializeViaArchive(T& t)
412 class FastStringBuf :
public std::stringbuf
415 const char* c_str()
const {
return pbase();}
416 size_t outputSize()
const
418 return pptr() - pbase();
422 std::pair<void*,int> configMemory;
424 if(serializeWriteOut())
427 serialize(configMemory);
429 std::istringstream memoryStream;
431 memoryStream.str(std::string((
char*)configMemory.first,configMemory.second));
433 portable_binary_iarchive ia(memoryStream);
438 delete[] (
char*)configMemory.first;
444 FastStringBuf fastBuffer;
446 std::ostream memoryStream(&fastBuffer);
448 portable_binary_oarchive oa(memoryStream);
453 configMemory.first = (
void*) fastBuffer.c_str();
454 configMemory.second = fastBuffer.outputSize();
456 serialize(configMemory);
463 void setClassId(
unsigned short classId);
466 void setFunctionId(
unsigned short functionId);