11 #ifndef MSGPACK_V1_TYPE_CPP20_SPAN_HPP
12 #define MSGPACK_V1_TYPE_CPP20_SPAN_HPP
17 #if MSGPACK_CPP_VERSION > 201703
37 #define MSGPACK_ADAPTOR_CONVERT_SPAN_BINARY(byte_t) \
39 struct convert<std::span<const byte_t> > { \
40 msgpack::object const& operator()(msgpack::object const& o, std::span<const byte_t>& v) const { \
42 case msgpack::type::BIN: \
43 v = std::span(reinterpret_cast<const byte_t*>(o.via.bin.ptr), o.via.bin.size); \
46 throw msgpack::type_error(); \
53 #define MSGPACK_ADAPTOR_PACK_SPAN_BINARY(byte_t) \
55 struct pack<std::span<byte_t> > { \
56 template <typename Stream> \
57 msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::span<byte_t>& v) const { \
58 uint32_t size = checked_get_container_size(v.size()); \
61 o.pack_bin_body(reinterpret_cast<char const*>(v.data()), size); \
67 #define MSGPACK_ADAPTOR_OBJECT_SPAN_BINARY(byte_t) \
69 struct object<std::span<byte_t> > { \
70 void operator()(msgpack::object& o, const std::span<byte_t>& v) const { \
71 uint32_t size = checked_get_container_size(v.size()); \
72 o.type = msgpack::type::BIN; \
74 o.via.bin.ptr = reinterpret_cast<char const*>(v.data()); \
76 o.via.bin.size = size; \
80 #define MSGPACK_ADAPTOR_OBJECT_WITH_ZONE_SPAN_BINARY(byte_t) \
82 struct object_with_zone<std::span<byte_t> > { \
83 void operator()(msgpack::object::with_zone& o, const std::span<byte_t>& v) const { \
84 uint32_t size = checked_get_container_size(v.size()); \
85 o.type = msgpack::type::BIN; \
86 o.via.bin.size = size; \
88 char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char))); \
89 o.via.bin.ptr = ptr; \
90 std::memcpy(ptr, v.data(), size); \
95 #define MSGPACK_ADAPTOR_SPAN_BINARY(byte_t) \
96 MSGPACK_ADAPTOR_CONVERT_SPAN_BINARY(byte_t) \
97 MSGPACK_ADAPTOR_PACK_SPAN_BINARY(byte_t) \
98 MSGPACK_ADAPTOR_PACK_SPAN_BINARY(const byte_t) \
99 MSGPACK_ADAPTOR_OBJECT_SPAN_BINARY(byte_t) \
100 MSGPACK_ADAPTOR_OBJECT_SPAN_BINARY(const byte_t) \
101 MSGPACK_ADAPTOR_OBJECT_WITH_ZONE_SPAN_BINARY(byte_t) \
102 MSGPACK_ADAPTOR_OBJECT_WITH_ZONE_SPAN_BINARY(const byte_t)
104 MSGPACK_ADAPTOR_SPAN_BINARY(
char)
105 MSGPACK_ADAPTOR_SPAN_BINARY(
unsigned char)
106 MSGPACK_ADAPTOR_SPAN_BINARY(std::byte)
108 #undef MSGPACK_ADAPTOR_SPAN_BINARY
109 #undef MSGPACK_ADAPTOR_OBJECT_WITH_ZONE_SPAN_BINARY
110 #undef MSGPACK_ADAPTOR_OBJECT_SPAN_BINARY
111 #undef MSGPACK_ADAPTOR_PACK_SPAN_BINARY
112 #undef MSGPACK_ADAPTOR_CONVERT_SPAN_BINARY
Definition: adaptor_base.hpp:15
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:66