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)
104MSGPACK_ADAPTOR_SPAN_BINARY(
char)
105MSGPACK_ADAPTOR_SPAN_BINARY(
unsigned char)
106MSGPACK_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