mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-21 07:45:02 +02:00
Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7c67109396 | ||
![]() |
fd4e28f23d | ||
![]() |
2098062613 | ||
![]() |
22bc707035 | ||
![]() |
7ad743f2da | ||
![]() |
315bbd4b40 | ||
![]() |
288a6b2e31 | ||
![]() |
a0e4294b5a | ||
![]() |
64baa15f8e | ||
![]() |
354ee5b9a3 | ||
![]() |
2ddd79499c | ||
![]() |
7f0614e998 | ||
![]() |
150d74508e | ||
![]() |
8674c821c4 | ||
![]() |
10be66712d | ||
![]() |
2698cfc254 | ||
![]() |
333ee98ab2 | ||
![]() |
156e315394 | ||
![]() |
01fedf847b | ||
![]() |
56db4475f2 | ||
![]() |
f065c2a447 | ||
![]() |
ba4d8df63e | ||
![]() |
c00584281f | ||
![]() |
45a0124ede | ||
![]() |
ceb27348bd | ||
![]() |
1ad737ee08 | ||
![]() |
7024a1ec2c | ||
![]() |
ca4a425a52 | ||
![]() |
a502097fd0 | ||
![]() |
6b99a0c8b7 | ||
![]() |
1a3fcc3a22 | ||
![]() |
111739f8ce | ||
![]() |
f638e2186b | ||
![]() |
002376c678 | ||
![]() |
09a2f81b5f | ||
![]() |
ffcaaeb482 | ||
![]() |
bd511a4bd1 | ||
![]() |
684c5e0bb0 | ||
![]() |
8e74449181 | ||
![]() |
f2b788e51f | ||
![]() |
7214b4c73f | ||
![]() |
a7a78bde9b | ||
![]() |
b4786711df |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,3 +1,17 @@
|
||||
# 2017-08-03 version 2.1.4
|
||||
* Add boost asio examples (including zlib) (#610)
|
||||
* Remove some warnings (#611)
|
||||
* Fix unpack visitor to treat float32/64 correctly (#613)
|
||||
* Improve documents (#616)
|
||||
* Fix alignment problem on some platform (#617, #518)
|
||||
* Fix conflict std::tuple, std::pair, and boost::fusion::sequence problem (#619)
|
||||
|
||||
# 2017-06-15 version 2.1.3
|
||||
* Improve build system (#603)
|
||||
* Add C++17 adaptors `std::optional` and `std::string_view`. (#607, #608)
|
||||
* Improve cross platform configuration (#601)
|
||||
* Remove some warnings (#599, #602, #605)
|
||||
|
||||
# 2017-06-07 version 2.1.2
|
||||
|
||||
* Improve documents (#565)
|
||||
|
@@ -50,7 +50,15 @@ IF (MSGPACK_USE_X3_PARSE)
|
||||
ENDIF ()
|
||||
ENDIF ()
|
||||
ELSE ()
|
||||
IF (MSGPACK_CXX11)
|
||||
IF (MSGPACK_CXX17)
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}")
|
||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}")
|
||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++17.")
|
||||
ENDIF ()
|
||||
ELSEIF (MSGPACK_CXX11)
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
@@ -251,7 +259,12 @@ ENDIF ()
|
||||
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10")
|
||||
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX)
|
||||
ENDIF()
|
||||
ENDIF ()
|
||||
|
||||
IF ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "sparc")
|
||||
SET (CMAKE_C_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_C_FLAGS}")
|
||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_CXX_FLAGS}")
|
||||
ENDIF ()
|
||||
|
||||
IF (NOT DEFINED CMAKE_INSTALL_BINDIR)
|
||||
SET(CMAKE_INSTALL_BINDIR bin)
|
||||
|
@@ -180,6 +180,8 @@ IF (MSGPACK_ENABLE_CXX)
|
||||
include/msgpack/adaptor/cpp11/unique_ptr.hpp
|
||||
include/msgpack/adaptor/cpp11/unordered_map.hpp
|
||||
include/msgpack/adaptor/cpp11/unordered_set.hpp
|
||||
include/msgpack/adaptor/cpp17/optional.hpp
|
||||
include/msgpack/adaptor/cpp17/string_view.hpp
|
||||
include/msgpack/adaptor/define.hpp
|
||||
include/msgpack/adaptor/define_decl.hpp
|
||||
include/msgpack/adaptor/deque.hpp
|
||||
@@ -528,6 +530,8 @@ IF (MSGPACK_ENABLE_CXX)
|
||||
include/msgpack/v1/adaptor/cpp11/unique_ptr.hpp
|
||||
include/msgpack/v1/adaptor/cpp11/unordered_map.hpp
|
||||
include/msgpack/v1/adaptor/cpp11/unordered_set.hpp
|
||||
include/msgpack/v1/adaptor/cpp17/optional.hpp
|
||||
include/msgpack/v1/adaptor/cpp17/string_view.hpp
|
||||
include/msgpack/v1/adaptor/define.hpp
|
||||
include/msgpack/v1/adaptor/define_decl.hpp
|
||||
include/msgpack/v1/adaptor/deque.hpp
|
||||
|
@@ -96,7 +96,7 @@ int main(void) {
|
||||
/* deserializes it. */
|
||||
msgpack_unpacked msg;
|
||||
msgpack_unpacked_init(&msg);
|
||||
bool success = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL);
|
||||
msgpack_unpack_return ret = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL);
|
||||
|
||||
/* prints the deserialized object. */
|
||||
msgpack_object obj = msg.data;
|
||||
@@ -137,7 +137,7 @@ int main(void) {
|
||||
/* deserializes it. */
|
||||
msgpack_unpacked msg;
|
||||
msgpack_unpacked_init(&msg);
|
||||
bool success = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL);
|
||||
msgpack_unpack_return ret = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL);
|
||||
|
||||
/* prints the deserialized object. */
|
||||
msgpack_object obj = msg.data;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
`msgpack` for C/C++
|
||||
===================
|
||||
|
||||
Version 2.1.2 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
|
||||
Version 2.1.4 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
|
||||
|
||||
It's like JSON but small and fast.
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
version: 2.1.2.{build}
|
||||
version: 2.1.4.{build}
|
||||
|
||||
image:
|
||||
- Visual Studio 2015
|
||||
|
@@ -75,7 +75,7 @@ struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = <%=i+1%>;
|
||||
<%0.upto(i) {|j|%>
|
||||
o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%>
|
||||
|
@@ -82,7 +82,7 @@ struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = <%=(i+1)/2%>;
|
||||
<%0.step(i,2) {|j|%>
|
||||
o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z);
|
||||
|
@@ -207,7 +207,7 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = <%=i+1%>;
|
||||
<%0.upto(i) {|j|%>
|
||||
o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%>
|
||||
|
@@ -178,7 +178,9 @@ private:
|
||||
template <typename T>
|
||||
static void object_delete(void* obj);
|
||||
|
||||
void* allocate_expand(size_t size);
|
||||
static char* get_aligned(char* ptr, size_t align);
|
||||
|
||||
char* allocate_expand(size_t size);
|
||||
private:
|
||||
zone(const zone&);
|
||||
zone& operator=(const zone&);
|
||||
@@ -188,37 +190,42 @@ inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_
|
||||
{
|
||||
}
|
||||
|
||||
inline void* zone::allocate_align(size_t size, size_t align)
|
||||
inline char* zone::get_aligned(char* ptr, size_t align)
|
||||
{
|
||||
char* aligned =
|
||||
return
|
||||
reinterpret_cast<char*>(
|
||||
reinterpret_cast<size_t>(
|
||||
(m_chunk_list.m_ptr + (align - 1))) / align * align);
|
||||
(ptr + (align - 1))) / align * align);
|
||||
}
|
||||
|
||||
inline void* zone::allocate_align(size_t size, size_t align)
|
||||
{
|
||||
char* aligned = get_aligned(m_chunk_list.m_ptr, align);
|
||||
size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr);
|
||||
if(m_chunk_list.m_free >= adjusted_size) {
|
||||
m_chunk_list.m_free -= adjusted_size;
|
||||
m_chunk_list.m_ptr += adjusted_size;
|
||||
return aligned;
|
||||
if (m_chunk_list.m_free < adjusted_size) {
|
||||
size_t enough_size = size + align - 1;
|
||||
char* ptr = allocate_expand(enough_size);
|
||||
aligned = get_aligned(ptr, align);
|
||||
adjusted_size = size + (aligned - m_chunk_list.m_ptr);
|
||||
}
|
||||
return reinterpret_cast<char*>(
|
||||
reinterpret_cast<size_t>(
|
||||
allocate_expand(size + (align - 1))) / align * align);
|
||||
m_chunk_list.m_free -= adjusted_size;
|
||||
m_chunk_list.m_ptr += adjusted_size;
|
||||
return aligned;
|
||||
}
|
||||
|
||||
inline void* zone::allocate_no_align(size_t size)
|
||||
{
|
||||
if(m_chunk_list.m_free < size) {
|
||||
return allocate_expand(size);
|
||||
}
|
||||
|
||||
char* ptr = m_chunk_list.m_ptr;
|
||||
if(m_chunk_list.m_free < size) {
|
||||
ptr = allocate_expand(size);
|
||||
}
|
||||
m_chunk_list.m_free -= size;
|
||||
m_chunk_list.m_ptr += size;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
inline void* zone::allocate_expand(size_t size)
|
||||
inline char* zone::allocate_expand(size_t size)
|
||||
{
|
||||
chunk_list* const cl = &m_chunk_list;
|
||||
|
||||
@@ -240,8 +247,8 @@ inline void* zone::allocate_expand(size_t size)
|
||||
|
||||
c->m_next = cl->m_head;
|
||||
cl->m_head = c;
|
||||
cl->m_free = sz - size;
|
||||
cl->m_ptr = ptr + size;
|
||||
cl->m_free = sz;
|
||||
cl->m_ptr = ptr;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
@@ -300,7 +307,7 @@ inline std::size_t aligned_size(
|
||||
template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||
T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
|
@@ -24,6 +24,14 @@
|
||||
#define MSGPACK_ZONE_ALIGN sizeof(void*)
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof(type)
|
||||
#else
|
||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof__(type)
|
||||
#endif
|
||||
// For a compiler that doesn't support __alignof__:
|
||||
// #define MSGPACK_ZONE_ALIGNOF(type) MSGPACK_ZONE_ALIGN
|
||||
|
||||
<% GENERATION_LIMIT = 15 %>
|
||||
namespace msgpack {
|
||||
|
||||
|
@@ -3,6 +3,20 @@ IF (MSGPACK_BOOST)
|
||||
msgpack_variant_capitalize.cpp
|
||||
msgpack_variant_mapbased.cpp
|
||||
)
|
||||
IF (MSGPACK_CXX11 OR MSGPACK_CXX17)
|
||||
FIND_PACKAGE (Threads REQUIRED)
|
||||
LIST (APPEND exec_PROGRAMS
|
||||
asio_send_recv.cpp
|
||||
)
|
||||
IF (ZLIB_FOUND)
|
||||
INCLUDE_DIRECTORIES (
|
||||
${ZLIB_INCLUDE_DIRS}
|
||||
)
|
||||
LIST (APPEND exec_PROGRAMS
|
||||
asio_send_recv_zlib.cpp
|
||||
)
|
||||
ENDIF ()
|
||||
ENDIF ()
|
||||
ENDIF ()
|
||||
|
||||
FOREACH (source_file ${exec_PROGRAMS})
|
||||
@@ -15,6 +29,15 @@ FOREACH (source_file ${exec_PROGRAMS})
|
||||
PRIVATE
|
||||
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
|
||||
)
|
||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||
${Boost_SYSTEM_LIBRARY}
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
)
|
||||
IF (ZLIB_FOUND)
|
||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||
${ZLIB_LIBRARIES}
|
||||
)
|
||||
ENDIF()
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3")
|
||||
ENDIF ()
|
||||
|
95
example/boost/asio_send_recv.cpp
Normal file
95
example/boost/asio_send_recv.cpp
Normal file
@@ -0,0 +1,95 @@
|
||||
// MessagePack for C++ example
|
||||
//
|
||||
// Copyright (C) 2017 KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
#include <boost/asio.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
#include <msgpack.hpp>
|
||||
|
||||
int main() {
|
||||
boost::asio::io_service ios;
|
||||
std::uint16_t const port = 12345;
|
||||
|
||||
// Server
|
||||
std::size_t const window_size = 10;
|
||||
boost::asio::ip::tcp::acceptor ac(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
|
||||
boost::asio::ip::tcp::socket ss(ios);
|
||||
std::function<void()> do_accept;
|
||||
std::function<void()> do_async_read_some;
|
||||
|
||||
msgpack::unpacker unp;
|
||||
|
||||
do_accept = [&] {
|
||||
ac.async_accept(
|
||||
ss,
|
||||
[&]
|
||||
(boost::system::error_code const& e) {
|
||||
if (e) {
|
||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
||||
return;
|
||||
}
|
||||
unp.reserve_buffer(window_size);
|
||||
do_async_read_some = [&] {
|
||||
ss.async_read_some(
|
||||
boost::asio::buffer(unp.buffer(), window_size),
|
||||
[&](boost::system::error_code const& e, std::size_t bytes_transferred) {
|
||||
if (e) {
|
||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
||||
return;
|
||||
}
|
||||
std::cout << bytes_transferred << " bytes read." << std::endl;
|
||||
unp.buffer_consumed(bytes_transferred);
|
||||
msgpack::object_handle oh;
|
||||
while (unp.next(oh)) {
|
||||
std::cout << oh.get() << std::endl;
|
||||
// In order to finish the program,
|
||||
// return if one complete msgpack is processed.
|
||||
// In actual server, don't return here.
|
||||
return;
|
||||
}
|
||||
do_async_read_some();
|
||||
}
|
||||
);
|
||||
};
|
||||
do_async_read_some();
|
||||
}
|
||||
);
|
||||
};
|
||||
do_accept();
|
||||
|
||||
// Client
|
||||
auto host = "localhost";
|
||||
boost::asio::ip::tcp::resolver r(ios);
|
||||
boost::asio::ip::tcp::resolver::query q(host, boost::lexical_cast<std::string>(port));
|
||||
auto it = r.resolve(q);
|
||||
boost::asio::ip::tcp::socket cs(ios);
|
||||
boost::asio::async_connect(
|
||||
cs,
|
||||
|
||||
it,
|
||||
[&]
|
||||
(boost::system::error_code const& e, boost::asio::ip::tcp::resolver::iterator) {
|
||||
if (e) {
|
||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
||||
return;
|
||||
}
|
||||
std::cout << __LINE__ << ":client connected" << std::endl;
|
||||
msgpack::sbuffer sb;
|
||||
msgpack::pack(sb, std::make_tuple(42, false, "hello world", 12.3456));
|
||||
write(cs, boost::asio::buffer(sb.data(), sb.size()));
|
||||
}
|
||||
);
|
||||
|
||||
// Start
|
||||
ios.run();
|
||||
}
|
165
example/boost/asio_send_recv_zlib.cpp
Normal file
165
example/boost/asio_send_recv_zlib.cpp
Normal file
@@ -0,0 +1,165 @@
|
||||
// MessagePack for C++ example
|
||||
//
|
||||
// Copyright (C) 2017 KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
#include <boost/asio.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
#include <msgpack.hpp>
|
||||
#include <msgpack/zbuffer.hpp>
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
void print(std::string const& buf) {
|
||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
||||
it != end;
|
||||
++it) {
|
||||
std::cout
|
||||
<< std::setw(2)
|
||||
<< std::hex
|
||||
<< std::setfill('0')
|
||||
<< (static_cast<int>(*it) & 0xff)
|
||||
<< ' ';
|
||||
}
|
||||
std::cout << std::dec << std::endl;
|
||||
}
|
||||
|
||||
int main() {
|
||||
boost::asio::io_service ios;
|
||||
std::uint16_t const port = 12345;
|
||||
|
||||
int num_of_zlib_data = 2;
|
||||
int idx_zlib_data = 0;
|
||||
|
||||
// Server
|
||||
std::size_t const window_size = 11;
|
||||
boost::asio::ip::tcp::acceptor ac(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
|
||||
boost::asio::ip::tcp::socket ss(ios);
|
||||
std::function<void()> do_accept;
|
||||
std::function<void()> do_async_read_some;
|
||||
|
||||
// zlib for decompress
|
||||
z_stream strm;
|
||||
auto zlib_init = [&] {
|
||||
strm.zalloc = Z_NULL;
|
||||
strm.zfree = Z_NULL;
|
||||
strm.opaque = Z_NULL;
|
||||
strm.next_in = Z_NULL;
|
||||
{
|
||||
int zret = inflateInit(&strm);
|
||||
if (zret != Z_OK) {
|
||||
std::cout << "Zlib inflateInit() error = " << zret << std::endl;
|
||||
}
|
||||
}
|
||||
};
|
||||
zlib_init();
|
||||
std::vector<char> buf(4); // buf size
|
||||
|
||||
msgpack::unpacker unp;
|
||||
|
||||
do_accept = [&] {
|
||||
ac.async_accept(
|
||||
ss,
|
||||
[&]
|
||||
(boost::system::error_code const& e) {
|
||||
if (e) {
|
||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
||||
return;
|
||||
}
|
||||
do_async_read_some = [&] {
|
||||
ss.async_read_some(
|
||||
boost::asio::buffer(buf),
|
||||
[&](boost::system::error_code const& e, std::size_t bytes_transferred) {
|
||||
if (e) {
|
||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
||||
return;
|
||||
}
|
||||
std::cout << bytes_transferred << " bytes read." << std::endl;
|
||||
print(std::string(std::string(&buf[0], buf.size())));
|
||||
strm.avail_in = bytes_transferred;
|
||||
do {
|
||||
strm.next_in = reinterpret_cast<unsigned char*>(&buf[0]) + (bytes_transferred - strm.avail_in);
|
||||
int zret;
|
||||
unp.reserve_buffer(window_size);
|
||||
strm.avail_out = window_size;
|
||||
strm.next_out = reinterpret_cast<unsigned char*>(unp.buffer());
|
||||
do {
|
||||
zret = inflate(&strm, Z_NO_FLUSH);
|
||||
assert(zret != Z_STREAM_ERROR);
|
||||
switch (zret) {
|
||||
case Z_NEED_DICT:
|
||||
zret = Z_DATA_ERROR;
|
||||
// fall through
|
||||
case Z_DATA_ERROR:
|
||||
case Z_MEM_ERROR:
|
||||
inflateEnd(&strm);
|
||||
std::cout << "Zlib inflate() error = " << zret << std::endl;
|
||||
std::exit(-1);
|
||||
}
|
||||
std::size_t decompressed_size = window_size - strm.avail_out;
|
||||
std::cout << decompressed_size << " bytes decompressed." << std::endl;
|
||||
unp.buffer_consumed(decompressed_size);
|
||||
msgpack::object_handle oh;
|
||||
while (unp.next(oh)) {
|
||||
std::cout << oh.get() << std::endl;
|
||||
}
|
||||
} while (strm.avail_out == 0);
|
||||
if (zret == Z_STREAM_END) {
|
||||
inflateEnd(&strm);
|
||||
std::cout << "Zlib decompress finished." << std::endl;
|
||||
++idx_zlib_data;
|
||||
if (idx_zlib_data == num_of_zlib_data) {
|
||||
std::cout << "All zlib decompress finished." << std::endl;
|
||||
return;
|
||||
}
|
||||
zlib_init();
|
||||
}
|
||||
} while (strm.avail_in != 0);
|
||||
do_async_read_some();
|
||||
}
|
||||
);
|
||||
};
|
||||
do_async_read_some();
|
||||
}
|
||||
);
|
||||
};
|
||||
do_accept();
|
||||
|
||||
// Client
|
||||
auto host = "localhost";
|
||||
boost::asio::ip::tcp::resolver r(ios);
|
||||
boost::asio::ip::tcp::resolver::query q(host, boost::lexical_cast<std::string>(port));
|
||||
auto it = r.resolve(q);
|
||||
boost::asio::ip::tcp::socket cs(ios);
|
||||
boost::asio::async_connect(
|
||||
cs,
|
||||
it,
|
||||
[&]
|
||||
(boost::system::error_code const& e, boost::asio::ip::tcp::resolver::iterator) {
|
||||
if (e) {
|
||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
||||
return;
|
||||
}
|
||||
std::cout << __LINE__ << ":client connected" << std::endl;
|
||||
for (int i = 0; i != num_of_zlib_data; ++i) {
|
||||
msgpack::zbuffer zb;
|
||||
msgpack::pack(zb, std::make_tuple(i, false, "hello world", 12.3456));
|
||||
zb.flush(); // finalize zbuffer (don't forget it)
|
||||
print(std::string(zb.data(), zb.size()));
|
||||
write(cs, boost::asio::buffer(zb.data(), zb.size()));
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Start
|
||||
ios.run();
|
||||
}
|
@@ -22,7 +22,7 @@ void test()
|
||||
|
||||
msgpack_unpacked_init(&msg);
|
||||
|
||||
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos)) {
|
||||
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) {
|
||||
}
|
||||
|
||||
msgpack_sbuffer_destroy(&buf);
|
||||
|
@@ -23,7 +23,7 @@ void test()
|
||||
|
||||
msgpack_unpacked_init(&msg);
|
||||
|
||||
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos)) {
|
||||
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) {
|
||||
}
|
||||
|
||||
msgpack_sbuffer_destroy(&buf);
|
||||
|
@@ -69,7 +69,7 @@ struct object_with_zone<my_class> {
|
||||
o.type = type::ARRAY;
|
||||
o.via.array.size = 2;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(
|
||||
o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size));
|
||||
o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone);
|
||||
o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone);
|
||||
}
|
||||
|
@@ -40,7 +40,13 @@ struct json_like_visitor : msgpack::v2::null_visitor {
|
||||
m_s += ss.str();
|
||||
return true;
|
||||
}
|
||||
bool visit_float(double v) {
|
||||
bool visit_float32(float v) {
|
||||
std::stringstream ss;
|
||||
ss << v;
|
||||
m_s += ss.str();
|
||||
return true;
|
||||
}
|
||||
bool visit_float64(double v) {
|
||||
std::stringstream ss;
|
||||
ss << v;
|
||||
m_s += ss.str();
|
||||
|
16
include/msgpack/adaptor/cpp17/optional.hpp
Normal file
16
include/msgpack/adaptor/cpp17/optional.hpp
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// MessagePack for C++ static resolution routine
|
||||
//
|
||||
// Copyright (C) 2017 KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
|
||||
#ifndef MSGPACK_TYPE_CPP17_OPTIONAL_HPP
|
||||
#define MSGPACK_TYPE_CPP17_OPTIONAL_HPP
|
||||
|
||||
#include "msgpack/v1/adaptor/cpp17/optional.hpp"
|
||||
|
||||
#endif // MSGPACK_TYPE_CPP17_OPTIONAL_HPP
|
16
include/msgpack/adaptor/cpp17/string_view.hpp
Normal file
16
include/msgpack/adaptor/cpp17/string_view.hpp
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// MessagePack for C++ static resolution routine
|
||||
//
|
||||
// Copyright (C) 2017 KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
|
||||
#ifndef MSGPACK_TYPE_CPP17_STRING_VIEW_HPP
|
||||
#define MSGPACK_TYPE_CPP17_STRING_VIEW_HPP
|
||||
|
||||
#include "msgpack/v1/adaptor/cpp17/string_view.hpp"
|
||||
|
||||
#endif // MSGPACK_TYPE_CPP17_STRING_VIEW_HPP
|
@@ -84,7 +84,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>
|
||||
o.via.map.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
@@ -141,7 +141,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_multimap<K, V, Hash, Pred, Al
|
||||
o.via.map.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
|
@@ -82,7 +82,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
@@ -136,7 +136,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_multiset<T, Hash, Compare, Al
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -77,7 +77,7 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif defined(unix) || defined(__unix) || defined(__APPLE__)
|
||||
#elif defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
|
||||
|
||||
#include <arpa/inet.h> /* __BYTE_ORDER */
|
||||
# if defined(linux)
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
#if MSGPACK_ENDIAN_LITTLE_BYTE
|
||||
|
||||
# if defined(unix) || defined(__unix) || defined(__APPLE__)
|
||||
# if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
|
||||
# define _msgpack_be16(x) ntohs(x)
|
||||
# else
|
||||
# if defined(ntohs)
|
||||
@@ -102,7 +102,7 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if defined(unix) || defined(__unix) || defined(__APPLE__)
|
||||
# if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
|
||||
# define _msgpack_be32(x) ntohl(x)
|
||||
# else
|
||||
# if defined(ntohl)
|
||||
|
@@ -42,6 +42,13 @@
|
||||
#include "adaptor/cpp11/unordered_map.hpp"
|
||||
#include "adaptor/cpp11/unordered_set.hpp"
|
||||
|
||||
#if __cplusplus >= 201703
|
||||
|
||||
#include "adaptor/cpp17/optional.hpp"
|
||||
#include "adaptor/cpp17/string_view.hpp"
|
||||
|
||||
#endif // __cplusplus >= 201703
|
||||
|
||||
#endif // defined(MSGPACK_USE_CPP03)
|
||||
|
||||
#if defined(MSGPACK_USE_BOOST)
|
||||
|
@@ -253,7 +253,7 @@ struct object_with_zone<msgpack::type::array_ref<T> > {
|
||||
}
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
@@ -280,7 +280,7 @@ struct object_with_zone<msgpack::type::array_ref<T[N]> > {
|
||||
if (!v.data) { throw msgpack::type_error(); }
|
||||
o.type = msgpack::type::ARRAY;
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -15,6 +15,8 @@
|
||||
#include "msgpack/adaptor/check_container_size.hpp"
|
||||
#include "msgpack/meta.hpp"
|
||||
|
||||
#include "msgpack/adaptor/pair.hpp"
|
||||
|
||||
#if !defined (MSGPACK_USE_CPP03)
|
||||
#include "msgpack/adaptor/cpp11/tuple.hpp"
|
||||
#endif // #if !defined (MSGPACK_USE_CPP03)
|
||||
@@ -34,13 +36,54 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||
|
||||
namespace adaptor {
|
||||
|
||||
namespace detail {
|
||||
|
||||
template <typename T>
|
||||
struct is_std_pair {
|
||||
static bool const value = false;
|
||||
};
|
||||
|
||||
template <typename T, typename U>
|
||||
struct is_std_pair<std::pair<T, U> > {
|
||||
static bool const value = true;
|
||||
};
|
||||
|
||||
#if !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
template <typename T>
|
||||
struct is_std_tuple {
|
||||
static bool const value = false;
|
||||
};
|
||||
|
||||
template <typename... Args>
|
||||
struct is_std_tuple<std::tuple<Args...>> {
|
||||
static bool const value = true;
|
||||
};
|
||||
|
||||
#endif // !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
template <typename T>
|
||||
struct is_seq_no_pair_no_tuple {
|
||||
static bool const value =
|
||||
boost::fusion::traits::is_sequence<T>::value
|
||||
&&
|
||||
!is_std_pair<T>::value
|
||||
#if !defined (MSGPACK_USE_CPP03)
|
||||
&&
|
||||
!is_std_tuple<T>::value
|
||||
#endif // !defined (MSGPACK_USE_CPP03)
|
||||
;
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
#if !defined (MSGPACK_USE_CPP03)
|
||||
|
||||
template <typename T>
|
||||
struct as<
|
||||
T,
|
||||
typename msgpack::enable_if<
|
||||
boost::fusion::traits::is_sequence<T>::value &&
|
||||
detail::is_seq_no_pair_no_tuple<T>::value &&
|
||||
boost::mpl::fold<
|
||||
T,
|
||||
boost::mpl::bool_<true>,
|
||||
@@ -82,7 +125,7 @@ struct as<
|
||||
#endif // !defined (MSGPACK_USE_CPP03)
|
||||
|
||||
template <typename T>
|
||||
struct convert<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
||||
struct convert<T, typename msgpack::enable_if<detail::is_seq_no_pair_no_tuple<T>::value>::type > {
|
||||
msgpack::object const& operator()(msgpack::object const& o, T& v) const {
|
||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||
if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) {
|
||||
@@ -106,7 +149,7 @@ private:
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct pack<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
||||
struct pack<T, typename msgpack::enable_if<detail::is_seq_no_pair_no_tuple<T>::value>::type > {
|
||||
template <typename Stream>
|
||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const {
|
||||
uint32_t size = checked_get_container_size(boost::fusion::size(v));
|
||||
@@ -128,11 +171,11 @@ private:
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct object_with_zone<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
||||
struct object_with_zone<T, typename msgpack::enable_if<detail::is_seq_no_pair_no_tuple<T>::value>::type > {
|
||||
void operator()(msgpack::object::with_zone& o, const T& v) const {
|
||||
uint32_t size = checked_get_container_size(boost::fusion::size(v));
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = size;
|
||||
uint32_t count = 0;
|
||||
boost::fusion::for_each(v, with_zone_imp(o, count));
|
||||
|
@@ -151,7 +151,7 @@ struct object_with_zone<T[N]> {
|
||||
void operator()(msgpack::object::with_zone& o, const T(&v)[N]) const {
|
||||
uint32_t size = checked_get_container_size(N);
|
||||
o.type = msgpack::type::ARRAY;
|
||||
msgpack::object* ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object) * size));
|
||||
msgpack::object* ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object) * size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.ptr = ptr;
|
||||
o.via.array.size = size;
|
||||
const T* pv = v;
|
||||
@@ -169,7 +169,7 @@ struct object_with_zone<char[N]> {
|
||||
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
|
||||
uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
|
||||
o.type = msgpack::type::STR;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.str.ptr = ptr;
|
||||
o.via.str.size = adjusted_size;
|
||||
std::memcpy(ptr, p, adjusted_size);
|
||||
@@ -184,7 +184,7 @@ struct object_with_zone<const char[N]> {
|
||||
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
|
||||
uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
|
||||
o.type = msgpack::type::STR;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.str.ptr = ptr;
|
||||
o.via.str.size = adjusted_size;
|
||||
std::memcpy(ptr, p, adjusted_size);
|
||||
@@ -196,7 +196,7 @@ struct object_with_zone<unsigned char[N]> {
|
||||
void operator()(msgpack::object::with_zone& o, const unsigned char(&v)[N]) const {
|
||||
uint32_t size = checked_get_container_size(N);
|
||||
o.type = msgpack::type::BIN;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
o.via.bin.size = size;
|
||||
std::memcpy(ptr, v, size);
|
||||
@@ -208,7 +208,7 @@ struct object_with_zone<const unsigned char[N]> {
|
||||
void operator()(msgpack::object::with_zone& o, const unsigned char(&v)[N]) const {
|
||||
uint32_t size = checked_get_container_size(N);
|
||||
o.type = msgpack::type::BIN;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
o.via.bin.size = size;
|
||||
std::memcpy(ptr, v, size);
|
||||
|
@@ -41,7 +41,7 @@ struct object_with_zone<const char*> {
|
||||
void operator()(msgpack::object::with_zone& o, const char* v) const {
|
||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
||||
o.type = msgpack::type::STR;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.str.ptr = ptr;
|
||||
o.via.str.size = size;
|
||||
std::memcpy(ptr, v, size);
|
||||
|
@@ -119,7 +119,7 @@ struct object_with_zone<std::array<T, N>> {
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = size;
|
||||
o.via.array.ptr = p;
|
||||
for (auto const& e : v) *p++ = msgpack::object(e, o.zone);
|
||||
|
@@ -45,6 +45,13 @@ struct convert<std::array<char, N>> {
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct convert<std::array<char, 0>> {
|
||||
msgpack::object const& operator()(msgpack::object const& o, std::array<char, 0>&) const {
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
template <std::size_t N>
|
||||
struct pack<std::array<char, N>> {
|
||||
template <typename Stream>
|
||||
@@ -72,7 +79,7 @@ struct object_with_zone<std::array<char, N>> {
|
||||
void operator()(msgpack::object::with_zone& o, const std::array<char, N>& v) const {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
o.type = msgpack::type::BIN;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
o.via.bin.size = size;
|
||||
std::memcpy(ptr, v.data(), size);
|
||||
|
@@ -45,6 +45,13 @@ struct convert<std::array<unsigned char, N>> {
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct convert<std::array<unsigned char, 0>> {
|
||||
msgpack::object const& operator()(msgpack::object const& o, std::array<unsigned char, 0>&) const {
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
template <std::size_t N>
|
||||
struct pack<std::array<unsigned char, N>> {
|
||||
template <typename Stream>
|
||||
@@ -72,7 +79,7 @@ struct object_with_zone<std::array<unsigned char, N>> {
|
||||
void operator()(msgpack::object::with_zone& o, const std::array<unsigned char, N>& v) const {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
o.type = msgpack::type::BIN;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
o.via.bin.size = size;
|
||||
std::memcpy(ptr, v.data(), size);
|
||||
|
@@ -76,7 +76,7 @@ struct object_with_zone<std::forward_list<T, Alloc>> {
|
||||
uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end()));
|
||||
o.via.array.size = size;
|
||||
msgpack::object* p = static_cast<msgpack::object*>(
|
||||
o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.ptr = p;
|
||||
for(auto const& e : v) *p++ = msgpack::object(e, o.zone);
|
||||
}
|
||||
|
@@ -158,7 +158,7 @@ struct object_with_zone<std::tuple<Args...>> {
|
||||
std::tuple<Args...> const& v) const {
|
||||
uint32_t size = checked_get_container_size(sizeof...(Args));
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = size;
|
||||
StdTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
|
||||
}
|
||||
|
@@ -81,7 +81,7 @@ struct object_with_zone<std::unordered_map<K, V, Hash, Compare, Alloc>> {
|
||||
o.via.map.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
@@ -155,7 +155,7 @@ struct object_with_zone<std::unordered_multimap<K, V, Hash, Compare, Alloc>> {
|
||||
o.via.map.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
|
@@ -78,7 +78,7 @@ struct object_with_zone<std::unordered_set<Key, Hash, Compare, Alloc>> {
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
@@ -147,7 +147,7 @@ struct object_with_zone<std::unordered_multiset<Key, Hash, Compare, Alloc>> {
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
90
include/msgpack/v1/adaptor/cpp17/optional.hpp
Normal file
90
include/msgpack/v1/adaptor/cpp17/optional.hpp
Normal file
@@ -0,0 +1,90 @@
|
||||
//
|
||||
// MessagePack for C++ static resolution routine
|
||||
//
|
||||
// Copyright (C) 2017 KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#ifndef MSGPACK_V1_TYPE_OPTIONAL_HPP
|
||||
#define MSGPACK_V1_TYPE_OPTIONAL_HPP
|
||||
|
||||
#if __cplusplus >= 201703
|
||||
|
||||
#include "msgpack/versioning.hpp"
|
||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||
#include "msgpack/adaptor/check_container_size.hpp"
|
||||
|
||||
#include <optional>
|
||||
|
||||
namespace msgpack {
|
||||
|
||||
/// @cond
|
||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||
/// @endcond
|
||||
|
||||
namespace adaptor {
|
||||
|
||||
#if !defined (MSGPACK_USE_CPP03)
|
||||
|
||||
template <typename T>
|
||||
struct as<std::optional<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||
std::optional<T> operator()(msgpack::object const& o) const {
|
||||
if(o.is_nil()) return std::nullopt;
|
||||
return o.as<T>();
|
||||
}
|
||||
};
|
||||
|
||||
#endif // !defined (MSGPACK_USE_CPP03)
|
||||
|
||||
template <typename T>
|
||||
struct convert<std::optional<T> > {
|
||||
msgpack::object const& operator()(msgpack::object const& o, std::optional<T>& v) const {
|
||||
if(o.is_nil()) v = std::nullopt;
|
||||
else {
|
||||
T t;
|
||||
msgpack::adaptor::convert<T>()(o, t);
|
||||
v = t;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct pack<std::optional<T> > {
|
||||
template <typename Stream>
|
||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::optional<T>& v) const {
|
||||
if (v) o.pack(*v);
|
||||
else o.pack_nil();
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct object<std::optional<T> > {
|
||||
void operator()(msgpack::object& o, const std::optional<T>& v) const {
|
||||
if (v) msgpack::adaptor::object<T>()(o, *v);
|
||||
else o.type = msgpack::type::NIL;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct object_with_zone<std::optional<T> > {
|
||||
void operator()(msgpack::object::with_zone& o, const std::optional<T>& v) const {
|
||||
if (v) msgpack::adaptor::object_with_zone<T>()(o, *v);
|
||||
else o.type = msgpack::type::NIL;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace adaptor
|
||||
|
||||
/// @cond
|
||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||
/// @endcond
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
#endif // __cplusplus >= 201703
|
||||
|
||||
#endif // MSGPACK_V1_TYPE_OPTIONAL_HPP
|
86
include/msgpack/v1/adaptor/cpp17/string_view.hpp
Normal file
86
include/msgpack/v1/adaptor/cpp17/string_view.hpp
Normal file
@@ -0,0 +1,86 @@
|
||||
//
|
||||
// MessagePack for C++ static resolution routine
|
||||
//
|
||||
// Copyright (C) 2017 KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#ifndef MSGPACK_V1_TYPE_STRING_VIEW_HPP
|
||||
#define MSGPACK_V1_TYPE_STRING_VIEW_HPP
|
||||
|
||||
#if __cplusplus >= 201703
|
||||
|
||||
#include "msgpack/versioning.hpp"
|
||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||
#include "msgpack/adaptor/check_container_size.hpp"
|
||||
|
||||
#include <string_view>
|
||||
|
||||
namespace msgpack {
|
||||
|
||||
/// @cond
|
||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||
/// @endcond
|
||||
|
||||
namespace adaptor {
|
||||
|
||||
template <>
|
||||
struct convert<std::string_view> {
|
||||
msgpack::object const& operator()(msgpack::object const& o, std::string_view& v) const {
|
||||
switch (o.type) {
|
||||
case msgpack::type::BIN:
|
||||
v = std::string_view(o.via.bin.ptr, o.via.bin.size);
|
||||
break;
|
||||
case msgpack::type::STR:
|
||||
v = std::string_view(o.via.str.ptr, o.via.str.size);
|
||||
break;
|
||||
default:
|
||||
throw msgpack::type_error();
|
||||
break;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct pack<std::string_view> {
|
||||
template <typename Stream>
|
||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::string_view& v) const {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
o.pack_str(size);
|
||||
o.pack_str_body(v.data(), size);
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct object<std::string_view> {
|
||||
void operator()(msgpack::object& o, const std::string_view& v) const {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
o.type = msgpack::type::STR;
|
||||
o.via.str.ptr = v.data();
|
||||
o.via.str.size = size;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct object_with_zone<std::string_view> {
|
||||
void operator()(msgpack::object::with_zone& o, const std::string_view& v) const {
|
||||
static_cast<msgpack::object&>(o) << v;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
} // namespace adaptor
|
||||
|
||||
/// @cond
|
||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||
/// @endcond
|
||||
|
||||
} // namespace msgpack
|
||||
|
||||
#endif // __cplusplus >= 201703
|
||||
|
||||
#endif // MSGPACK_V1_TYPE_STRING_VIEW_HPP
|
@@ -83,7 +83,7 @@ struct object_with_zone<std::deque<T, Alloc> > {
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -75,7 +75,7 @@ struct define_array<A0> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*1));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*1, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 1;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -118,7 +118,7 @@ struct define_array<A0, A1> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*2));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*2, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 2;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -167,7 +167,7 @@ struct define_array<A0, A1, A2> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*3));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*3, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 3;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -222,7 +222,7 @@ struct define_array<A0, A1, A2, A3> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*4));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*4, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 4;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -283,7 +283,7 @@ struct define_array<A0, A1, A2, A3, A4> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*5));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*5, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 5;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -350,7 +350,7 @@ struct define_array<A0, A1, A2, A3, A4, A5> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*6));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*6, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 6;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -423,7 +423,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*7));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*7, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 7;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -502,7 +502,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*8));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*8, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 8;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -587,7 +587,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*9));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*9, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 9;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -678,7 +678,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*10));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*10, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 10;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -775,7 +775,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*11));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*11, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 11;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -878,7 +878,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*12));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*12, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 12;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -987,7 +987,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*13));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*13, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 13;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1102,7 +1102,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*14));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*14, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 14;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1223,7 +1223,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*15));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*15, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 15;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1350,7 +1350,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*16));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*16, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 16;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1483,7 +1483,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*17));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*17, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 17;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1622,7 +1622,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*18));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*18, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 18;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1767,7 +1767,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*19));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*19, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 19;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -1918,7 +1918,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*20));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*20, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 20;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -2075,7 +2075,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*21));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*21, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 21;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -2238,7 +2238,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*22));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*22, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 22;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -2407,7 +2407,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*23));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*23, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 23;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -2582,7 +2582,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*24));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*24, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 24;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -2763,7 +2763,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*25));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*25, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 25;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -2950,7 +2950,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*26));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*26, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 26;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -3143,7 +3143,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*27));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*27, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 27;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -3342,7 +3342,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*28));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*28, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 28;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -3547,7 +3547,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*29));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*29, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 29;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -3758,7 +3758,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*30));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*30, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 30;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -3975,7 +3975,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*31));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*31, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 31;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
@@ -4198,7 +4198,7 @@ struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13,
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*32));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*32, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = 32;
|
||||
|
||||
o->via.array.ptr[0] = msgpack::object(a0, z);
|
||||
|
@@ -83,7 +83,7 @@ struct define_map<A0, A1> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*1));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*1, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 1;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -142,7 +142,7 @@ struct define_map<A0, A1, A2, A3> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*2));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*2, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 2;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -215,7 +215,7 @@ struct define_map<A0, A1, A2, A3, A4, A5> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*3));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*3, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 3;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -302,7 +302,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*4));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*4, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 4;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -403,7 +403,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*5));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*5, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 5;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -518,7 +518,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*6));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*6, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 6;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -647,7 +647,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*7));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*7, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 7;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -790,7 +790,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*8));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*8, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 8;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -947,7 +947,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*9));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*9, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 9;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -1118,7 +1118,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*10));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*10, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 10;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -1303,7 +1303,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*11));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*11, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 11;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -1502,7 +1502,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*12));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*12, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 12;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -1715,7 +1715,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*13));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*13, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 13;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -1942,7 +1942,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*14));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*14, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 14;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -2183,7 +2183,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*15));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*15, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 15;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
@@ -2438,7 +2438,7 @@ struct define_map<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A1
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*16));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*16, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = 16;
|
||||
|
||||
o->via.map.ptr[0].key = msgpack::object(a0, z);
|
||||
|
@@ -13506,7 +13506,7 @@ struct object_with_zone<type::tuple<A0> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*1));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*1, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 1;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13519,7 +13519,7 @@ struct object_with_zone<type::tuple<A0, A1> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 2;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13533,7 +13533,7 @@ struct object_with_zone<type::tuple<A0, A1, A2> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*3));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*3, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 3;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13548,7 +13548,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*4));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*4, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 4;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13564,7 +13564,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*5));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*5, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 5;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13581,7 +13581,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*6));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*6, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 6;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13599,7 +13599,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*7));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*7, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 7;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13618,7 +13618,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*8));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*8, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 8;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13638,7 +13638,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*9));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*9, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 9;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13659,7 +13659,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> > {
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*10));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*10, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 10;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13681,7 +13681,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*11));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*11, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 11;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13704,7 +13704,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*12));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*12, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 12;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13728,7 +13728,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*13));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*13, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 13;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13753,7 +13753,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*14));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*14, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 14;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13779,7 +13779,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*15));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*15, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 15;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13806,7 +13806,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*16));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*16, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 16;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13834,7 +13834,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*17));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*17, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 17;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13863,7 +13863,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*18));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*18, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 18;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13893,7 +13893,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*19));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*19, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 19;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13924,7 +13924,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*20));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*20, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 20;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13956,7 +13956,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*21));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*21, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 21;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -13989,7 +13989,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*22));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*22, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 22;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14023,7 +14023,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*23));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*23, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 23;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14058,7 +14058,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*24));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*24, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 24;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14094,7 +14094,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*25));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*25, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 25;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14131,7 +14131,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*26));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*26, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 26;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14169,7 +14169,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*27));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*27, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 27;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14208,7 +14208,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*28));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*28, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 28;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14248,7 +14248,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*29));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*29, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 29;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14289,7 +14289,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*30));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*30, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 30;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14331,7 +14331,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*31));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*31, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 31;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
@@ -14374,7 +14374,7 @@ struct object_with_zone<type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
|
||||
msgpack::object::with_zone& o,
|
||||
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*32));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*32, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = 32;
|
||||
|
||||
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);
|
||||
|
@@ -77,7 +77,7 @@ struct define_array {
|
||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||
{
|
||||
o->type = msgpack::type::ARRAY;
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*sizeof...(Args)));
|
||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*sizeof...(Args), MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o->via.array.size = sizeof...(Args);
|
||||
|
||||
define_array_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);
|
||||
|
@@ -83,7 +83,7 @@ struct define_map {
|
||||
{
|
||||
static_assert(sizeof...(Args) % 2 == 0, "");
|
||||
o->type = msgpack::type::MAP;
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*sizeof...(Args)/2));
|
||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*sizeof...(Args)/2, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
o->via.map.size = sizeof...(Args) / 2;
|
||||
|
||||
define_map_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);
|
||||
|
@@ -203,7 +203,7 @@ template <typename... Args>
|
||||
msgpack::object::with_zone& o,
|
||||
msgpack::type::tuple<Args...> const& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*sizeof...(Args)));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*sizeof...(Args), MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = sizeof...(Args);
|
||||
MsgpackTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
|
||||
}
|
||||
|
@@ -104,7 +104,7 @@ struct object_with_zone<msgpack::type::ext> {
|
||||
// size limit has already been checked at ext's constructor
|
||||
uint32_t size = v.size();
|
||||
o.type = msgpack::type::EXT;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size + 1));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size + 1, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.ext.ptr = ptr;
|
||||
o.via.ext.size = size;
|
||||
ptr[0] = static_cast<char>(v.type());
|
||||
|
@@ -81,7 +81,7 @@ struct object_with_zone<std::list<T, Alloc> > {
|
||||
}
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -109,7 +109,7 @@ struct object_with_zone<type::assoc_vector<K, V, Compare, Alloc> > {
|
||||
}
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
@@ -195,7 +195,7 @@ struct object_with_zone<std::map<K, V, Compare, Alloc> > {
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
@@ -288,7 +288,7 @@ struct object_with_zone<std::multimap<K, V, Compare, Alloc> > {
|
||||
}
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
|
@@ -64,7 +64,7 @@ template <typename T1, typename T2>
|
||||
struct object_with_zone<std::pair<T1, T2> > {
|
||||
void operator()(msgpack::object::with_zone& o, const std::pair<T1, T2>& v) const {
|
||||
o.type = msgpack::type::ARRAY;
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = 2;
|
||||
p[0] = msgpack::object(v.first, o.zone);
|
||||
|
@@ -87,7 +87,7 @@ struct object_with_zone<std::set<T, Compare, Alloc> > {
|
||||
}
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
@@ -163,7 +163,7 @@ struct object_with_zone<std::multiset<T, Compare, Alloc> > {
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -69,7 +69,7 @@ struct object_with_zone<std::string> {
|
||||
void operator()(msgpack::object::with_zone& o, const std::string& v) const {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
o.type = msgpack::type::STR;
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.str.ptr = ptr;
|
||||
o.via.str.size = size;
|
||||
std::memcpy(ptr, v.data(), v.size());
|
||||
|
@@ -84,7 +84,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>
|
||||
o.via.map.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
@@ -141,7 +141,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_multimap<K, V, Hash, Pred, Al
|
||||
o.via.map.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
msgpack::object_kv* const pend = p + size;
|
||||
o.via.map.ptr = p;
|
||||
o.via.map.size = size;
|
||||
|
@@ -82,7 +82,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
@@ -136,7 +136,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_multiset<T, Hash, Compare, Al
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -89,7 +89,7 @@ struct object_with_zone<std::vector<T, Alloc> > {
|
||||
}
|
||||
else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -65,7 +65,7 @@ struct object_with_zone<std::vector<bool, Alloc> > {
|
||||
o.via.array.size = 0;
|
||||
} else {
|
||||
uint32_t size = checked_get_container_size(v.size());
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
msgpack::object* const pend = p + size;
|
||||
o.via.array.ptr = p;
|
||||
o.via.array.size = size;
|
||||
|
@@ -96,7 +96,7 @@ struct object_with_zone<std::vector<char, Alloc> > {
|
||||
o.type = msgpack::type::BIN;
|
||||
o.via.bin.size = size;
|
||||
if (size != 0) {
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
std::memcpy(ptr, &v.front(), size);
|
||||
}
|
||||
|
@@ -96,7 +96,7 @@ struct object_with_zone<std::vector<unsigned char, Alloc> > {
|
||||
o.type = msgpack::type::BIN;
|
||||
o.via.bin.size = size;
|
||||
if (size != 0) {
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
std::memcpy(ptr, &v.front(), size);
|
||||
}
|
||||
|
@@ -223,7 +223,9 @@ private:
|
||||
template <typename T>
|
||||
static void object_delete(void* obj);
|
||||
|
||||
void* allocate_expand(size_t size);
|
||||
static char* get_aligned(char* ptr, size_t align);
|
||||
|
||||
char* allocate_expand(size_t size);
|
||||
private:
|
||||
zone(const zone&);
|
||||
zone& operator=(const zone&);
|
||||
@@ -233,37 +235,42 @@ inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_
|
||||
{
|
||||
}
|
||||
|
||||
inline void* zone::allocate_align(size_t size, size_t align)
|
||||
inline char* zone::get_aligned(char* ptr, size_t align)
|
||||
{
|
||||
char* aligned =
|
||||
return
|
||||
reinterpret_cast<char*>(
|
||||
reinterpret_cast<size_t>(
|
||||
(m_chunk_list.m_ptr + (align - 1))) / align * align);
|
||||
(ptr + (align - 1))) / align * align);
|
||||
}
|
||||
|
||||
inline void* zone::allocate_align(size_t size, size_t align)
|
||||
{
|
||||
char* aligned = get_aligned(m_chunk_list.m_ptr, align);
|
||||
size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr);
|
||||
if(m_chunk_list.m_free >= adjusted_size) {
|
||||
m_chunk_list.m_free -= adjusted_size;
|
||||
m_chunk_list.m_ptr += adjusted_size;
|
||||
return aligned;
|
||||
if (m_chunk_list.m_free < adjusted_size) {
|
||||
size_t enough_size = size + align - 1;
|
||||
char* ptr = allocate_expand(enough_size);
|
||||
aligned = get_aligned(ptr, align);
|
||||
adjusted_size = size + (aligned - m_chunk_list.m_ptr);
|
||||
}
|
||||
return reinterpret_cast<char*>(
|
||||
reinterpret_cast<size_t>(
|
||||
allocate_expand(size + (align - 1))) / align * align);
|
||||
m_chunk_list.m_free -= adjusted_size;
|
||||
m_chunk_list.m_ptr += adjusted_size;
|
||||
return aligned;
|
||||
}
|
||||
|
||||
inline void* zone::allocate_no_align(size_t size)
|
||||
{
|
||||
if(m_chunk_list.m_free < size) {
|
||||
return allocate_expand(size);
|
||||
}
|
||||
|
||||
char* ptr = m_chunk_list.m_ptr;
|
||||
if(m_chunk_list.m_free < size) {
|
||||
ptr = allocate_expand(size);
|
||||
}
|
||||
m_chunk_list.m_free -= size;
|
||||
m_chunk_list.m_ptr += size;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
inline void* zone::allocate_expand(size_t size)
|
||||
inline char* zone::allocate_expand(size_t size)
|
||||
{
|
||||
chunk_list* const cl = &m_chunk_list;
|
||||
|
||||
@@ -285,8 +292,8 @@ inline void* zone::allocate_expand(size_t size)
|
||||
|
||||
c->m_next = cl->m_head;
|
||||
cl->m_head = c;
|
||||
cl->m_free = sz - size;
|
||||
cl->m_ptr = ptr + size;
|
||||
cl->m_free = sz;
|
||||
cl->m_ptr = ptr;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
@@ -345,7 +352,7 @@ inline std::size_t aligned_size(
|
||||
template <typename T>
|
||||
T* zone::allocate()
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -364,7 +371,7 @@ T* zone::allocate()
|
||||
template <typename T, typename A1>
|
||||
T* zone::allocate(A1 a1)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -383,7 +390,7 @@ T* zone::allocate(A1 a1)
|
||||
template <typename T, typename A1, typename A2>
|
||||
T* zone::allocate(A1 a1, A2 a2)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -402,7 +409,7 @@ T* zone::allocate(A1 a1, A2 a2)
|
||||
template <typename T, typename A1, typename A2, typename A3>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -421,7 +428,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -440,7 +447,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -459,7 +466,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -478,7 +485,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -497,7 +504,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -516,7 +523,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -535,7 +542,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -554,7 +561,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9,
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -573,7 +580,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9,
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -592,7 +599,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9,
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -611,7 +618,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9,
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
@@ -630,7 +637,7 @@ T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9,
|
||||
template <typename T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
|
||||
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10, A11 a11, A12 a12, A13 a13, A14 a14, A15 a15)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
|
@@ -24,6 +24,14 @@
|
||||
#define MSGPACK_ZONE_ALIGN sizeof(void*)
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof(type)
|
||||
#else
|
||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof__(type)
|
||||
#endif
|
||||
// For a compiler that doesn't support __alignof__:
|
||||
// #define MSGPACK_ZONE_ALIGNOF(type) MSGPACK_ZONE_ALIGN
|
||||
|
||||
|
||||
namespace msgpack {
|
||||
|
||||
|
@@ -184,7 +184,6 @@ public:
|
||||
|
||||
void swap(zone& o);
|
||||
|
||||
|
||||
static void* operator new(std::size_t size)
|
||||
{
|
||||
void* p = ::malloc(size);
|
||||
@@ -220,44 +219,51 @@ private:
|
||||
template <typename T>
|
||||
static void object_delete(void* obj);
|
||||
|
||||
void* allocate_expand(size_t size);
|
||||
static char* get_aligned(char* ptr, size_t align);
|
||||
|
||||
char* allocate_expand(size_t size);
|
||||
};
|
||||
|
||||
inline zone::zone(size_t chunk_size) noexcept:m_chunk_size(chunk_size), m_chunk_list(m_chunk_size)
|
||||
{
|
||||
}
|
||||
|
||||
inline void* zone::allocate_align(size_t size, size_t align)
|
||||
inline char* zone::get_aligned(char* ptr, size_t align)
|
||||
{
|
||||
char* aligned =
|
||||
return
|
||||
reinterpret_cast<char*>(
|
||||
reinterpret_cast<size_t>(
|
||||
(m_chunk_list.m_ptr + (align - 1))) / align * align);
|
||||
(ptr + (align - 1))) / align * align);
|
||||
}
|
||||
|
||||
inline void* zone::allocate_align(size_t size, size_t align)
|
||||
{
|
||||
char* aligned = get_aligned(m_chunk_list.m_ptr, align);
|
||||
size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr);
|
||||
if(m_chunk_list.m_free >= adjusted_size) {
|
||||
m_chunk_list.m_free -= adjusted_size;
|
||||
m_chunk_list.m_ptr += adjusted_size;
|
||||
return aligned;
|
||||
if (m_chunk_list.m_free < adjusted_size) {
|
||||
size_t enough_size = size + align - 1;
|
||||
char* ptr = allocate_expand(enough_size);
|
||||
aligned = get_aligned(ptr, align);
|
||||
adjusted_size = size + (aligned - m_chunk_list.m_ptr);
|
||||
}
|
||||
return reinterpret_cast<char*>(
|
||||
reinterpret_cast<size_t>(
|
||||
allocate_expand(size + (align - 1))) / align * align);
|
||||
m_chunk_list.m_free -= adjusted_size;
|
||||
m_chunk_list.m_ptr += adjusted_size;
|
||||
return aligned;
|
||||
}
|
||||
|
||||
inline void* zone::allocate_no_align(size_t size)
|
||||
{
|
||||
if(m_chunk_list.m_free < size) {
|
||||
return allocate_expand(size);
|
||||
}
|
||||
|
||||
char* ptr = m_chunk_list.m_ptr;
|
||||
if(m_chunk_list.m_free < size) {
|
||||
ptr = allocate_expand(size);
|
||||
}
|
||||
m_chunk_list.m_free -= size;
|
||||
m_chunk_list.m_ptr += size;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
inline void* zone::allocate_expand(size_t size)
|
||||
inline char* zone::allocate_expand(size_t size)
|
||||
{
|
||||
chunk_list* const cl = &m_chunk_list;
|
||||
|
||||
@@ -279,8 +285,8 @@ inline void* zone::allocate_expand(size_t size)
|
||||
|
||||
c->m_next = cl->m_head;
|
||||
cl->m_head = c;
|
||||
cl->m_free = sz - size;
|
||||
cl->m_ptr = ptr + size;
|
||||
cl->m_free = sz;
|
||||
cl->m_ptr = ptr;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
@@ -329,7 +335,7 @@ inline void zone::undo_allocate(size_t size)
|
||||
template <typename T, typename... Args>
|
||||
T* zone::allocate(Args... args)
|
||||
{
|
||||
void* x = allocate_align(sizeof(T));
|
||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
||||
try {
|
||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
||||
} catch (...) {
|
||||
|
@@ -26,6 +26,14 @@
|
||||
#define MSGPACK_ZONE_ALIGN sizeof(void*)
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof(type)
|
||||
#else
|
||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof__(type)
|
||||
#endif
|
||||
// For a compiler that doesn't support __alignof__:
|
||||
// #define MSGPACK_ZONE_ALIGNOF(type) MSGPACK_ZONE_ALIGN
|
||||
|
||||
namespace msgpack {
|
||||
|
||||
/// @cond
|
||||
|
@@ -140,13 +140,17 @@ inline std::size_t aligned_zone_size(msgpack::object const& obj) {
|
||||
std::size_t s = 0;
|
||||
switch (obj.type) {
|
||||
case msgpack::type::ARRAY:
|
||||
s += sizeof(msgpack::object) * obj.via.array.size;
|
||||
s += msgpack::aligned_size(
|
||||
sizeof(msgpack::object) * obj.via.array.size,
|
||||
MSGPACK_ZONE_ALIGNOF(msgpack::object));
|
||||
for (uint32_t i = 0; i < obj.via.array.size; ++i) {
|
||||
s += msgpack::aligned_zone_size(obj.via.array.ptr[i]);
|
||||
}
|
||||
break;
|
||||
case msgpack::type::MAP:
|
||||
s += sizeof(msgpack::object_kv) * obj.via.map.size;
|
||||
s += msgpack::aligned_size(
|
||||
sizeof(msgpack::object_kv) * obj.via.map.size,
|
||||
MSGPACK_ZONE_ALIGNOF(msgpack::object_kv));
|
||||
for (uint32_t i = 0; i < obj.via.map.size; ++i) {
|
||||
s += msgpack::aligned_zone_size(obj.via.map.ptr[i].key);
|
||||
s += msgpack::aligned_zone_size(obj.via.map.ptr[i].val);
|
||||
@@ -154,13 +158,14 @@ inline std::size_t aligned_zone_size(msgpack::object const& obj) {
|
||||
break;
|
||||
case msgpack::type::EXT:
|
||||
s += msgpack::aligned_size(
|
||||
detail::add_ext_type_size<sizeof(std::size_t)>(obj.via.ext.size));
|
||||
detail::add_ext_type_size<sizeof(std::size_t)>(obj.via.ext.size),
|
||||
MSGPACK_ZONE_ALIGNOF(char));
|
||||
break;
|
||||
case msgpack::type::STR:
|
||||
s += msgpack::aligned_size(obj.via.str.size);
|
||||
s += msgpack::aligned_size(obj.via.str.size, MSGPACK_ZONE_ALIGNOF(char));
|
||||
break;
|
||||
case msgpack::type::BIN:
|
||||
s += msgpack::aligned_size(obj.via.bin.size);
|
||||
s += msgpack::aligned_size(obj.via.bin.size, MSGPACK_ZONE_ALIGNOF(char));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -320,7 +325,7 @@ struct object_with_zone<msgpack::object> {
|
||||
return;
|
||||
|
||||
case msgpack::type::STR: {
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(v.via.str.size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(v.via.str.size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.str.ptr = ptr;
|
||||
o.via.str.size = v.via.str.size;
|
||||
std::memcpy(ptr, v.via.str.ptr, v.via.str.size);
|
||||
@@ -328,7 +333,7 @@ struct object_with_zone<msgpack::object> {
|
||||
}
|
||||
|
||||
case msgpack::type::BIN: {
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(v.via.bin.size));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(v.via.bin.size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.bin.ptr = ptr;
|
||||
o.via.bin.size = v.via.bin.size;
|
||||
std::memcpy(ptr, v.via.bin.ptr, v.via.bin.size);
|
||||
@@ -336,7 +341,7 @@ struct object_with_zone<msgpack::object> {
|
||||
}
|
||||
|
||||
case msgpack::type::EXT: {
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(v.via.ext.size + 1));
|
||||
char* ptr = static_cast<char*>(o.zone.allocate_align(v.via.ext.size + 1, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
o.via.ext.ptr = ptr;
|
||||
o.via.ext.size = v.via.ext.size;
|
||||
std::memcpy(ptr, v.via.ext.ptr, v.via.ext.size + 1);
|
||||
@@ -344,7 +349,7 @@ struct object_with_zone<msgpack::object> {
|
||||
}
|
||||
|
||||
case msgpack::type::ARRAY:
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object) * v.via.array.size));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object) * v.via.array.size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
o.via.array.size = v.via.array.size;
|
||||
for (msgpack::object
|
||||
* po(o.via.array.ptr),
|
||||
@@ -357,7 +362,7 @@ struct object_with_zone<msgpack::object> {
|
||||
return;
|
||||
|
||||
case msgpack::type::MAP:
|
||||
o.via.map.ptr = (msgpack::object_kv*)o.zone.allocate_align(sizeof(msgpack::object_kv) * v.via.map.size);
|
||||
o.via.map.ptr = (msgpack::object_kv*)o.zone.allocate_align(sizeof(msgpack::object_kv) * v.via.map.size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv));
|
||||
o.via.map.size = v.via.map.size;
|
||||
for(msgpack::object_kv
|
||||
* po(o.via.map.ptr),
|
||||
|
@@ -117,7 +117,7 @@ struct unpack_array {
|
||||
if (size / sizeof(msgpack::object) != n) {
|
||||
throw msgpack::array_size_overflow("array size overflow");
|
||||
}
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(u.zone().allocate_align(size));
|
||||
o.via.array.ptr = static_cast<msgpack::object*>(u.zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -139,7 +139,7 @@ struct unpack_map {
|
||||
if (size / sizeof(msgpack::object_kv) != n) {
|
||||
throw msgpack::map_size_overflow("map size overflow");
|
||||
}
|
||||
o.via.map.ptr = static_cast<msgpack::object_kv*>(u.zone().allocate_align(size));
|
||||
o.via.map.ptr = static_cast<msgpack::object_kv*>(u.zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -164,7 +164,7 @@ inline void unpack_str(unpack_user& u, const char* p, uint32_t l, msgpack::objec
|
||||
}
|
||||
else {
|
||||
if (l > u.limit().str()) throw msgpack::str_size_overflow("str size overflow");
|
||||
char* tmp = static_cast<char*>(u.zone().allocate_align(l));
|
||||
char* tmp = static_cast<char*>(u.zone().allocate_align(l, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
std::memcpy(tmp, p, l);
|
||||
o.via.str.ptr = tmp;
|
||||
}
|
||||
@@ -180,7 +180,7 @@ inline void unpack_bin(unpack_user& u, const char* p, uint32_t l, msgpack::objec
|
||||
}
|
||||
else {
|
||||
if (l > u.limit().bin()) throw msgpack::bin_size_overflow("bin size overflow");
|
||||
char* tmp = static_cast<char*>(u.zone().allocate_align(l));
|
||||
char* tmp = static_cast<char*>(u.zone().allocate_align(l, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
std::memcpy(tmp, p, l);
|
||||
o.via.bin.ptr = tmp;
|
||||
}
|
||||
@@ -196,7 +196,7 @@ inline void unpack_ext(unpack_user& u, const char* p, std::size_t l, msgpack::ob
|
||||
}
|
||||
else {
|
||||
if (l > u.limit().ext()) throw msgpack::ext_size_overflow("ext size overflow");
|
||||
char* tmp = static_cast<char*>(u.zone().allocate_align(l));
|
||||
char* tmp = static_cast<char*>(u.zone().allocate_align(l, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
std::memcpy(tmp, p, l);
|
||||
o.via.ext.ptr = tmp;
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
//
|
||||
// MessagePack for C++ zero-copy buffer implementation
|
||||
//
|
||||
// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi
|
||||
// Copyright (C) 2008-2017 FURUHASHI Sadayuki and KONDO Takatoshi
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -22,7 +22,7 @@
|
||||
#endif
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
#ifndef _WIN32
|
||||
#if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
|
||||
#include <sys/uio.h>
|
||||
#else
|
||||
struct iovec {
|
||||
|
@@ -92,9 +92,15 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool visit_float(double v) {
|
||||
bool visit_float32(float v) {
|
||||
msgpack::object* obj = m_stack.back();
|
||||
obj->type = msgpack::type::FLOAT;
|
||||
obj->type = msgpack::type::FLOAT32;
|
||||
obj->via.f64 = v;
|
||||
return true;
|
||||
}
|
||||
bool visit_float64(double v) {
|
||||
msgpack::object* obj = m_stack.back();
|
||||
obj->type = msgpack::type::FLOAT64;
|
||||
obj->via.f64 = v;
|
||||
return true;
|
||||
}
|
||||
@@ -107,7 +113,7 @@ public:
|
||||
set_referenced(true);
|
||||
}
|
||||
else {
|
||||
char* tmp = static_cast<char*>(zone().allocate_align(size));
|
||||
char* tmp = static_cast<char*>(zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
std::memcpy(tmp, v, size);
|
||||
obj->via.str.ptr = tmp;
|
||||
}
|
||||
@@ -123,7 +129,7 @@ public:
|
||||
set_referenced(true);
|
||||
}
|
||||
else {
|
||||
char* tmp = static_cast<char*>(zone().allocate_align(size));
|
||||
char* tmp = static_cast<char*>(zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
std::memcpy(tmp, v, size);
|
||||
obj->via.bin.ptr = tmp;
|
||||
}
|
||||
@@ -139,7 +145,7 @@ public:
|
||||
set_referenced(true);
|
||||
}
|
||||
else {
|
||||
char* tmp = static_cast<char*>(zone().allocate_align(size));
|
||||
char* tmp = static_cast<char*>(zone().allocate_align(size, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
std::memcpy(tmp, v, size);
|
||||
obj->via.ext.ptr = tmp;
|
||||
}
|
||||
@@ -161,7 +167,7 @@ public:
|
||||
throw msgpack::array_size_overflow("array size overflow");
|
||||
}
|
||||
obj->via.array.ptr =
|
||||
static_cast<msgpack::object*>(m_zone->allocate_align(size));
|
||||
static_cast<msgpack::object*>(m_zone->allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
||||
}
|
||||
m_stack.push_back(obj->via.array.ptr);
|
||||
return true;
|
||||
@@ -192,7 +198,7 @@ public:
|
||||
throw msgpack::map_size_overflow("map size overflow");
|
||||
}
|
||||
obj->via.map.ptr =
|
||||
static_cast<msgpack::object_kv*>(m_zone->allocate_align(size));
|
||||
static_cast<msgpack::object_kv*>(m_zone->allocate_align(size, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
||||
}
|
||||
m_stack.push_back(reinterpret_cast<msgpack::object*>(obj->via.map.ptr));
|
||||
return true;
|
||||
|
@@ -32,7 +32,10 @@ struct null_visitor {
|
||||
bool visit_negative_integer(int64_t /*v*/) {
|
||||
return true;
|
||||
}
|
||||
bool visit_float(double /*v*/) {
|
||||
bool visit_float32(float /*v*/) {
|
||||
return true;
|
||||
}
|
||||
bool visit_float64(double /*v*/) {
|
||||
return true;
|
||||
}
|
||||
bool visit_str(const char* /*v*/, uint32_t /*size*/) {
|
||||
|
@@ -339,7 +339,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
|
||||
case MSGPACK_CS_FLOAT: {
|
||||
union { uint32_t i; float f; } mem;
|
||||
load<uint32_t>(mem.i, n);
|
||||
bool visret = holder().visitor().visit_float(mem.f);
|
||||
bool visret = holder().visitor().visit_float32(mem.f);
|
||||
parse_return upr = after_visit_proc(visret, off);
|
||||
if (upr != PARSE_CONTINUE) return upr;
|
||||
} break;
|
||||
@@ -352,7 +352,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
|
||||
// https://github.com/msgpack/msgpack-perl/pull/1
|
||||
mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
|
||||
#endif
|
||||
bool visret = holder().visitor().visit_float(mem.f);
|
||||
bool visret = holder().visitor().visit_float64(mem.f);
|
||||
parse_return upr = after_visit_proc(visret, off);
|
||||
if (upr != PARSE_CONTINUE) return upr;
|
||||
} break;
|
||||
|
@@ -20,6 +20,7 @@ namespace msgpack {
|
||||
MSGPACK_API_VERSION_NAMESPACE(v2) {
|
||||
/// @endcond
|
||||
|
||||
|
||||
struct zone_push_finalizer {
|
||||
zone_push_finalizer(msgpack::zone& z):m_z(&z) {}
|
||||
void set_zone(msgpack::zone& z) { m_z = &z; }
|
||||
|
@@ -298,7 +298,7 @@ const auto mp_object_def =
|
||||
auto& app_specific = x3::get<tag_app_specific>(ctx).get();
|
||||
union { uint32_t i; float f; } mem;
|
||||
mem.i = _attr(ctx);
|
||||
app_specific.vis.visit_float(mem.f);
|
||||
app_specific.vis.visit_float32(mem.f);
|
||||
}
|
||||
)
|
||||
]
|
||||
@@ -316,7 +316,7 @@ const auto mp_object_def =
|
||||
// https://github.com/msgpack/msgpack-perl/pull/1
|
||||
mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
|
||||
#endif
|
||||
app_specific.vis.visit_float(mem.f);
|
||||
app_specific.vis.visit_float64(mem.f);
|
||||
}
|
||||
)
|
||||
]
|
||||
|
@@ -1,3 +1,3 @@
|
||||
#define MSGPACK_VERSION_MAJOR 2
|
||||
#define MSGPACK_VERSION_MINOR 1
|
||||
#define MSGPACK_VERSION_REVISION 2
|
||||
#define MSGPACK_VERSION_REVISION 4
|
||||
|
@@ -13,7 +13,7 @@
|
||||
#include "zone.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(unix) || defined(__unix) || defined(__APPLE__)
|
||||
#if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
|
||||
#include <sys/uio.h>
|
||||
#else
|
||||
struct iovec {
|
||||
|
@@ -34,6 +34,7 @@ tar --append --file=$filename $prefix/COPYING
|
||||
tar --append --file=$filename $prefix/README
|
||||
tar --append --file=$filename $prefix/msgpack_vc8.sln
|
||||
tar --append --file=$filename $prefix/msgpack_vc8.vcproj
|
||||
tar --append --file=$filename $prefix/msgpack-config.cmake.in
|
||||
|
||||
rm -f $prefix
|
||||
|
||||
|
@@ -66,6 +66,12 @@ IF (MSGPACK_CXX11)
|
||||
)
|
||||
ENDIF ()
|
||||
|
||||
IF (MSGPACK_CXX17)
|
||||
LIST (APPEND check_PROGRAMS
|
||||
msgpack_cpp17.cpp
|
||||
)
|
||||
ENDIF ()
|
||||
|
||||
FOREACH (source_file ${check_PROGRAMS})
|
||||
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||
ADD_EXECUTABLE (
|
||||
|
@@ -212,4 +212,35 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con_def_con)
|
||||
|
||||
#endif // !defined(MSGPACK_USE_CPP03
|
||||
|
||||
#include <boost/fusion/include/std_pair.hpp>
|
||||
|
||||
TEST(MSGPACK_BOOST, fusion_pack_unpack_convert_pair)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::pair<bool, int> val1(false, 42);
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
std::pair<bool, int> val2 = oh.get().as<std::pair<bool, int> >();
|
||||
EXPECT_TRUE(val1.first == val2.first);
|
||||
EXPECT_TRUE(val1.second == val2.second);
|
||||
}
|
||||
|
||||
#if !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
#include <boost/fusion/include/std_tuple.hpp>
|
||||
|
||||
TEST(MSGPACK_BOOST, fusion_pack_unpack_convert_tuple)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::tuple<bool, int> val1(false, 42);
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
std::tuple<bool, int> val2 = oh.get().as<std::tuple<bool, int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
#endif // !defined(MSGPACK_USE_CPP03)
|
||||
|
||||
#endif // defined(MSGPACK_USE_BOOST)
|
||||
|
@@ -20,6 +20,10 @@ static void feed_file(msgpack::unpacker& pac, const char* path)
|
||||
|
||||
TEST(cases, format)
|
||||
{
|
||||
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
|
||||
msgpack::unpacker pac;
|
||||
msgpack::unpacker pac_compact;
|
||||
|
||||
@@ -34,4 +38,7 @@ TEST(cases, format)
|
||||
}
|
||||
|
||||
EXPECT_FALSE( pac_compact.next(oh) );
|
||||
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
|
||||
}
|
||||
|
@@ -523,7 +523,7 @@ TEST(MSGPACKC, simple_buffer_fixext_1byte_255)
|
||||
{
|
||||
const size_t size = 255;
|
||||
char buf[size];
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = i;
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
|
||||
|
||||
msgpack_sbuffer sbuf;
|
||||
msgpack_sbuffer_init(&sbuf);
|
||||
@@ -550,7 +550,7 @@ TEST(MSGPACKC, simple_buffer_fixext_2byte_256)
|
||||
{
|
||||
const size_t size = 256;
|
||||
char buf[size];
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = i;
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
|
||||
|
||||
msgpack_sbuffer sbuf;
|
||||
msgpack_sbuffer_init(&sbuf);
|
||||
@@ -577,7 +577,7 @@ TEST(MSGPACKC, simple_buffer_fixext_2byte_65535)
|
||||
{
|
||||
const size_t size = 65535;
|
||||
char buf[size];
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = i;
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
|
||||
|
||||
msgpack_sbuffer sbuf;
|
||||
msgpack_sbuffer_init(&sbuf);
|
||||
@@ -604,7 +604,7 @@ TEST(MSGPACKC, simple_buffer_fixext_4byte_65536)
|
||||
{
|
||||
const size_t size = 65536;
|
||||
char buf[size];
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = i;
|
||||
for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
|
||||
|
||||
msgpack_sbuffer sbuf;
|
||||
msgpack_sbuffer_init(&sbuf);
|
||||
@@ -776,7 +776,6 @@ TEST(MSGPACKC, simple_buffer_str_fix_l)
|
||||
EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
|
||||
EXPECT_EQ(str_size, obj.via.str.size);
|
||||
EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
|
||||
|
||||
msgpack_zone_destroy(&z);
|
||||
msgpack_sbuffer_destroy(&sbuf);
|
||||
@@ -975,7 +974,6 @@ TEST(MSGPACKC, simple_buffer_v4raw_fix_l)
|
||||
EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
|
||||
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
|
||||
EXPECT_EQ(str_size, obj.via.str.size);
|
||||
EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
|
||||
|
||||
msgpack_zone_destroy(&z);
|
||||
msgpack_sbuffer_destroy(&sbuf);
|
||||
|
207
test/msgpack_cpp17.cpp
Normal file
207
test/msgpack_cpp17.cpp
Normal file
@@ -0,0 +1,207 @@
|
||||
#include <msgpack.hpp>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#if !defined(MSGPACK_USE_CPP03) && __cplusplus >= 201703
|
||||
|
||||
// C++17
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_pack_convert_nil)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::optional<int> val1;
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
std::optional<int> val2 = oh.get().as<std::optional<int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_pack_convert_int)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::optional<int> val1 = 1;
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
std::optional<int> val2 = oh.get().as<std::optional<int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_pack_convert_vector)
|
||||
{
|
||||
typedef std::optional<std::vector<int> > ovi_t;
|
||||
std::stringstream ss;
|
||||
ovi_t val1;
|
||||
std::vector<int> v;
|
||||
v.push_back(1);
|
||||
v.push_back(2);
|
||||
v.push_back(3);
|
||||
val1 = v;
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
ovi_t val2 = oh.get().as<ovi_t>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_pack_convert_vector_optional)
|
||||
{
|
||||
typedef std::vector<std::optional<int> > voi_t;
|
||||
std::stringstream ss;
|
||||
voi_t val1;
|
||||
val1.resize(3);
|
||||
val1[0] = 1;
|
||||
val1[2] = 3;
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
voi_t val2 = oh.get().as<voi_t>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_object_nil)
|
||||
{
|
||||
std::optional<int> val1;
|
||||
msgpack::object obj(val1);
|
||||
std::optional<int> val2 = obj.as<std::optional<int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_object_int)
|
||||
{
|
||||
std::optional<int> val1 = 1;
|
||||
msgpack::object obj(val1);
|
||||
std::optional<int> val2 = obj.as<std::optional<int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
// Compile error as expected
|
||||
/*
|
||||
TEST(MSGPACK_CPP17, optional_object_vector)
|
||||
{
|
||||
typedef std::optional<std::vector<int> > ovi_t;
|
||||
ovi_t val1;
|
||||
std::vector<int> v;
|
||||
v.push_back(1);
|
||||
v.push_back(2);
|
||||
v.push_back(3);
|
||||
val1 = v;
|
||||
msgpack::object obj(val1);
|
||||
ovi_t val2 = obj.as<ovi_t>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
*/
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_object_with_zone_nil)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::optional<int> val1;
|
||||
msgpack::object obj(val1, z);
|
||||
std::optional<int> val2 = obj.as<std::optional<int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_object_with_zone_int)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::optional<int> val1 = 1;
|
||||
msgpack::object obj(val1, z);
|
||||
std::optional<int> val2 = obj.as<std::optional<int> >();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_object_with_zone_vector_optional)
|
||||
{
|
||||
typedef std::vector<std::optional<int> > voi_t;
|
||||
msgpack::zone z;
|
||||
voi_t val1;
|
||||
val1.resize(3);
|
||||
val1[0] = 1;
|
||||
val1[2] = 3;
|
||||
msgpack::object obj(val1, z);
|
||||
voi_t val2 = obj.as<voi_t>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
struct no_def_con {
|
||||
no_def_con() = delete;
|
||||
no_def_con(int i):i(i) {}
|
||||
int i;
|
||||
MSGPACK_DEFINE(i);
|
||||
};
|
||||
|
||||
inline bool operator==(no_def_con const& lhs, no_def_con const& rhs) {
|
||||
return lhs.i == rhs.i;
|
||||
}
|
||||
|
||||
inline bool operator!=(no_def_con const& lhs, no_def_con const& rhs) {
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
|
||||
namespace msgpack {
|
||||
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
||||
namespace adaptor {
|
||||
|
||||
template <>
|
||||
struct as<no_def_con> {
|
||||
no_def_con operator()(msgpack::object const& o) const {
|
||||
if (o.type != msgpack::type::ARRAY) throw msgpack::type_error();
|
||||
if (o.via.array.size != 1) throw msgpack::type_error();
|
||||
return no_def_con(o.via.array.ptr[0].as<int>());
|
||||
}
|
||||
};
|
||||
|
||||
} // adaptor
|
||||
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
||||
} // msgpack
|
||||
|
||||
TEST(MSGPACK_CPP17, optional_pack_convert_no_def_con)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::optional<no_def_con> val1 = no_def_con(1);
|
||||
msgpack::pack(ss, val1);
|
||||
msgpack::object_handle oh =
|
||||
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
std::optional<no_def_con> val2 = oh.get().as<std::optional<no_def_con>>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, string_view_pack_convert_string_view)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::string s = "ABC";
|
||||
std::string_view val1(s);
|
||||
|
||||
msgpack::pack(ss, val1);
|
||||
|
||||
msgpack::object_handle oh;
|
||||
msgpack::unpack(oh, ss.str().data(), ss.str().size());
|
||||
std::string_view val2 = oh.get().as<std::string_view>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, string_view_object_strinf_view)
|
||||
{
|
||||
std::string s = "ABC";
|
||||
std::string_view val1(s);
|
||||
msgpack::object obj(val1);
|
||||
std::string_view val2 = obj.as<std::string_view>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
TEST(MSGPACK_CPP17, string_view_object_with_zone_string_view)
|
||||
{
|
||||
msgpack::zone z;
|
||||
std::string s = "ABC";
|
||||
std::string_view val1(s);
|
||||
msgpack::object obj(val1, z);
|
||||
std::string_view val2 = obj.as<std::string_view>();
|
||||
EXPECT_TRUE(val1 == val2);
|
||||
}
|
||||
|
||||
#endif // !defined(MSGPACK_USE_CPP03) && __cplusplus >= 201703
|
@@ -181,7 +181,7 @@ TEST(object, cross_zone_copy_ext)
|
||||
msgpack::object::with_zone obj1(z1);
|
||||
|
||||
obj1.type = msgpack::type::EXT;
|
||||
char* ptr = static_cast<char*>(obj1.zone.allocate_align(2));
|
||||
char* ptr = static_cast<char*>(obj1.zone.allocate_align(2, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
ptr[0] = 1;
|
||||
ptr[1] = 2;
|
||||
obj1.via.ext.ptr = ptr;
|
||||
@@ -204,7 +204,7 @@ TEST(object, cross_zone_copy_construct_ext)
|
||||
msgpack::object::with_zone obj1(z1);
|
||||
|
||||
obj1.type = msgpack::type::EXT;
|
||||
char* ptr = static_cast<char*>(obj1.zone.allocate_align(2));
|
||||
char* ptr = static_cast<char*>(obj1.zone.allocate_align(2, MSGPACK_ZONE_ALIGNOF(char)));
|
||||
ptr[0] = 1;
|
||||
ptr[1] = 2;
|
||||
obj1.via.ext.ptr = ptr;
|
||||
|
@@ -152,7 +152,7 @@ public:
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
|
||||
msgpack::type::tuple<bool, msgpack::object> tuple;
|
||||
msgpack::type::tuple<bool, msgpack::object> tuple(false, msgpack::object());
|
||||
o.convert(tuple);
|
||||
|
||||
is_double = tuple.get<0>();
|
||||
|
Reference in New Issue
Block a user