10 #ifndef MSGPACK_CPP11_DEFINE_ARRAY_HPP 11 #define MSGPACK_CPP11_DEFINE_ARRAY_HPP 19 #include <type_traits> 22 #define MSGPACK_DEFINE_ARRAY(...) \ 23 template <typename Packer> \ 24 void msgpack_pack(Packer& pk) const \ 26 msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ 28 void msgpack_unpack(msgpack::object const& o) \ 30 msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ 32 template <typename MSGPACK_OBJECT> \ 33 void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ 35 msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ 38 #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this))) 41 #define MSGPACK_ADD_ENUM(enum_name) \ 44 MSGPACK_API_VERSION_NAMESPACE(v1) { \ 48 struct convert<enum_name> { \ 49 msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const { \ 50 std::underlying_type<enum_name>::type tmp; \ 52 v = static_cast<enum_name>(tmp); \ 57 struct object<enum_name> { \ 58 void operator()(msgpack::object& o, const enum_name& v) const { \ 59 auto tmp = static_cast<std::underlying_type<enum_name>::type>(v); \ 64 struct object_with_zone<enum_name> { \ 65 void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \ 66 auto tmp = static_cast<std::underlying_type<enum_name>::type>(v); \ 71 struct pack<enum_name> { \ 72 template <typename Stream> \ 73 msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \ 74 return o << static_cast<std::underlying_type<enum_name>::type>(v); \ 89 template <
typename Tuple, std::
size_t N>
91 template <
typename Packer>
92 static void pack(Packer& pk, Tuple
const& t) {
94 pk.pack(std::get<N-1>(t));
99 if(size <= N-1) {
return; }
108 template <
typename Tuple>
110 template <
typename Packer>
111 static void pack(Packer& pk, Tuple
const& t) {
112 pk.pack(std::get<0>(t));
116 if(size <= 0) {
return; }
124 template <
typename... Args>
130 template <
typename Packer>
133 pk.pack_array(
sizeof...(Args));
152 std::tuple<Args&...>
a;
159 template <
typename Packer>
181 template <
typename... Args>
193 #endif // MSGPACK_CPP11_DEFINE_ARRAY_HPP T & convert(T &v) const
Convert the object.
Definition: object.hpp:520
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
define_array make_define_array()
Definition: cpp03_define_array.hpp:3282
define_array< Args... > value_type
Definition: cpp11_define_array.hpp:126
uint32_t size
Definition: object_fwd.hpp:50
void * allocate_align(size_t size, size_t align=MSGPACK_ZONE_ALIGN)
Definition: cpp03_zone.hpp:248
static void unpack(msgpack::object const &o, Tuple &t)
Definition: cpp11_define_array.hpp:96
void msgpack_object(msgpack::object *o, msgpack::zone &) const
Definition: cpp11_define_array.hpp:168
std::tuple tuple_type
Definition: cpp11_define_array.hpp:158
union_type via
Definition: object_fwd.hpp:123
void msgpack_pack(Packer &pk) const
Definition: cpp11_define_array.hpp:131
Definition: cpp11_define_array.hpp:90
void msgpack_unpack(msgpack::object const &o)
Definition: cpp11_define_array.hpp:164
static void object(msgpack::object *o, msgpack::zone &z, Tuple const &t)
Definition: cpp11_define_array.hpp:102
Definition: cpp11_define_array.hpp:125
static void object(msgpack::object *o, msgpack::zone &z, Tuple const &t)
Definition: cpp11_define_array.hpp:119
msgpack::object * ptr
Definition: object_fwd.hpp:51
static void pack(Packer &pk, Tuple const &t)
Definition: cpp11_define_array.hpp:92
Definition: adaptor_base.hpp:15
Definition: cpp03_zone.hpp:34
void msgpack_pack(Packer &pk) const
Definition: cpp11_define_array.hpp:160
Definition: object_fwd.hpp:253
static void pack(Packer &pk, Tuple const &t)
Definition: cpp11_define_array.hpp:111
define_array(Args &... args)
Definition: cpp11_define_array.hpp:128
msgpack::object_array array
Definition: object_fwd.hpp:115
std::tuple< Args &... > a
Definition: cpp11_define_array.hpp:152
void msgpack_unpack(msgpack::object const &o)
Definition: cpp11_define_array.hpp:137
Object class that corresponding to MessagePack format object.
Definition: object_fwd.hpp:106
msgpack::type::object_type type
Definition: object_fwd.hpp:122
void msgpack_object(msgpack::object *o, msgpack::zone &z) const
Definition: cpp11_define_array.hpp:143
Definition: object_fwd.hpp:39
std::tuple< Args... > tuple_type
Definition: cpp11_define_array.hpp:127
static void unpack(msgpack::object const &o, Tuple &t)
Definition: cpp11_define_array.hpp:114
define_array value_type
Definition: cpp11_define_array.hpp:157
Definition: cpp03_define_array.hpp:90