117 #ifndef ASYNC_MSG_INCLUDED 118 #define ASYNC_MSG_INCLUDED 191 #define ASYNC_MSG_DERIVED_FROM(BASE_CLASS) \ 192 bool packParent(std::ostream& os) const \ 194 return BASE_CLASS::pack(os); \ 196 size_t packedSizeParent(void) const \ 198 return BASE_CLASS::packedSize(); \ 200 bool unpackParent(std::istream& is) \ 202 return BASE_CLASS::unpack(is); \ 212 #define ASYNC_MSG_MEMBERS(...) \ 213 bool pack(std::ostream& os) const \ 215 return packParent(os) && Msg::pack(os, __VA_ARGS__); \ 217 size_t packedSize(void) const \ 219 return packedSizeParent() + Msg::packedSize(__VA_ARGS__); \ 221 bool unpack(std::istream& is) \ 223 return unpackParent(is) && Msg::unpack(is, __VA_ARGS__); \ 231 #define ASYNC_MSG_NO_MEMBERS \ 232 bool pack(std::ostream& os) const \ 234 return packParent(os); \ 236 size_t packedSize(void) const { return packedSizeParent(); } \ 237 bool unpack(std::istream& is) \ 239 return unpackParent(is); \ 257 template <
typename T>
261 static bool pack(std::ostream& os,
const T& val) {
return val.pack(os); }
262 static size_t packedSize(
const T& val) {
return val.packedSize(); }
263 static bool unpack(std::istream& is, T& val) {
return val.unpack(is); }
270 static bool pack(std::ostream& os,
char val)
273 return os.write(&val, 1).good();
275 static size_t packedSize(
const char& val) {
return sizeof(char); }
276 static bool unpack(std::istream& is,
char& val)
284 template <
typename T>
288 static bool pack(std::ostream& os,
const T& val)
293 o.uval = htobe64(o.uval);
294 return os.write(o.buf,
sizeof(T)).good();
297 static bool unpack(std::istream& is, T& val)
300 is.read(o.buf,
sizeof(T));
301 o.uval = be64toh(o.uval);
318 template <
typename T>
322 static bool pack(std::ostream& os,
const T& val)
327 o.uval = htobe32(o.uval);
328 return os.write(o.buf,
sizeof(T)).good();
331 static bool unpack(std::istream& is, T& val)
334 is.read(o.buf,
sizeof(T));
335 o.uval = be32toh(o.uval);
352 template <
typename T>
356 static bool pack(std::ostream& os,
const T& val)
361 o.uval = htobe16(o.uval);
362 return os.write(o.buf,
sizeof(T)).good();
365 static bool unpack(std::istream& is, T& val)
368 is.read(o.buf,
sizeof(T));
369 o.uval = be16toh(o.uval);
385 template <
typename T>
389 static bool pack(std::ostream& os,
const T& val)
392 return os.write(reinterpret_cast<const char*>(&val),
sizeof(T)).good();
395 static bool unpack(std::istream& is, T& val)
397 is.read(reinterpret_cast<char*>(&val),
sizeof(T));
409 static bool pack(std::ostream& os,
const std::string& val)
412 if (val.size() > std::numeric_limits<uint16_t>::max())
416 uint16_t str_len(val.size());
418 os.write(val.c_str(), val.size());
422 return sizeof(uint16_t) + val.size();
424 static bool unpack(std::istream& is, std::string& val)
429 if (str_len > std::numeric_limits<uint16_t>::max())
434 if (is.read(buf, str_len))
436 val.assign(buf, str_len);
445 template <
typename I>
449 static bool pack(std::ostream& os,
const std::vector<I>& vec)
452 if (vec.size() > std::numeric_limits<uint16_t>::max())
457 for (
typename std::vector<I>::const_iterator it = vec.begin();
467 size_t size =
sizeof(uint16_t);
468 for (
typename std::vector<I>::const_iterator it = vec.begin();
469 it != vec.end(); ++it)
475 static bool unpack(std::istream& is, std::vector<I>& vec)
479 if (vec_size > std::numeric_limits<uint16_t>::max())
485 vec.reserve(vec_size);
486 for (
int i=0; i<vec_size; ++i)
496 template <
typename Tag,
typename Value>
500 static bool pack(std::ostream& os,
const std::map<Tag, Value>& m)
503 if (m.size() > std::numeric_limits<uint16_t>::max())
508 for (
typename std::map<Tag,Value>::const_iterator it = m.begin();
519 size_t size =
sizeof(uint16_t);
520 for (
typename std::map<Tag, Value>::const_iterator it = m.begin();
528 static bool unpack(std::istream& is, std::map<Tag,Value>& m)
532 if (map_size > std::numeric_limits<uint16_t>::max())
538 for (
int i=0; i<map_size; ++i)
565 virtual bool pack(std::ostream&)
const {
return true; }
567 virtual bool unpack(std::istream&)
const {
return true; }
569 template <
typename T>
570 bool pack(std::ostream& os,
const T& val)
const 574 template <
typename T>
579 template <
typename T>
580 bool unpack(std::istream& is, T& val)
const 585 template <
typename T1,
typename T2>
586 bool pack(std::ostream& os,
const T1& v1,
const T2& v2)
const 588 return pack(os, v1) &&
pack(os, v2);
590 template <
typename T1,
typename T2>
595 template <
typename T1,
typename T2>
596 bool unpack(std::istream& is, T1& v1, T2& v2)
601 template <
typename T1,
typename T2,
typename T3>
602 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3)
const 606 template <
typename T1,
typename T2,
typename T3>
607 size_t packedSize(
const T1& v1,
const T2& v2,
const T3& v3)
const 611 template <
typename T1,
typename T2,
typename T3>
612 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3)
617 template <
typename T1,
typename T2,
typename T3,
typename T4>
618 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
623 template <
typename T1,
typename T2,
typename T3,
typename T4>
629 template <
typename T1,
typename T2,
typename T3,
typename T4>
630 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4)
636 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
637 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
638 const T4& v4,
const T5& v5)
const 643 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
645 const T4& v4,
const T5& v5)
const 650 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
651 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4, T5& v5)
657 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
659 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
660 const T4& v4,
const T5& v5,
const T6& v6)
const 665 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
668 const T4& v4,
const T5& v5,
const T6& v6)
const 673 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
675 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4, T5& v5,
682 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
683 typename T6,
typename T7>
684 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
685 const T4& v4,
const T5& v5,
const T6& v6,
const T7& v7)
const 690 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
691 typename T6,
typename T7>
693 const T4& v4,
const T5& v5,
const T6& v6,
699 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
700 typename T6,
typename T7>
701 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4, T5& v5,
709 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
710 typename T6,
typename T7,
typename T8>
711 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
712 const T4& v4,
const T5& v5,
const T6& v6,
const T7& v7,
718 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
719 typename T6,
typename T7,
typename T8>
721 const T4& v4,
const T5& v5,
const T6& v6,
722 const T7& v7,
const T8& v8)
const 727 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
728 typename T6,
typename T7,
typename T8>
729 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4, T5& v5,
730 T6& v6, T7& v7, T8& v8)
737 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
738 typename T6,
typename T7,
typename T8,
typename T9>
739 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
740 const T4& v4,
const T5& v5,
const T6& v6,
const T7& v7,
741 const T8& v8,
const T9& v9)
const 747 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
748 typename T6,
typename T7,
typename T8,
typename T9>
750 const T4& v4,
const T5& v5,
const T6& v6,
751 const T7& v7,
const T8& v8,
const T9& v9)
const 757 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
758 typename T6,
typename T7,
typename T8,
typename T9>
759 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4, T5& v5,
760 T6& v6, T7& v7, T8& v8, T9& v9)
767 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
768 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
769 bool pack(std::ostream& os,
const T1& v1,
const T2& v2,
const T3& v3,
770 const T4& v4,
const T5& v5,
const T6& v6,
const T7& v7,
771 const T8& v8,
const T9& v9,
const T10& v10)
const 777 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
778 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
780 const T4& v4,
const T5& v5,
const T6& v6,
781 const T7& v7,
const T8& v8,
const T9& v9,
782 const T10& v10)
const 788 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
789 typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
790 bool unpack(std::istream& is, T1& v1, T2& v2, T3& v3, T4& v4, T5& v5,
791 T6& v6, T7& v7, T8& v8, T9& v9, T10& v10)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8) const
static size_t packedSize(const char &val)
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) const
bool unpack(std::istream &is, T &val) const
static bool pack(std::ostream &os, const T &val)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8) const
virtual bool unpack(std::istream &) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10) const
static size_t packedSize(const std::string &val)
size_t packedSize(const T &val) const
bool unpackParent(std::istream &) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6) const
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7) const
static bool unpack(std::istream &is, std::vector< I > &vec)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3) const
static bool unpack(std::istream &is, T &val)
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5)
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9) const
static bool unpack(std::istream &is, T &val)
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7)
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6)
static bool unpack(std::istream &is, T &val)
static bool unpack(std::istream &is, char &val)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2) const
static size_t packedSize(const T &val)
static size_t packedSize(const std::vector< I > &vec)
static bool unpack(std::istream &is, std::map< Tag, Value > &m)
static bool pack(std::ostream &os, const std::map< Tag, Value > &m)
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8, T9 &v9, T10 &v10)
Base class for all messages.
static size_t packedSize(const T &val)
static bool pack(std::ostream &os, const std::string &val)
static bool pack(std::ostream &os, char val)
virtual bool pack(std::ostream &) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9, const T10 &v10) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8, T9 &v9)
static size_t packedSize(const T &val)
bool packParent(std::ostream &) const
static size_t packedSize(const T &val)
static bool unpack(std::istream &is, T &val)
virtual size_t packedSize(void) const
Namespace for the asynchronous programming classes.
size_t packedSize(const T1 &v1, const T2 &v2) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3)
static bool pack(std::ostream &os, const T &val)
static size_t packedSize(const T &val)
size_t packedSizeParent(void) const
static bool pack(std::ostream &os, const std::vector< I > &vec)
static bool unpack(std::istream &is, T &val)
static size_t packedSize(const std::map< Tag, Value > &m)
static bool pack(std::ostream &os, const T &val)
bool unpack(std::istream &is, T1 &v1, T2 &v2)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6) const
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7) const
bool pack(std::ostream &os, const T &val) const
bool unpack(std::istream &is, T1 &v1, T2 &v2, T3 &v3, T4 &v4)
size_t packedSize(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) const
static bool pack(std::ostream &os, const T &val)
bool pack(std::ostream &os, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8, const T9 &v9) const
static bool pack(std::ostream &os, const T &val)
static bool unpack(std::istream &is, std::string &val)