19 #include <tbb/tbb_allocator.h>
37 typedef unsigned char Byte;
38 typedef std::vector<Byte, tbb::tbb_allocator<Byte> >
ByteBuffer;
40 static const int theHeaderSize = (
sizeof(
unsigned short) +
sizeof(
char)) * 2;
43 #define packSizeOf(type) ((sizeof(type)-1)<<4)
46 #define unpackSizeOf(dataType) (((dataType)>>4)+1)
49 #define isSimpleType(dataType) ((dataType)<128)
89 DtMessage(
unsigned short classId = 0,
unsigned short functionId = 0);
95 DtMessage(
const Byte* buffer,
size_t size);
106 void printDebugMessageContents(std::ostream&);
109 const char* dataTypeName(
unsigned char dataType);
112 unsigned short classId()
const;
115 unsigned short functionId()
const;
118 const Byte*
data()
const;
133 void serializeHeader(
unsigned short classId,
unsigned short functionId);
137 bool serializeWriteOut()
const;
141 void setSerializeWriteOut(
bool writeOut);
186 DtMessage& operator << (const std::pair<void*, int>& rawData);
194 void addData(
unsigned int dataType,
const void*
data,
int dataSize);
197 bool canReadData()
const;
201 unsigned char nextDataType()
const;
207 unsigned int nextDataSize()
const;
211 const void* nextDataPointer()
const;
214 void skipToNextData();
218 void advanceRead(
size_t bytes);
223 void getData(
int dataType,
void* output);
232 template <
typename T1>
238 template <
typename T1,
typename T2>
244 template <
typename T1,
typename T2,
typename T3>
247 *
this << t1 << t2 << t3;
250 template <
typename T1,
typename T2,
typename T3,
typename T4>
253 *
this << t1 << t2 << t3 << t4;
256 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
259 *
this << t1 << t2 << t3 << t4 << t5;
262 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
266 *
this << t1 << t2 << t3 << t4 << t5 << t6;
269 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
270 typename T6,
typename T7>
273 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7;
276 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
277 typename T6,
typename T7,
typename T8>
280 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
287 template <
typename T1>
293 template <
typename T1,
typename T2>
299 template <
typename T1,
typename T2,
typename T3>
302 *
this >> t1 >> t2 >> t3;
305 template <
typename T1,
typename T2,
typename T3,
typename T4>
308 *
this >> t1 >> t2 >> t3 >> t4;
311 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
314 *
this >> t1 >> t2 >> t3 >> t4 >> t5;
317 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
321 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6;
324 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
325 typename T6,
typename T7>
328 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7;
331 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
332 typename T6,
typename T7,
typename T8>
333 void readMultiple(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7,T8& t8)
335 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7 >> t8;
339 template <
typename T1>
342 if(mySerializeWriteOutFlag)
348 template <
typename T1,
typename T2>
351 if(mySerializeWriteOutFlag)
357 template <
typename T1,
typename T2,
typename T3>
360 if(mySerializeWriteOutFlag)
361 *
this >> t1 >> t2 >> t3;
363 *
this << t1 << t2 << t3;
366 template <
typename T1,
typename T2,
typename T3,
typename T4>
369 if(mySerializeWriteOutFlag)
370 *
this >> t1 >> t2 >> t3 >> t4;
372 *
this << t1 << t2 << t3 << t4;
375 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
378 if(mySerializeWriteOutFlag)
379 *
this >> t1 >> t2 >> t3 >> t4 >> t5;
381 *
this << t1 << t2 << t3 << t4 << t5;
384 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
386 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6)
388 if(mySerializeWriteOutFlag)
389 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6;
391 *
this << t1 << t2 << t3 << t4 << t5 << t6;
394 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
395 typename T6,
typename T7>
396 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7)
398 if(mySerializeWriteOutFlag)
399 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7;
401 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7;
404 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
405 typename T6,
typename T7,
typename T8>
406 void serialize(T1& t1,T2& t2,T3& t3,T4& t4,T5& t5,T6& t6,T7& t7,T8& t8)
408 if(mySerializeWriteOutFlag)
409 *
this >> t1 >> t2 >> t3 >> t4 >> t5 >> t6 >> t7 >> t8;
411 *
this << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
415 template <
typename T>
421 class FastStringBuf :
public std::stringbuf
424 const char* c_str()
const {
return pbase();}
425 size_t outputSize()
const
427 return pptr() - pbase();
431 std::pair<void*,int> configMemory;
433 if(serializeWriteOut())
436 serialize(configMemory);
438 std::istringstream memoryStream;
440 memoryStream.str(std::string((
char*)configMemory.first,configMemory.second));
447 delete[] (
char*)configMemory.first;
453 FastStringBuf fastBuffer;
455 std::ostream memoryStream(&fastBuffer);
462 configMemory.first = (
void*) fastBuffer.c_str();
463 configMemory.second = fastBuffer.outputSize();
465 serialize(configMemory);
472 void setClassId(
unsigned short classId);
475 void setFunctionId(
unsigned short functionId);
DataType
Definition: DtMessage.h:53
A unicode string.
Definition: DtUnicode.h:33
void serialize(T1 &t1)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:340
#define DT_DLL_VRVUTIL
Definition: vrvUtil.h:34
void addMultiple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:271
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t t(t+t)") define_sfop3(16
The IGI Message.
Definition: DtMessage.h:33
void readMultiple(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:333
std::vector< Byte, tbb::tbb_allocator< Byte > > ByteBuffer
Definition: DtMessage.h:38
void readMultiple(T1 &t1)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:288
void addMultiple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:257
void readMultiple(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5, T6 &t6, T7 &t7)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:326
unsigned char Byte
Definition: DtMessage.h:37
void serialize(T1 &t1, T2 &t2, T3 &t3, T4 &t4)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:367
void readMultiple(T1 &t1, T2 &t2)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:294
Definition: portable_binary_oarchive.hpp:77
DT_DLL_VRVCORE DtMessage & operator>>(DtMessage &msg, DtVrlinkSimulatedEntityState &state)
Decode a DtEntityState from a DtMessage.
void addMultiple()
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:228
Contains DLL export macros.
void addMultiple(T1 t1)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:233
void serialize(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5, T6 &t6, T7 &t7, T8 &t8)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:406
void readMultiple(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5, T6 &t6)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:319
void readMultiple(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:312
#define packSizeOf(type)
Definition: DtMessage.h:43
void addMultiple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:264
void addMultiple(T1 t1, T2 t2, T3 t3)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:245
ByteBuffer::const_iterator myReadIter
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:478
void readMultiple()
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:283
void serialize(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5, T6 &t6)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:386
void addMultiple(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:278
void addMultiple(T1 t1, T2 t2)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:239
bool mySerializeWriteOutFlag
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:479
void serialize(T1 &t1, T2 &t2)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:349
void serializeViaArchive(T &t)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:416
void serialize(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5, T6 &t6, T7 &t7)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:396
DT_DLL_VRVCORE DtMessage & operator<<(DtMessage &msg, const DtVrlinkSimulatedEntityState &state)
Encode a DtEntityState into a DtMessage.
ByteBuffer myBuffer
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:477
void readMultiple(T1 &t1, T2 &t2, T3 &t3)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:300
Definition: portable_binary_iarchive.hpp:73
void readMultiple(T1 &t1, T2 &t2, T3 &t3, T4 &t4)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:306
void addMultiple(T1 t1, T2 t2, T3 t3, T4 t4)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:251
void serialize(T1 &t1, T2 &t2, T3 &t3)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:358
void serialize(T1 &t1, T2 &t2, T3 &t3, T4 &t4, T5 &t5)
Helper functions for doing multiple adds and reads.
Definition: DtMessage.h:376