Compare commits

..

104 Commits

Author SHA1 Message Date
Takatoshi Kondo
7a98138f27 Merge pull request #625 from redboltz/update_to_215
Updated the version to 2.1.5.
2017-08-05 00:02:07 +09:00
Takatoshi Kondo
cd4e0bda57 Updated the version to 2.1.5.
Version 2.1.4 will be removed.
See https://github.com/msgpack/msgpack-c/issues/623
2017-08-04 23:07:27 +09:00
Takatoshi Kondo
1ad2db0c42 Merge pull request #624 from mkaes/master
Add defines for QNX build
2017-08-04 22:37:44 +09:00
Michael Kaes
96a76a7a5c Add defines for QNX build 2017-08-04 14:41:37 +02:00
Takatoshi Kondo
bc964bd847 Merge pull request #622 from redboltz/add_version_updater
Added version updating script.
2017-08-04 08:14:43 +09:00
Takatoshi Kondo
12604b5c8e Added version updating script. 2017-08-04 08:13:48 +09:00
Takatoshi Kondo
7c67109396 Updated README. 2017-08-04 07:18:17 +09:00
Takatoshi Kondo
fd4e28f23d Merge pull request #621 from redboltz/v2.1.4
Updated the version to 2.1.4.
2017-08-03 23:59:16 +09:00
Takatoshi Kondo
2098062613 Updated the version to 2.1.4. 2017-08-03 22:46:40 +09:00
Takatoshi Kondo
22bc707035 Merge pull request #619 from msgpack/fix_fusion_conflict
Fixed conflict between boost fusion sequence and std::tuple/std::pair.
2017-07-26 11:30:43 +09:00
Takatoshi Kondo
7ad743f2da Fixed conflict between boost fusion sequence and std::tuple/std::pair. 2017-07-26 10:24:17 +09:00
Takatoshi Kondo
315bbd4b40 Merge branch 'chshaob1-alignment' 2017-07-24 08:13:43 +09:00
Takatoshi Kondo
288a6b2e31 Fixed zone expansion algorithm. 2017-07-23 19:12:17 +09:00
Takatoshi Kondo
a0e4294b5a Set MSGPACK_ZONE_ALIGNOF(char) explicitly.
It makes efficient zone allocation.
If it was omitted, the default alignment was applied. It was inefficient.
2017-07-23 19:11:12 +09:00
Takatoshi Kondo
64baa15f8e Fixed aligned size. 2017-07-22 15:35:02 +09:00
Takatoshi Kondo
354ee5b9a3 Merge branch 'alignment' of https://github.com/chshaob1/msgpack-c into chshaob1-alignment 2017-07-22 15:28:12 +09:00
Takatoshi Kondo
2ddd79499c Merge pull request #617 from redboltz/partial_fix_460
Partially fixed #460.
2017-07-20 14:16:07 +09:00
Takatoshi Kondo
7f0614e998 Merge branch 'clarkli86-master' 2017-07-20 11:24:50 +09:00
Takatoshi Kondo
150d74508e Fixed msgpack_unpack_next(), C interface, return value. 2017-07-20 11:23:01 +09:00
Takatoshi Kondo
8674c821c4 Merge branch 'master' of https://github.com/clarkli86/msgpack-c into clarkli86-master 2017-07-20 11:18:38 +09:00
Takatoshi Kondo
10be66712d Partially fixed #460.
If msgpack-c compiles on "sparc" platform, then define
MSGPACK_ZONE_ALIGN=8 macro.
It allocates 8byte (64bit) alignment memory on zone allocating.
2017-07-20 11:00:16 +09:00
Clark Li
2698cfc254 Fix return type in C quickstart examples 2017-07-18 23:22:56 +09:30
Takatoshi Kondo
333ee98ab2 Merge pull request #613 from redboltz/fix_612
Fixed #612
2017-07-13 18:58:59 +09:00
Takatoshi Kondo
156e315394 Fixed #612
Removed visit_float() and added visit_float32() and visit_float64()
from/to unpack visitor.
2017-07-11 13:51:51 +09:00
Takatoshi Kondo
01fedf847b Merge pull request #611 from redboltz/fix_msvc_warning
Fixed msvc2015.
2017-07-04 08:49:56 +09:00
Takatoshi Kondo
56db4475f2 Fixed msvc2015. 2017-07-04 07:44:03 +09:00
Takatoshi Kondo
f065c2a447 Merge pull request #610 from redboltz/add_asio_examples
Added boost asio examples.
2017-07-03 22:48:55 +09:00
Takatoshi Kondo
ba4d8df63e Added boost asio examples. 2017-07-03 21:41:39 +09:00
Takatoshi Kondo
c00584281f Merge pull request #609 from redboltz/updated_to_2.1.3
Updated to version 2.1.3.
2017-06-15 23:58:21 +09:00
Takatoshi Kondo
45a0124ede Updated to version 2.1.3. 2017-06-15 22:37:33 +09:00
Takatoshi Kondo
ceb27348bd Merge pull request #608 from redboltz/add_cpp17_files
Added C++17 files to build setting.
2017-06-15 20:42:40 +09:00
Takatoshi Kondo
1ad737ee08 Added C++17 files to build setting. 2017-06-15 20:41:52 +09:00
Takatoshi Kondo
7024a1ec2c Merge pull request #607 from redboltz/fix_597
Solved #597.
2017-06-15 20:38:22 +09:00
Takatoshi Kondo
ca4a425a52 Merge pull request #602 from redboltz/fix_600
Fixed #600.
2017-06-15 16:08:24 +09:00
Takatoshi Kondo
a502097fd0 Solved #597.
Added `std::optional` and `std::string_view` adaptors.
2017-06-13 18:22:48 +09:00
Takatoshi Kondo
6b99a0c8b7 Merge branch 'jasperla-openbsd' 2017-06-13 12:51:27 +09:00
Takatoshi Kondo
1a3fcc3a22 Prevent iovec redefinition on C++. 2017-06-13 12:50:53 +09:00
Takatoshi Kondo
111739f8ce Merge branch 'openbsd' of https://github.com/jasperla/msgpack-c into jasperla-openbsd 2017-06-13 12:27:49 +09:00
Takatoshi Kondo
f638e2186b Merge pull request #605 from redboltz/fix_nonnull_warning
Fixed nonnull warnings on gcc 7.1.
2017-06-12 23:38:34 +09:00
Takatoshi Kondo
002376c678 Merge pull request #604 from redboltz/fix_gcc71_warning
Suppressed gcc 7.1 `maybe-uninitialized` warning.
2017-06-12 23:38:21 +09:00
Takatoshi Kondo
09a2f81b5f Merge pull request #603 from redboltz/add_missing_cmake_on_dist
Added a missing cmake file to makedist.sh.
2017-06-12 23:38:06 +09:00
Takatoshi Kondo
ffcaaeb482 Fixed #600.
Added `maybe-uninitialized` warning suppression code.
2017-06-12 15:33:05 +09:00
Takatoshi Kondo
bd511a4bd1 Fixed nonnull warnings on gcc 7.1. 2017-06-12 15:14:37 +09:00
Takatoshi Kondo
684c5e0bb0 Suppressed gcc 7.1 maybe-uninitialized warning.
When I execute cmake `-DMSGPACK_CXX11=OFF`, gcc 7.1 reports the warning.
I've already added the warning suppression pragma, but it doesn't work
in this case. So I added explicit initializing code even if it is redundant.
2017-06-12 14:11:21 +09:00
Takatoshi Kondo
8e74449181 Added a missing cmake file to makedist.sh. 2017-06-12 14:10:08 +09:00
Jasper Lievisse Adriaanse
f2b788e51f Sprinkle __OpenBSD__: include missing headers and prevent iovec redefinition 2017-06-11 18:13:10 +02:00
Takatoshi Kondo
7214b4c73f Merge pull request #599 from redboltz/fix_598
Fixed #598.
2017-06-08 20:44:21 +09:00
Takatoshi Kondo
a7a78bde9b Fixed #598. 2017-06-08 09:26:05 +00:00
Takatoshi Kondo
c50fbe4ce9 Merge pull request #595 from redboltz/ver_2.1.2
Updated the version to 2.1.2.
2017-06-07 13:23:23 +09:00
Takatoshi Kondo
d7d28b6f24 Updated the version to 2.1.2. 2017-06-06 12:26:09 +09:00
Takatoshi Kondo
5ebed34376 Merge pull request #592 from leolchat/master
Do not convert file everytime it is configured
2017-05-29 00:53:19 +09:00
Léonard Gérard
6871a82af7 Do not convert file everytime it is configured 2017-05-22 21:57:21 -07:00
Takatoshi Kondo
3f79968910 Merge branch 'herbrechtsmeier-ci' 2017-05-18 20:25:14 +09:00
Takatoshi Kondo
2e10adabb1 Removed X3_PARSE from osx build. 2017-05-18 19:47:53 +09:00
Takatoshi Kondo
0411ef85e7 Added warning supression pragma. 2017-05-15 16:52:29 +09:00
Takatoshi Kondo
28b6ee0db0 Updated clang version. 2017-05-15 15:55:52 +09:00
Takatoshi Kondo
3d0fa6043c Merge branch 'ci' of https://github.com/herbrechtsmeier/msgpack-c into herbrechtsmeier-ci 2017-05-15 13:57:06 +09:00
Stefan Herbrechtsmeier
ee169c4eb5 appveyor: Disable boost for non default compiler
The appveyor pre-installed software is only compiled with the default
compiler and couldn't be used with other compiler versions.

Signed-off-by: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
2017-05-13 00:58:10 +02:00
Stefan Herbrechtsmeier
0aaf95608f cmake: Make boost mandatory if MSGPACK_BOOST is ON
Signed-off-by: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
2017-05-13 00:57:03 +02:00
Stefan Herbrechtsmeier
918e7edba4 cmake: Add Boost library link directory
Signed-off-by: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
2017-05-13 00:56:19 +02:00
Takatoshi Kondo
88338195c0 Merge branch 'kraj-devtool' 2017-04-26 17:46:27 +09:00
Takatoshi Kondo
e90231c865 Added 'fallthrough' comments to suppress gcc7 warnings. 2017-04-24 17:16:43 +09:00
Khem Raj
15d8bb6792 Comment intentional fallthrough in case statements
Fixes build with gcc7

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2017-04-22 08:53:50 -07:00
Takatoshi Kondo
20ef1f925b Merge pull request #586 from jamessan/gcc-7-fix
Comment the intentional fallthrough to default from _fixed_trail_again
2017-04-17 17:22:54 +09:00
Takatoshi Kondo
89b8f4ee13 Merge pull request #580 from herbrechtsmeier/config
Add cmake package config support
2017-04-17 16:38:29 +09:00
James McCoy
304ff96d04 Comment the intentional fallthrough to default from _fixed_trail_again
GCC 7 added a new diagnostic, -Wimplicit-fallthrough, which is enabled
with -Wextra that warns about implicitly falling through a case
statement.

    [  4%] Building C object CMakeFiles/msgpackc-static.dir/src/unpack.c.o
    /usr/lib/gcc-snapshot/bin/gcc   -I/home/jamessan/src/msgpack-c/. -I/home/jamessan/src/msgpack-c/include -I/home/jamessan/src/msgpack-c/build/include  -g -O2 -fdebug-prefix-map=/home/jamessan/src/msgpack-c=. -specs=/usr/share/dpkg/no-pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2   -Wall -Wextra -Werror -g -O3 -o CMakeFiles/msgpackc-static.dir/src/unpack.c.o   -c /home/jamessan/src/msgpack-c/src/unpack.c
    In file included from /home/jamessan/src/msgpack-c/src/unpack.c:283:0:
    /home/jamessan/src/msgpack-c/include/msgpack/unpack_template.h: In function 'template_execute':
    /home/jamessan/src/msgpack-c/include/msgpack/unpack_template.h:238:17: error: this statement may fall through [-Werror=implicit-fallthrough=]
                     ++p;
                     ^~~
    /home/jamessan/src/msgpack-c/include/msgpack/unpack_template.h:240:13: note: here
                 default:
                 ^~~~~~~
    cc1: all warnings being treated as errors

Adding the comment makes it explicit that the fallthrough is
intentional, so gcc doesn't complain.
2017-04-13 11:43:27 -04:00
Takatoshi Kondo
10c1917f22 Merge pull request #582 from qehgt/fix-winsock-already-included
Fix 'WinSock.h has already been included' compiler error.
2017-04-12 20:44:56 +09:00
Takatoshi Kondo
d85e731ab4 Merge pull request #585 from redboltz/fix_584
Fixed #584.
2017-04-12 19:02:24 +09:00
Takatoshi Kondo
d431e25257 Fixed #584.
Reset m_cs to MSGPACK_CS_HEADER after visitor called.
2017-04-11 12:29:12 +09:00
Stefan Herbrechtsmeier
3d82c2d651 Add cmake package config support
Add support for CMake find_package command to msgpack. The package
exports the two targets msgpackc-static and msgpackc if shared is
enabled. The CMake find_package command works after installation
of msgpack and during build of another project which adds msgpack
as sub project via add_subdirectory command.

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
2017-04-04 08:33:18 +02:00
Vasily Titskiy
2cbaa3a7db Fix 'WinSock.h has already been included' compiler error.
Fix compiler error if Boost.Asio & msgpack are used together on Windows
Platform
2017-03-29 11:48:29 -04:00
Takatoshi Kondo
bfc6e45a2f Merge pull request #579 from herbrechtsmeier/boost
Add boost include directories only if MSGPACK_BOOST is enabled
2017-03-25 18:11:53 +09:00
Takatoshi Kondo
e8fa6c1aee Merge pull request #578 from herbrechtsmeier/wildcard
Pass wildcard precision of snprintf as int
2017-03-25 18:10:49 +09:00
Takatoshi Kondo
d49bec4e11 Merge pull request #577 from herbrechtsmeier/posix
Detect POSIX compatiblity explicit
2017-03-25 18:10:01 +09:00
Stefan Herbrechtsmeier
004939e732 Pass wildcard precision of snprintf as int
Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
2017-03-22 13:05:47 +01:00
Stefan Herbrechtsmeier
09e8833d53 Add boost include directories only if MSGPACK_BOOST is enabled
Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
2017-03-22 13:04:03 +01:00
Stefan Herbrechtsmeier
9ed842c014 Detect POSIX compatiblity explicit
Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
2017-03-22 13:03:33 +01:00
Takatoshi Kondo
99c4d37a39 Merge pull request #574 from redboltz/fix_536
Fixed #536.
2017-03-16 08:21:49 +09:00
Takatoshi Kondo
4df2bdecda Fixed #536.
Replaced __GNUC_MINOR__ 6 with 7 for suppress maybe-uninitialized.
2017-03-15 21:30:07 +09:00
Takatoshi Kondo
597cd63121 Merge pull request #572 from speleo3/PATH-alias
CMake <= 2.8.11 compatibility
2017-03-12 11:14:42 +09:00
Thomas Holder
a51f33c02f CMake <= 2.8.11 compatibility
Keep compatible with cmake <= 2.8.11 by using the legacy PATH alias for
DIRECTORY with get_filename_component.
2017-03-08 21:45:13 -05:00
Takatoshi Kondo
88032f37e1 Merge pull request #570 from lluixhi/boost
Enable building against dynamically-linked Boost
2017-03-05 13:02:14 +09:00
Takatoshi Kondo
a76911a72c Merge pull request #569 from lluixhi/master
Make header install obey MSGPACK_ENABLE_CXX
2017-03-05 11:53:56 +09:00
Takatoshi Kondo
1bc27d72cc Merge pull request #568 from dstahlke/fix
Fixed spurious start_map_key/start_array_item calls
2017-03-05 11:02:05 +09:00
Aric Belsito
a6599e5fb4 Enable building against dynamically-linked Boost 2017-03-03 12:31:56 -08:00
Aric Belsito
791f55da35 Make header install obey MSGPACK_ENABLE_CXX 2017-03-03 12:25:55 -08:00
Dan L. Stahlke
e58b00016b Fixed spurious start_map_key/start_array_item calls 2017-03-03 09:00:15 -08:00
Takatoshi Kondo
b4fe698777 Merge pull request #565 from mongi3/patch-1
Minor fix to Quickstart (broke with 2.0)
2017-02-13 15:05:13 +09:00
mongi3
e89045cfcd Minor fix to Quickstart (broke with 2.0)
non reference version won't compile with 2.0 release.
2017-02-11 15:06:42 -07:00
Takatoshi Kondo
c6e6dbc608 Added string view to file list. 2017-02-04 20:17:37 +09:00
Takatoshi Kondo
e271cf2aed Merge pull request #563 from redboltz/ver2.1.1
Updated the version to 2.1.1.
2017-02-04 20:14:37 +09:00
Takatoshi Kondo
53e4bb92fe Updated the version to 2.1.1. 2017-02-04 19:04:14 +09:00
Takatoshi Kondo
303c1000c2 Merge pull request #562 from redboltz/fix_561
Fixed #561
2017-02-04 12:45:51 +09:00
Takatoshi Kondo
088ce946b9 Fixed #561
Fixed unpacker's buffer expansion logic.
2017-02-03 17:11:51 +09:00
Takatoshi Kondo
dc86adbf8e Merge pull request #558 from redboltz/add_boost_string_view
Added boost string_view adaptor.
2017-01-20 09:33:23 +09:00
Takatoshi Kondo
ad0cae30ad Merge pull request #559 from raeraex2/fix_compilation_warning
Fix compilation warnings about possible loss of data
2017-01-19 09:43:32 +09:00
raeraex2
bf3e2abc9e Update appveyor.yml
Updated zlib to 1.2.11
2017-01-17 23:22:18 +01:00
raeraex2
b7543e1386 Fix compilation warnings about possible loss of data 2017-01-17 22:16:05 +01:00
Takatoshi Kondo
1f515b3ae7 Added boost string_view adaptor. 2017-01-15 19:09:31 +09:00
Takatoshi Kondo
a933fa5892 Merge pull request #557 from obache/neatsrc/fix-char-subscripts-warnings
Make sure to pass `unsigned char` to `isprint()`
2017-01-13 14:15:15 +09:00
Takatoshi Kondo
a07622c276 Merge pull request #556 from obache/neatsrc/strip-cr
Strip unwanted CR before EOL
2017-01-12 20:47:35 +09:00
OBATA Akio
c955727d8c Make sure to pass unsigned char to isprint()
This change make safe for `char = signed char`.

As the spec, argment of `isprintf()` must be representabe as an
`unsigned char` (or equal to EOF, not expected here).
Additionally, some implementation define it as a macro using array,
then it cause warning "array subscript has type `char` [-Wchar-subscripts]"
with `char` argments.
2017-01-12 15:01:04 +09:00
OBATA Akio
094b70213a Strip unwanted CR before EOL 2017-01-12 14:35:51 +09:00
Beilu Shao
b4786711df alignment: use proper alignment size
Pass proper alignment size when use allocate_align(). This will
fix alignment trap issues on ARM.

Signed-off-by: Beilu Shao <beilushao@gmail.com>
2016-10-16 23:59:13 +02:00
92 changed files with 2692 additions and 412 deletions

View File

@@ -10,7 +10,7 @@ install:
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi
- if [ "$CXX" = "g++" ]; then export CXX="g++-6" CC="gcc-6"; fi - if [ "$CXX" = "g++" ]; then export CXX="g++-6" CC="gcc-6"; fi
- if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-3.7" CC="clang-3.7"; fi - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-3.9" CC="clang-3.9"; fi
#gtest #gtest
- wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip - wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
- unzip -q googletest-release-1.7.0.zip - unzip -q googletest-release-1.7.0.zip
@@ -27,7 +27,7 @@ install:
# valgrind # valgrind
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi
# boost # boost
- if [ "$BOOST" == "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.zip && unzip -q boost_1_63_0.zip && cd boost_1_63_0 && ./bootstrap.sh && ./b2 -j3 --prefix=${BASE}/usr --with-timer --with-chrono address-model=${ARCH} install > /dev/null && cd ..; fi - if [ "$BOOST" == "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.zip && unzip -q boost_1_63_0.zip && cd boost_1_63_0 && ./bootstrap.sh && ./b2 -j3 --prefix=${BASE}/usr --with-chrono --with-context --with-system --with-timer address-model=${ARCH} install > /dev/null && cd ..; fi
matrix: matrix:
include: include:
@@ -36,7 +36,7 @@ matrix:
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1" env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1"
- os: osx - os: osx
compiler: clang compiler: clang
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON" env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
- os: osx - os: osx
compiler: clang compiler: clang
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
@@ -50,7 +50,7 @@ matrix:
apt: apt:
sources: sources:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7 - llvm-toolchain-precise-3.9
- llvm-toolchain-precise - llvm-toolchain-precise
packages: packages:
- g++-multilib - g++-multilib
@@ -58,7 +58,7 @@ matrix:
- gcc-5-multilib - gcc-5-multilib
- g++-5-multilib - g++-5-multilib
- bzip2 - bzip2
- clang-3.7 - clang-3.9
- libc6-dbg - libc6-dbg
- os: linux - os: linux
compiler: clang compiler: clang
@@ -67,7 +67,7 @@ matrix:
apt: apt:
sources: sources:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7 - llvm-toolchain-precise-3.9
- llvm-toolchain-precise - llvm-toolchain-precise
packages: packages:
- g++-multilib - g++-multilib
@@ -79,7 +79,7 @@ matrix:
- libc6-i386 - libc6-i386
- lib32z1-dev - lib32z1-dev
- bzip2 - bzip2
- clang-3.7 - clang-3.9
- libc6-dbg - libc6-dbg
- os: linux - os: linux
compiler: clang compiler: clang
@@ -88,7 +88,7 @@ matrix:
apt: apt:
sources: sources:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7 - llvm-toolchain-precise-3.9
- llvm-toolchain-precise - llvm-toolchain-precise
packages: packages:
- g++-multilib - g++-multilib
@@ -96,7 +96,7 @@ matrix:
- gcc-5-multilib - gcc-5-multilib
- g++-5-multilib - g++-5-multilib
- bzip2 - bzip2
- clang-3.7 - clang-3.9
- libc6-dbg - libc6-dbg
- os: linux - os: linux
compiler: clang compiler: clang
@@ -105,7 +105,7 @@ matrix:
apt: apt:
sources: sources:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.7 - llvm-toolchain-precise-3.9
- llvm-toolchain-precise - llvm-toolchain-precise
packages: packages:
- g++-multilib - g++-multilib
@@ -117,7 +117,7 @@ matrix:
- libc6-i386 - libc6-i386
- lib32z1-dev - lib32z1-dev
- bzip2 - bzip2
- clang-3.7 - clang-3.9
- libc6-dbg - libc6-dbg
- os: linux - os: linux
compiler: gcc compiler: gcc

View File

@@ -1,3 +1,38 @@
# 2017-08-04 version 2.1.5
* Improve cross platform configuration (#624)
* 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-08-03 version 2.1.4 (Invalid)
* See https://github.com/msgpack/msgpack-c/issues/623
# 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)
* Fix empty map parse bug (#568)
* Improve build system (#569, #570, #572, #579, #591, #592)
* Remove some warnings (#574, #578, #586, #588)
* Improve cross platform configuration (#577, #582)
* Add cmake package config support (#580)
* Fix streaming unpack bug (#585)
# 2017-02-04 version 2.1.1
* Fix unpacker's buffer management bug (#561)
* Add boost string_view adaptor (#558)
* Remove some warnings (#557, #559)
* Improve coding style (#556)
# 2017-01-10 version 2.1.0 # 2017-01-10 version 2.1.0
## << breaking changes >> ## << breaking changes >>

View File

@@ -1,4 +1,4 @@
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.6) CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12)
IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR
(CMAKE_VERSION VERSION_EQUAL 3.1)) (CMAKE_VERSION VERSION_EQUAL 3.1))
@@ -50,7 +50,15 @@ IF (MSGPACK_USE_X3_PARSE)
ENDIF () ENDIF ()
ENDIF () ENDIF ()
ELSE () 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") IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
@@ -92,21 +100,20 @@ OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON)
IF (MSGPACK_BOOST) IF (MSGPACK_BOOST)
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}") SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}")
ENDIF () SET (Boost_USE_MULTITHREADED ON)
SET (Boost_USE_STATIC_RUNTIME OFF)
SET (Boost_USE_STATIC_LIBS ON) # only find static libs FIND_PACKAGE (Boost REQUIRED COMPONENTS chrono context system timer)
SET (Boost_USE_MULTITHREADED ON) INCLUDE_DIRECTORIES (
SET (Boost_USE_STATIC_RUNTIME OFF) ${Boost_INCLUDE_DIRS}
FIND_PACKAGE (Boost COMPONENTS chrono context timer system) )
IF (Boost_INCLUDE_DIRS) LINK_DIRECTORIES (
INCLUDE_DIRECTORIES ( ${Boost_LIBRARY_DIRS}
${Boost_INCLUDE_DIRS} )
) IF (MSGPACK_BOOST_DIR)
ENDIF () INCLUDE_DIRECTORIES (
IF (MSGPACK_BOOST_DIR) ${MSGPACK_BOOST_DIR}
INCLUDE_DIRECTORIES ( )
${MSGPACK_BOOST_DIR} ENDIF ()
)
ENDIF () ENDIF ()
IF (MSGPACK_CHAR_SIGN) IF (MSGPACK_CHAR_SIGN)
@@ -127,7 +134,7 @@ FOREACH (F ${PREDEF_FILES})
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT) FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT)
STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT})
STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT})
FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT}) FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT})
ENDFOREACH () ENDFOREACH ()
FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp) FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp)
@@ -137,7 +144,7 @@ FOREACH (F ${PREPROCESSOR_FILES})
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT) FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT)
STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT})
STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT})
FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT}) FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT})
ENDFOREACH () ENDFOREACH ()
FIND_PACKAGE (GTest) FIND_PACKAGE (GTest)
@@ -174,17 +181,20 @@ CONFIGURE_FILE (
@ONLY @ONLY
) )
INCLUDE_DIRECTORIES (
./
include/
${CMAKE_CURRENT_BINARY_DIR}/include/
)
IF (MSGPACK_ENABLE_SHARED) IF (MSGPACK_ENABLE_SHARED)
ADD_LIBRARY (msgpackc SHARED ADD_LIBRARY (msgpackc SHARED
${msgpackc_SOURCES} ${msgpackc_SOURCES}
${msgpackc_HEADERS} ${msgpackc_HEADERS}
) )
TARGET_INCLUDE_DIRECTORIES (msgpackc
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
ENDIF () ENDIF ()
ADD_LIBRARY (msgpackc-static STATIC ADD_LIBRARY (msgpackc-static STATIC
@@ -192,6 +202,20 @@ ADD_LIBRARY (msgpackc-static STATIC
${msgpackc_HEADERS} ${msgpackc_HEADERS}
) )
TARGET_INCLUDE_DIRECTORIES (msgpackc-static
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
IF (NOT MSGPACK_ENABLE_SHARED)
# Add alias for subdirectories
ADD_LIBRARY (msgpackc ALIAS msgpackc-static)
ENDIF ()
SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc") SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc")
IF (MSGPACK_ENABLE_SHARED) IF (MSGPACK_ENABLE_SHARED)
IF (MSVC) IF (MSVC)
@@ -235,7 +259,12 @@ ENDIF ()
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10") IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10")
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX) 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) IF (NOT DEFINED CMAKE_INSTALL_BINDIR)
SET(CMAKE_INSTALL_BINDIR bin) SET(CMAKE_INSTALL_BINDIR bin)
@@ -255,10 +284,15 @@ ELSE()
SET (MSGPACK_INSTALLTARGETS msgpackc-static) SET (MSGPACK_INSTALLTARGETS msgpackc-static)
ENDIF () ENDIF ()
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
FOREACH (file ${msgpackc_HEADERS})
GET_FILENAME_COMPONENT (dir ${file} PATH)
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
ENDFOREACH ()
IF (NOT MSVC) IF (NOT MSVC)
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
ENDIF () ENDIF ()
@@ -309,3 +343,39 @@ IF (DOXYGEN_FOUND)
DEPENDS doxygen_c doxygen_cpp DEPENDS doxygen_c doxygen_cpp
) )
ENDIF () ENDIF ()
INCLUDE (CMakePackageConfigHelpers)
SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpack")
WRITE_BASIC_PACKAGE_VERSION_FILE (
msgpack-config-version.cmake
VERSION ${VERSION}
COMPATIBILITY SameMajorVersion
)
IF (NOT CMAKE_VERSION VERSION_LESS 3.0)
EXPORT (EXPORT msgpack-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpack-targets.cmake"
)
ENDIF ()
CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
msgpack-config.cmake
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
)
INSTALL (EXPORT msgpack-targets
FILE
msgpack-targets.cmake
DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}"
)
INSTALL (
FILES
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
DESTINATION
"${CMAKE_INSTALL_CMAKEDIR}"
)

View File

@@ -165,6 +165,7 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/adaptor/boost/optional.hpp include/msgpack/adaptor/boost/optional.hpp
include/msgpack/adaptor/boost/string_ref.hpp include/msgpack/adaptor/boost/string_ref.hpp
include/msgpack/adaptor/boost/string_view.hpp
include/msgpack/adaptor/carray.hpp include/msgpack/adaptor/carray.hpp
include/msgpack/adaptor/char_ptr.hpp include/msgpack/adaptor/char_ptr.hpp
include/msgpack/adaptor/check_container_size.hpp include/msgpack/adaptor/check_container_size.hpp
@@ -179,6 +180,8 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/adaptor/cpp11/unique_ptr.hpp include/msgpack/adaptor/cpp11/unique_ptr.hpp
include/msgpack/adaptor/cpp11/unordered_map.hpp include/msgpack/adaptor/cpp11/unordered_map.hpp
include/msgpack/adaptor/cpp11/unordered_set.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.hpp
include/msgpack/adaptor/define_decl.hpp include/msgpack/adaptor/define_decl.hpp
include/msgpack/adaptor/deque.hpp include/msgpack/adaptor/deque.hpp
@@ -512,6 +515,7 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/v1/adaptor/boost/optional.hpp include/msgpack/v1/adaptor/boost/optional.hpp
include/msgpack/v1/adaptor/boost/string_ref.hpp include/msgpack/v1/adaptor/boost/string_ref.hpp
include/msgpack/v1/adaptor/boost/string_view.hpp
include/msgpack/v1/adaptor/carray.hpp include/msgpack/v1/adaptor/carray.hpp
include/msgpack/v1/adaptor/char_ptr.hpp include/msgpack/v1/adaptor/char_ptr.hpp
include/msgpack/v1/adaptor/check_container_size.hpp include/msgpack/v1/adaptor/check_container_size.hpp
@@ -526,6 +530,8 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/v1/adaptor/cpp11/unique_ptr.hpp include/msgpack/v1/adaptor/cpp11/unique_ptr.hpp
include/msgpack/v1/adaptor/cpp11/unordered_map.hpp include/msgpack/v1/adaptor/cpp11/unordered_map.hpp
include/msgpack/v1/adaptor/cpp11/unordered_set.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.hpp
include/msgpack/v1/adaptor/define_decl.hpp include/msgpack/v1/adaptor/define_decl.hpp
include/msgpack/v1/adaptor/deque.hpp include/msgpack/v1/adaptor/deque.hpp

View File

@@ -96,7 +96,7 @@ int main(void) {
/* deserializes it. */ /* deserializes it. */
msgpack_unpacked msg; msgpack_unpacked msg;
msgpack_unpacked_init(&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. */ /* prints the deserialized object. */
msgpack_object obj = msg.data; msgpack_object obj = msg.data;
@@ -137,7 +137,7 @@ int main(void) {
/* deserializes it. */ /* deserializes it. */
msgpack_unpacked msg; msgpack_unpacked msg;
msgpack_unpacked_init(&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. */ /* prints the deserialized object. */
msgpack_object obj = msg.data; msgpack_object obj = msg.data;

View File

@@ -78,7 +78,7 @@ int main(void) {
// now starts streaming deserialization. // now starts streaming deserialization.
msgpack::object_handle oh; msgpack::object_handle oh;
while(pac.next(&oh)) { while(pac.next(oh)) {
std::cout << oh.get() << std::endl; std::cout << oh.get() << std::endl;
} }

View File

@@ -1,7 +1,7 @@
`msgpack` for C/C++ `msgpack` for C/C++
=================== ===================
Version 2.1.0 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) Version 2.1.5 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
It's like JSON but small and fast. It's like JSON but small and fast.

View File

@@ -1,15 +1,19 @@
version: 2.1.0.{build} version: 2.1.5.{build}
image:
- Visual Studio 2015
environment: environment:
global:
BOOST_ROOT: C:\Libraries\boost_1_60_0
matrix: matrix:
- cpp11: -DMSGPACK_CXX11=OFF - cpp11: -DMSGPACK_CXX11=OFF
boost: -DMSGPACK_BOOST=ON boost: -DMSGPACK_BOOST=OFF
msvc: '"Visual Studio 10 2010"' msvc: '"Visual Studio 10 2010"'
- cpp11: -DMSGPACK_CXX11=OFF - cpp11: -DMSGPACK_CXX11=OFF
boost: -DMSGPACK_BOOST=ON boost: -DMSGPACK_BOOST=OFF
msvc: '"Visual Studio 11 2012"' msvc: '"Visual Studio 11 2012"'
- cpp11: -DMSGPACK_CXX11=OFF - cpp11: -DMSGPACK_CXX11=OFF
boost: -DMSGPACK_BOOST=ON boost: -DMSGPACK_BOOST=OFF
msvc: '"Visual Studio 12 2013"' msvc: '"Visual Studio 12 2013"'
- cpp11: -DMSGPACK_CXX11=ON - cpp11: -DMSGPACK_CXX11=ON
boost: -DMSGPACK_BOOST=ON boost: -DMSGPACK_BOOST=ON
@@ -33,10 +37,10 @@ build_script:
- cmake --build . --config Release - cmake --build . --config Release
- cd .. - cd ..
- cd .. - cd ..
- appveyor DownloadFile http://zlib.net/zlib-1.2.10.tar.gz -FileName zlib-1.2.10.tar.gz - appveyor DownloadFile http://zlib.net/zlib-1.2.11.tar.gz -FileName zlib-1.2.11.tar.gz
- 7z x zlib-1.2.10.tar.gz > NUL - 7z x zlib-1.2.11.tar.gz > NUL
- 7z x zlib-1.2.10.tar > NUL - 7z x zlib-1.2.11.tar > NUL
- cd zlib-1.2.10 - cd zlib-1.2.11
- md build - md build
- cd build - cd build
- cmake -G %msvc% .. - cmake -G %msvc% ..
@@ -46,9 +50,9 @@ build_script:
- cd .. - cd ..
- md build - md build
- cd build - cd build
- cmake -G %msvc% %cpp11% %boost% %x3_parse% -DMSGPACK_BOOST_DIR=C:\Libraries\\boost_1_60_0 -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.10\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.10 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' .. - cmake -G %msvc% %cpp11% %boost% %x3_parse% -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' ..
- cmake --build . --config Release - cmake --build . --config Release
test_script: test_script:
- set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.10\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release
- ctest -V - ctest -V

View File

@@ -66,14 +66,16 @@ struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
msgpack::object *ptr = o.via.array.ptr; msgpack::object *ptr = o.via.array.ptr;
switch(size) { switch(size) {
default:<%(i).downto(0) {|j|%> default:<%(i).downto(0) {|j|%>
case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>);<%}%> case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>);
// fallthrough
<%}%>
} }
} }
} }
void msgpack_object(msgpack::object* o, msgpack::zone& z) const void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::ARRAY; 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%>; o->via.array.size = <%=i+1%>;
<%0.upto(i) {|j|%> <%0.upto(i) {|j|%>
o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%> o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%>

View File

@@ -82,7 +82,7 @@ struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
void msgpack_object(msgpack::object* o, msgpack::zone& z) const void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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%>; o->via.map.size = <%=(i+1)/2%>;
<%0.step(i,2) {|j|%> <%0.step(i,2) {|j|%>
o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z); o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z);

View File

@@ -207,7 +207,7 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
msgpack::object::with_zone& o, msgpack::object::with_zone& o,
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
o.type = msgpack::type::ARRAY; 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%>; o.via.array.size = <%=i+1%>;
<%0.upto(i) {|j|%> <%0.upto(i) {|j|%>
o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%>

View File

@@ -178,7 +178,9 @@ private:
template <typename T> template <typename T>
static void object_delete(void* obj); 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: private:
zone(const zone&); zone(const zone&);
zone& operator=(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<char*>(
reinterpret_cast<size_t>( 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); size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr);
if(m_chunk_list.m_free >= adjusted_size) { if (m_chunk_list.m_free < adjusted_size) {
m_chunk_list.m_free -= adjusted_size; size_t enough_size = size + align - 1;
m_chunk_list.m_ptr += adjusted_size; char* ptr = allocate_expand(enough_size);
return aligned; aligned = get_aligned(ptr, align);
adjusted_size = size + (aligned - m_chunk_list.m_ptr);
} }
return reinterpret_cast<char*>( m_chunk_list.m_free -= adjusted_size;
reinterpret_cast<size_t>( m_chunk_list.m_ptr += adjusted_size;
allocate_expand(size + (align - 1))) / align * align); return aligned;
} }
inline void* zone::allocate_no_align(size_t size) 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; 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_free -= size;
m_chunk_list.m_ptr += size; m_chunk_list.m_ptr += size;
return ptr; 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; 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; c->m_next = cl->m_head;
cl->m_head = c; cl->m_head = c;
cl->m_free = sz - size; cl->m_free = sz;
cl->m_ptr = ptr + size; cl->m_ptr = ptr;
return ptr; return ptr;
} }
@@ -300,7 +307,7 @@ inline std::size_t aligned_size(
template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } catch (...) {

View File

@@ -24,6 +24,14 @@
#define MSGPACK_ZONE_ALIGN sizeof(void*) #define MSGPACK_ZONE_ALIGN sizeof(void*)
#endif #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 %> <% GENERATION_LIMIT = 15 %>
namespace msgpack { namespace msgpack {

View File

@@ -3,6 +3,20 @@ IF (MSGPACK_BOOST)
msgpack_variant_capitalize.cpp msgpack_variant_capitalize.cpp
msgpack_variant_mapbased.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 () ENDIF ()
FOREACH (source_file ${exec_PROGRAMS}) FOREACH (source_file ${exec_PROGRAMS})
@@ -11,6 +25,19 @@ FOREACH (source_file ${exec_PROGRAMS})
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
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") 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") SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3")
ENDIF () ENDIF ()

View 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();
}

View 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();
}

View File

@@ -22,7 +22,7 @@ void test()
msgpack_unpacked_init(&msg); 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); msgpack_sbuffer_destroy(&buf);

View File

@@ -23,7 +23,7 @@ void test()
msgpack_unpacked_init(&msg); 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); msgpack_sbuffer_destroy(&buf);

View File

@@ -22,7 +22,7 @@ IF (NOT MSVC)
) )
ENDIF () ENDIF ()
IF (Boost_TIMER_LIBRARY AND Boost_CHRONO_LIBRARY AND Boost_SYSTEM_LIBRARY) IF (MSGPACK_BOOST)
LIST (APPEND with_boost_lib_PROGRAMS LIST (APPEND with_boost_lib_PROGRAMS
speed_test.cpp speed_test.cpp
speed_test_nested_array.cpp speed_test_nested_array.cpp
@@ -35,6 +35,10 @@ FOREACH (source_file ${exec_PROGRAMS})
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 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") SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3")
ENDIF () ENDIF ()
@@ -53,6 +57,10 @@ FOREACH (source_file ${with_pthread_PROGRAMS})
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}
) )
@@ -78,6 +86,10 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS})
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${Boost_TIMER_LIBRARY} ${Boost_TIMER_LIBRARY}

View File

@@ -69,7 +69,7 @@ struct object_with_zone<my_class> {
o.type = type::ARRAY; o.type = type::ARRAY;
o.via.array.size = 2; o.via.array.size = 2;
o.via.array.ptr = static_cast<msgpack::object*>( 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[0] = msgpack::object(v.get_name(), o.zone);
o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone);
} }

View File

@@ -20,6 +20,10 @@ IF (MSGPACK_CXX11)
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 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 ") SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 ")
ENDIF () ENDIF ()

View File

@@ -7,7 +7,7 @@ IF (MSGPACK_USE_X3_PARSE)
unpack.cpp unpack.cpp
parse.cpp parse.cpp
) )
IF (Boost_CONTEXT_LIBRARY AND Boost_SYSTEM_LIBRARY AND CMAKE_THREAD_LIBS_INIT) IF (MSGPACK_BOOST)
LIST (APPEND with_boost_PROGRAMS LIST (APPEND with_boost_PROGRAMS
stream_unpack.cpp stream_unpack.cpp
) )
@@ -18,6 +18,10 @@ IF (MSGPACK_USE_X3_PARSE)
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 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 ") SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g ")
ENDIF () ENDIF ()
@@ -40,6 +44,10 @@ IF (MSGPACK_USE_X3_PARSE)
${source_file_we} ${source_file_we}
${source_file} ${source_file}
) )
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${Boost_CONTEXT_LIBRARY} ${Boost_CONTEXT_LIBRARY}
${Boost_SYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY}

View File

@@ -40,7 +40,13 @@ struct json_like_visitor : msgpack::v2::null_visitor {
m_s += ss.str(); m_s += ss.str();
return true; 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; std::stringstream ss;
ss << v; ss << v;
m_s += ss.str(); m_s += ss.str();

View File

@@ -21,8 +21,17 @@
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/coroutine2/all.hpp> #include <boost/coroutine2/all.hpp>
#if defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif // defined(__clang__)
#include <boost/spirit/home/support/multi_pass.hpp> #include <boost/spirit/home/support/multi_pass.hpp>
#if defined(__clang__)
#pragma GCC diagnostic pop
#endif // defined(__clang__)
namespace as = boost::asio; namespace as = boost::asio;
namespace x3 = boost::spirit::x3; namespace x3 = boost::spirit::x3;

View File

@@ -0,0 +1,15 @@
//
// 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_BOOST_STRING_VIEW_HPP
#define MSGPACK_TYPE_BOOST_STRING_VIEW_HPP
#include "msgpack/v1/adaptor/boost/string_view.hpp"
#endif // MSGPACK_TYPE_BOOST_STRING_VIEW_HPP

View 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

View 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

View File

@@ -84,7 +84,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>
o.via.map.size = 0; o.via.map.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; 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; o.via.map.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; o.via.map.size = size;

View File

@@ -82,7 +82,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; 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; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View File

@@ -45,6 +45,9 @@
#ifdef _WIN32 #ifdef _WIN32
# define _msgpack_atomic_counter_header <windows.h> # define _msgpack_atomic_counter_header <windows.h>
# if !defined(WIN32_LEAN_AND_MEAN)
# define WIN32_LEAN_AND_MEAN
# endif /* WIN32_LEAN_AND_MEAN */
typedef long _msgpack_atomic_counter_t; typedef long _msgpack_atomic_counter_t;
# define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr) # define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
# define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr) # define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
@@ -74,7 +77,7 @@
# endif # endif
# endif # endif
#else /* _*/ #elif defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
#include <arpa/inet.h> /* __BYTE_ORDER */ #include <arpa/inet.h> /* __BYTE_ORDER */
# if defined(linux) # if defined(linux)
@@ -85,34 +88,34 @@
#if MSGPACK_ENDIAN_LITTLE_BYTE #if MSGPACK_ENDIAN_LITTLE_BYTE
# ifdef _WIN32 # if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
# if defined(ntohs)
# define _msgpack_be16(x) ntohs(x) # define _msgpack_be16(x) ntohs(x)
# elif defined(_byteswap_ushort) || (defined(_MSC_VER) && _MSC_VER >= 1400)
# define _msgpack_be16(x) ((uint16_t)_byteswap_ushort((unsigned short)x))
# else
# define _msgpack_be16(x) ( \
((((uint16_t)x) << 8) ) | \
((((uint16_t)x) >> 8) ) )
# endif
# else # else
# define _msgpack_be16(x) ntohs(x) # if defined(ntohs)
# define _msgpack_be16(x) ntohs(x)
# elif defined(_byteswap_ushort) || (defined(_MSC_VER) && _MSC_VER >= 1400)
# define _msgpack_be16(x) ((uint16_t)_byteswap_ushort((unsigned short)x))
# else
# define _msgpack_be16(x) ( \
((((uint16_t)x) << 8) ) | \
((((uint16_t)x) >> 8) ) )
# endif
# endif # endif
# ifdef _WIN32 # if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
# if defined(ntohl) # define _msgpack_be32(x) ntohl(x)
# define _msgpack_be32(x) ntohl(x)
# elif defined(_byteswap_ulong) || (defined(_MSC_VER) && _MSC_VER >= 1400)
# define _msgpack_be32(x) ((uint32_t)_byteswap_ulong((unsigned long)x))
# else
# define _msgpack_be32(x) \
( ((((uint32_t)x) << 24) ) | \
((((uint32_t)x) << 8) & 0x00ff0000U ) | \
((((uint32_t)x) >> 8) & 0x0000ff00U ) | \
((((uint32_t)x) >> 24) ) )
# endif
# else # else
# define _msgpack_be32(x) ntohl(x) # if defined(ntohl)
# define _msgpack_be32(x) ntohl(x)
# elif defined(_byteswap_ulong) || (defined(_MSC_VER) && _MSC_VER >= 1400)
# define _msgpack_be32(x) ((uint32_t)_byteswap_ulong((unsigned long)x))
# else
# define _msgpack_be32(x) \
( ((((uint32_t)x) << 24) ) | \
((((uint32_t)x) << 8) & 0x00ff0000U ) | \
((((uint32_t)x) >> 8) & 0x0000ff00U ) | \
((((uint32_t)x) >> 24) ) )
# endif
# endif # endif
# if defined(_byteswap_uint64) || (defined(_MSC_VER) && _MSC_VER >= 1400) # if defined(_byteswap_uint64) || (defined(_MSC_VER) && _MSC_VER >= 1400)

View File

@@ -42,6 +42,13 @@
#include "adaptor/cpp11/unordered_map.hpp" #include "adaptor/cpp11/unordered_map.hpp"
#include "adaptor/cpp11/unordered_set.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) #endif // defined(MSGPACK_USE_CPP03)
#if defined(MSGPACK_USE_BOOST) #if defined(MSGPACK_USE_BOOST)
@@ -50,5 +57,6 @@
#include "adaptor/boost/msgpack_variant.hpp" #include "adaptor/boost/msgpack_variant.hpp"
#include "adaptor/boost/optional.hpp" #include "adaptor/boost/optional.hpp"
#include "adaptor/boost/string_ref.hpp" #include "adaptor/boost/string_ref.hpp"
#include "adaptor/boost/string_view.hpp"
#endif // defined(MSGPACK_USE_BOOST) #endif // defined(MSGPACK_USE_BOOST)

View File

@@ -236,6 +236,7 @@ msgpack_unpack_func(int, _execute)(msgpack_unpack_struct(_context)* ctx, const c
_fixed_trail_again: _fixed_trail_again:
++p; ++p;
// fallthrough
default: default:
if((size_t)(pe - p) < trail) { goto _out; } if((size_t)(pe - p) < trail) { goto _out; }

View File

@@ -253,20 +253,20 @@ struct object_with_zone<msgpack::type::array_ref<T> > {
} }
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;
typename T::const_iterator it(v.data->begin()); typename T::const_iterator it(v.data->begin());
do { do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
*p = msgpack::object(*it, o.zone); *p = msgpack::object(*it, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p; ++p;
++it; ++it;
} while(p < pend); } while(p < pend);
@@ -280,7 +280,7 @@ struct object_with_zone<msgpack::type::array_ref<T[N]> > {
if (!v.data) { throw msgpack::type_error(); } if (!v.data) { throw msgpack::type_error(); }
o.type = msgpack::type::ARRAY; o.type = msgpack::type::ARRAY;
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View File

@@ -15,6 +15,8 @@
#include "msgpack/adaptor/check_container_size.hpp" #include "msgpack/adaptor/check_container_size.hpp"
#include "msgpack/meta.hpp" #include "msgpack/meta.hpp"
#include "msgpack/adaptor/pair.hpp"
#if !defined (MSGPACK_USE_CPP03) #if !defined (MSGPACK_USE_CPP03)
#include "msgpack/adaptor/cpp11/tuple.hpp" #include "msgpack/adaptor/cpp11/tuple.hpp"
#endif // #if !defined (MSGPACK_USE_CPP03) #endif // #if !defined (MSGPACK_USE_CPP03)
@@ -34,13 +36,54 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
namespace adaptor { 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) #if !defined (MSGPACK_USE_CPP03)
template <typename T> template <typename T>
struct as< struct as<
T, T,
typename msgpack::enable_if< typename msgpack::enable_if<
boost::fusion::traits::is_sequence<T>::value && detail::is_seq_no_pair_no_tuple<T>::value &&
boost::mpl::fold< boost::mpl::fold<
T, T,
boost::mpl::bool_<true>, boost::mpl::bool_<true>,
@@ -82,7 +125,7 @@ struct as<
#endif // !defined (MSGPACK_USE_CPP03) #endif // !defined (MSGPACK_USE_CPP03)
template <typename T> 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 { msgpack::object const& operator()(msgpack::object const& o, T& v) const {
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) { if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) {
@@ -106,7 +149,7 @@ private:
}; };
template <typename T> 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> template <typename Stream>
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const { msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const {
uint32_t size = checked_get_container_size(boost::fusion::size(v)); uint32_t size = checked_get_container_size(boost::fusion::size(v));
@@ -128,11 +171,11 @@ private:
}; };
template <typename T> 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 { void operator()(msgpack::object::with_zone& o, const T& v) const {
uint32_t size = checked_get_container_size(boost::fusion::size(v)); uint32_t size = checked_get_container_size(boost::fusion::size(v));
o.type = msgpack::type::ARRAY; 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; o.via.array.size = size;
uint32_t count = 0; uint32_t count = 0;
boost::fusion::for_each(v, with_zone_imp(o, count)); boost::fusion::for_each(v, with_zone_imp(o, count));

View File

@@ -0,0 +1,87 @@
//
// 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_BOOST_STRING_VIEW_HPP
#define MSGPACK_V1_TYPE_BOOST_STRING_VIEW_HPP
#include <boost/version.hpp>
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 61
#include "msgpack/versioning.hpp"
#include "msgpack/adaptor/adaptor_base.hpp"
#include "msgpack/adaptor/check_container_size.hpp"
#include <boost/utility/string_view.hpp>
namespace msgpack {
/// @cond
MSGPACK_API_VERSION_NAMESPACE(v1) {
/// @endcond
namespace adaptor {
template <>
struct convert<boost::string_view> {
msgpack::object const& operator()(msgpack::object const& o, boost::string_view& v) const {
switch (o.type) {
case msgpack::type::BIN:
v = boost::string_view(o.via.bin.ptr, o.via.bin.size);
break;
case msgpack::type::STR:
v = boost::string_view(o.via.str.ptr, o.via.str.size);
break;
default:
throw msgpack::type_error();
break;
}
return o;
}
};
template <>
struct pack<boost::string_view> {
template <typename Stream>
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::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<boost::string_view> {
void operator()(msgpack::object& o, const boost::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<boost::string_view> {
void operator()(msgpack::object::with_zone& o, const boost::string_view& v) const {
static_cast<msgpack::object&>(o) << v;
}
};
} // namespace adaptor
/// @cond
} // MSGPACK_API_VERSION_NAMESPACE(v1)
/// @endcond
} // namespace msgpack
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
#endif // MSGPACK_V1_TYPE_BOOST_STRING_VIEW_HPP

View File

@@ -101,7 +101,7 @@ struct pack<char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.pack_str(adjusted_size); o.pack_str(adjusted_size);
o.pack_str_body(p, adjusted_size); o.pack_str_body(p, adjusted_size);
return o; return o;
@@ -115,7 +115,7 @@ struct pack<const char[N]> {
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p = v; char const* p = v;
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.pack_str(adjusted_size); o.pack_str(adjusted_size);
o.pack_str_body(p, adjusted_size); o.pack_str_body(p, adjusted_size);
return o; return o;
@@ -151,7 +151,7 @@ struct object_with_zone<T[N]> {
void operator()(msgpack::object::with_zone& o, const T(&v)[N]) const { void operator()(msgpack::object::with_zone& o, const T(&v)[N]) const {
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
o.type = msgpack::type::ARRAY; 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.ptr = ptr;
o.via.array.size = size; o.via.array.size = size;
const T* pv = v; const T* pv = v;
@@ -167,9 +167,9 @@ struct object_with_zone<char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; 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.ptr = ptr;
o.via.str.size = adjusted_size; o.via.str.size = adjusted_size;
std::memcpy(ptr, p, adjusted_size); std::memcpy(ptr, p, adjusted_size);
@@ -182,9 +182,9 @@ struct object_with_zone<const char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; 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.ptr = ptr;
o.via.str.size = adjusted_size; o.via.str.size = adjusted_size;
std::memcpy(ptr, p, 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 { void operator()(msgpack::object::with_zone& o, const unsigned char(&v)[N]) const {
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
o.type = msgpack::type::BIN; 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.ptr = ptr;
o.via.bin.size = size; o.via.bin.size = size;
std::memcpy(ptr, v, 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 { void operator()(msgpack::object::with_zone& o, const unsigned char(&v)[N]) const {
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
o.type = msgpack::type::BIN; 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.ptr = ptr;
o.via.bin.size = size; o.via.bin.size = size;
std::memcpy(ptr, v, size); std::memcpy(ptr, v, size);
@@ -221,7 +221,7 @@ struct object<char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; o.type = msgpack::type::STR;
o.via.str.ptr = p; o.via.str.ptr = p;
o.via.str.size = adjusted_size; o.via.str.size = adjusted_size;
@@ -234,7 +234,7 @@ struct object<const char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; o.type = msgpack::type::STR;
o.via.str.ptr = p; o.via.str.ptr = p;
o.via.str.size = adjusted_size; o.via.str.size = adjusted_size;

View File

@@ -41,7 +41,7 @@ struct object_with_zone<const char*> {
void operator()(msgpack::object::with_zone& o, const char* v) const { void operator()(msgpack::object::with_zone& o, const char* v) const {
uint32_t size = checked_get_container_size(std::strlen(v)); uint32_t size = checked_get_container_size(std::strlen(v));
o.type = msgpack::type::STR; 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.ptr = ptr;
o.via.str.size = size; o.via.str.size = size;
std::memcpy(ptr, v, size); std::memcpy(ptr, v, size);

View File

@@ -119,7 +119,7 @@ struct object_with_zone<std::array<T, N>> {
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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.size = size;
o.via.array.ptr = p; o.via.array.ptr = p;
for (auto const& e : v) *p++ = msgpack::object(e, o.zone); for (auto const& e : v) *p++ = msgpack::object(e, o.zone);

View File

@@ -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> template <std::size_t N>
struct pack<std::array<char, N>> { struct pack<std::array<char, N>> {
template <typename Stream> 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 { void operator()(msgpack::object::with_zone& o, const std::array<char, N>& v) const {
uint32_t size = checked_get_container_size(v.size()); uint32_t size = checked_get_container_size(v.size());
o.type = msgpack::type::BIN; 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.ptr = ptr;
o.via.bin.size = size; o.via.bin.size = size;
std::memcpy(ptr, v.data(), size); std::memcpy(ptr, v.data(), size);

View File

@@ -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> template <std::size_t N>
struct pack<std::array<unsigned char, N>> { struct pack<std::array<unsigned char, N>> {
template <typename Stream> 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 { void operator()(msgpack::object::with_zone& o, const std::array<unsigned char, N>& v) const {
uint32_t size = checked_get_container_size(v.size()); uint32_t size = checked_get_container_size(v.size());
o.type = msgpack::type::BIN; 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.ptr = ptr;
o.via.bin.size = size; o.via.bin.size = size;
std::memcpy(ptr, v.data(), size); std::memcpy(ptr, v.data(), size);

View File

@@ -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())); uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end()));
o.via.array.size = size; o.via.array.size = size;
msgpack::object* p = static_cast<msgpack::object*>( 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; o.via.array.ptr = p;
for(auto const& e : v) *p++ = msgpack::object(e, o.zone); for(auto const& e : v) *p++ = msgpack::object(e, o.zone);
} }

View File

@@ -158,7 +158,7 @@ struct object_with_zone<std::tuple<Args...>> {
std::tuple<Args...> const& v) const { std::tuple<Args...> const& v) const {
uint32_t size = checked_get_container_size(sizeof...(Args)); uint32_t size = checked_get_container_size(sizeof...(Args));
o.type = msgpack::type::ARRAY; 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; o.via.array.size = size;
StdTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v); StdTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
} }

View File

@@ -81,7 +81,7 @@ struct object_with_zone<std::unordered_map<K, V, Hash, Compare, Alloc>> {
o.via.map.size = 0; o.via.map.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; 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; o.via.map.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; o.via.map.size = size;

View File

@@ -78,7 +78,7 @@ struct object_with_zone<std::unordered_set<Key, Hash, Compare, Alloc>> {
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; 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; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View 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

View 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

View File

@@ -83,7 +83,7 @@ struct object_with_zone<std::deque<T, Alloc> > {
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

File diff suppressed because it is too large Load Diff

View File

@@ -83,7 +83,7 @@ struct define_map<A0, A1> {
void msgpack_object(msgpack::object* o, msgpack::zone& z) const void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 1;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 2;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 3;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 4;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 5;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 6;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 7;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 8;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 9;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 10;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 11;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 12;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 13;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 14;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 15;
o->via.map.ptr[0].key = msgpack::object(a0, z); 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 void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::MAP; 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.size = 16;
o->via.map.ptr[0].key = msgpack::object(a0, z); o->via.map.ptr[0].key = msgpack::object(a0, z);

View File

@@ -13506,7 +13506,7 @@ struct object_with_zone<type::tuple<A0> > {
msgpack::object::with_zone& o, msgpack::object::with_zone& o,
const type::tuple<A0>& v) const { const type::tuple<A0>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 1;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1>& v) const { const type::tuple<A0, A1>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 2;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2>& v) const { const type::tuple<A0, A1, A2>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 3;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3>& v) const { const type::tuple<A0, A1, A2, A3>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 4;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4>& v) const { const type::tuple<A0, A1, A2, A3, A4>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 5;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 6;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 7;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 8;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 9;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 10;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 11;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 12;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const { const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>& v) const {
o.type = msgpack::type::ARRAY; 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.size = 13;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, msgpack::object::with_zone& o,
const type::tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>& v) const { 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.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.size = 14;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 15;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 16;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 17;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 18;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 19;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 20;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 21;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 22;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 23;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 24;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 25;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 26;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 27;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 28;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 29;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 30;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 31;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); 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, 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 { 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.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.size = 32;
o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone); o.via.array.ptr[0] = msgpack::object(v.template get<0>(), o.zone);

View File

@@ -77,7 +77,7 @@ struct define_array {
void msgpack_object(msgpack::object* o, msgpack::zone& z) const void msgpack_object(msgpack::object* o, msgpack::zone& z) const
{ {
o->type = msgpack::type::ARRAY; 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); o->via.array.size = sizeof...(Args);
define_array_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a); define_array_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);

View File

@@ -83,7 +83,7 @@ struct define_map {
{ {
static_assert(sizeof...(Args) % 2 == 0, ""); static_assert(sizeof...(Args) % 2 == 0, "");
o->type = msgpack::type::MAP; 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; o->via.map.size = sizeof...(Args) / 2;
define_map_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a); define_map_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);

View File

@@ -203,7 +203,7 @@ template <typename... Args>
msgpack::object::with_zone& o, msgpack::object::with_zone& o,
msgpack::type::tuple<Args...> const& v) const { msgpack::type::tuple<Args...> const& v) const {
o.type = msgpack::type::ARRAY; 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); o.via.array.size = sizeof...(Args);
MsgpackTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v); MsgpackTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
} }

View File

@@ -104,7 +104,7 @@ struct object_with_zone<msgpack::type::ext> {
// size limit has already been checked at ext's constructor // size limit has already been checked at ext's constructor
uint32_t size = v.size(); uint32_t size = v.size();
o.type = msgpack::type::EXT; 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.ptr = ptr;
o.via.ext.size = size; o.via.ext.size = size;
ptr[0] = static_cast<char>(v.type()); ptr[0] = static_cast<char>(v.type());

View File

@@ -81,7 +81,7 @@ struct object_with_zone<std::list<T, Alloc> > {
} }
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View File

@@ -109,7 +109,7 @@ struct object_with_zone<type::assoc_vector<K, V, Compare, Alloc> > {
} }
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; o.via.map.size = size;
@@ -195,21 +195,21 @@ struct object_with_zone<std::map<K, V, Compare, Alloc> > {
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; o.via.map.size = size;
typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin()); typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin());
do { do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
p->key = msgpack::object(it->first, o.zone); p->key = msgpack::object(it->first, o.zone);
p->val = msgpack::object(it->second, o.zone); p->val = msgpack::object(it->second, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p; ++p;
++it; ++it;
} while(p < pend); } while(p < pend);
@@ -288,7 +288,7 @@ struct object_with_zone<std::multimap<K, V, Compare, Alloc> > {
} }
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; o.via.map.size = size;

View File

@@ -64,7 +64,7 @@ template <typename T1, typename T2>
struct object_with_zone<std::pair<T1, T2> > { struct object_with_zone<std::pair<T1, T2> > {
void operator()(msgpack::object::with_zone& o, const std::pair<T1, T2>& v) const { void operator()(msgpack::object::with_zone& o, const std::pair<T1, T2>& v) const {
o.type = msgpack::type::ARRAY; 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.ptr = p;
o.via.array.size = 2; o.via.array.size = 2;
p[0] = msgpack::object(v.first, o.zone); p[0] = msgpack::object(v.first, o.zone);

View File

@@ -87,7 +87,7 @@ struct object_with_zone<std::set<T, Compare, Alloc> > {
} }
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;
@@ -163,7 +163,7 @@ struct object_with_zone<std::multiset<T, Compare, Alloc> > {
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View File

@@ -69,7 +69,7 @@ struct object_with_zone<std::string> {
void operator()(msgpack::object::with_zone& o, const std::string& v) const { void operator()(msgpack::object::with_zone& o, const std::string& v) const {
uint32_t size = checked_get_container_size(v.size()); uint32_t size = checked_get_container_size(v.size());
o.type = msgpack::type::STR; 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.ptr = ptr;
o.via.str.size = size; o.via.str.size = size;
std::memcpy(ptr, v.data(), v.size()); std::memcpy(ptr, v.data(), v.size());

View File

@@ -84,7 +84,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>
o.via.map.size = 0; o.via.map.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; 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; o.via.map.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object_kv* const pend = p + size;
o.via.map.ptr = p; o.via.map.ptr = p;
o.via.map.size = size; o.via.map.size = size;

View File

@@ -82,7 +82,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; 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; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View File

@@ -89,20 +89,20 @@ struct object_with_zone<std::vector<T, Alloc> > {
} }
else { else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;
typename std::vector<T, Alloc>::const_iterator it(v.begin()); typename std::vector<T, Alloc>::const_iterator it(v.begin());
do { do {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
*p = msgpack::object(*it, o.zone); *p = msgpack::object(*it, o.zone);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
++p; ++p;
++it; ++it;
} while(p < pend); } while(p < pend);

View File

@@ -65,7 +65,7 @@ struct object_with_zone<std::vector<bool, Alloc> > {
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
uint32_t size = checked_get_container_size(v.size()); 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; msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = size; o.via.array.size = size;

View File

@@ -32,27 +32,27 @@ struct convert<std::vector<char, Alloc> > {
case msgpack::type::BIN: case msgpack::type::BIN:
v.resize(o.via.bin.size); v.resize(o.via.bin.size);
if (o.via.bin.size != 0) { if (o.via.bin.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
} }
break; break;
case msgpack::type::STR: case msgpack::type::STR:
v.resize(o.via.str.size); v.resize(o.via.str.size);
if (o.via.str.size != 0) { if (o.via.str.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
} }
break; break;
default: default:
@@ -96,7 +96,7 @@ struct object_with_zone<std::vector<char, Alloc> > {
o.type = msgpack::type::BIN; o.type = msgpack::type::BIN;
o.via.bin.size = size; o.via.bin.size = size;
if (size != 0) { 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; o.via.bin.ptr = ptr;
std::memcpy(ptr, &v.front(), size); std::memcpy(ptr, &v.front(), size);
} }

View File

@@ -32,27 +32,27 @@ struct convert<std::vector<unsigned char, Alloc> > {
case msgpack::type::BIN: case msgpack::type::BIN:
v.resize(o.via.bin.size); v.resize(o.via.bin.size);
if (o.via.bin.size != 0) { if (o.via.bin.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size); std::memcpy(&v.front(), o.via.bin.ptr, o.via.bin.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
} }
break; break;
case msgpack::type::STR: case msgpack::type::STR:
v.resize(o.via.str.size); v.resize(o.via.str.size);
if (o.via.str.size != 0) { if (o.via.str.size != 0) {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size); std::memcpy(&v.front(), o.via.str.ptr, o.via.str.size);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
} }
break; break;
default: default:
@@ -96,7 +96,7 @@ struct object_with_zone<std::vector<unsigned char, Alloc> > {
o.type = msgpack::type::BIN; o.type = msgpack::type::BIN;
o.via.bin.size = size; o.via.bin.size = size;
if (size != 0) { 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; o.via.bin.ptr = ptr;
std::memcpy(ptr, &v.front(), size); std::memcpy(ptr, &v.front(), size);
} }

View File

@@ -223,7 +223,9 @@ private:
template <typename T> template <typename T>
static void object_delete(void* obj); 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: private:
zone(const zone&); zone(const zone&);
zone& operator=(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<char*>(
reinterpret_cast<size_t>( 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); size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr);
if(m_chunk_list.m_free >= adjusted_size) { if (m_chunk_list.m_free < adjusted_size) {
m_chunk_list.m_free -= adjusted_size; size_t enough_size = size + align - 1;
m_chunk_list.m_ptr += adjusted_size; char* ptr = allocate_expand(enough_size);
return aligned; aligned = get_aligned(ptr, align);
adjusted_size = size + (aligned - m_chunk_list.m_ptr);
} }
return reinterpret_cast<char*>( m_chunk_list.m_free -= adjusted_size;
reinterpret_cast<size_t>( m_chunk_list.m_ptr += adjusted_size;
allocate_expand(size + (align - 1))) / align * align); return aligned;
} }
inline void* zone::allocate_no_align(size_t size) 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; 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_free -= size;
m_chunk_list.m_ptr += size; m_chunk_list.m_ptr += size;
return ptr; 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; 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; c->m_next = cl->m_head;
cl->m_head = c; cl->m_head = c;
cl->m_free = sz - size; cl->m_free = sz;
cl->m_ptr = ptr + size; cl->m_ptr = ptr;
return ptr; return ptr;
} }
@@ -345,7 +352,7 @@ inline std::size_t aligned_size(
template <typename T> template <typename T>
T* zone::allocate() T* zone::allocate()
{ {
void* x = allocate_align(sizeof(T)); void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
try { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } catch (...) {
@@ -364,7 +371,7 @@ T* zone::allocate()
template <typename T, typename A1> template <typename T, typename A1>
T* zone::allocate(A1 a1) T* zone::allocate(A1 a1)
{ {
void* x = allocate_align(sizeof(T)); void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
try { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } catch (...) {
@@ -383,7 +390,7 @@ T* zone::allocate(A1 a1)
template <typename T, typename A1, typename A2> template <typename T, typename A1, typename A2>
T* zone::allocate(A1 a1, A2 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } catch (...) {
@@ -402,7 +409,7 @@ T* zone::allocate(A1 a1, A2 a2)
template <typename T, typename A1, typename A2, typename A3> template <typename T, typename A1, typename A2, typename A3>
T* zone::allocate(A1 a1, A2 a2, A3 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> template <typename T, typename A1, typename A2, typename A3, typename A4>
T* zone::allocate(A1 a1, A2 a2, A3 a3, A4 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } 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> 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) 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 { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } catch (...) {

View File

@@ -24,6 +24,14 @@
#define MSGPACK_ZONE_ALIGN sizeof(void*) #define MSGPACK_ZONE_ALIGN sizeof(void*)
#endif #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 { namespace msgpack {

View File

@@ -184,7 +184,6 @@ public:
void swap(zone& o); void swap(zone& o);
static void* operator new(std::size_t size) static void* operator new(std::size_t size)
{ {
void* p = ::malloc(size); void* p = ::malloc(size);
@@ -220,44 +219,51 @@ private:
template <typename T> template <typename T>
static void object_delete(void* obj); 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 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<char*>(
reinterpret_cast<size_t>( 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); size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr);
if(m_chunk_list.m_free >= adjusted_size) { if (m_chunk_list.m_free < adjusted_size) {
m_chunk_list.m_free -= adjusted_size; size_t enough_size = size + align - 1;
m_chunk_list.m_ptr += adjusted_size; char* ptr = allocate_expand(enough_size);
return aligned; aligned = get_aligned(ptr, align);
adjusted_size = size + (aligned - m_chunk_list.m_ptr);
} }
return reinterpret_cast<char*>( m_chunk_list.m_free -= adjusted_size;
reinterpret_cast<size_t>( m_chunk_list.m_ptr += adjusted_size;
allocate_expand(size + (align - 1))) / align * align); return aligned;
} }
inline void* zone::allocate_no_align(size_t size) 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; 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_free -= size;
m_chunk_list.m_ptr += size; m_chunk_list.m_ptr += size;
return ptr; 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; 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; c->m_next = cl->m_head;
cl->m_head = c; cl->m_head = c;
cl->m_free = sz - size; cl->m_free = sz;
cl->m_ptr = ptr + size; cl->m_ptr = ptr;
return ptr; return ptr;
} }
@@ -329,7 +335,7 @@ inline void zone::undo_allocate(size_t size)
template <typename T, typename... Args> template <typename T, typename... Args>
T* zone::allocate(Args... args) T* zone::allocate(Args... args)
{ {
void* x = allocate_align(sizeof(T)); void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
try { try {
m_finalizer_array.push(&zone::object_destruct<T>, x); m_finalizer_array.push(&zone::object_destruct<T>, x);
} catch (...) { } catch (...) {

View File

@@ -26,6 +26,14 @@
#define MSGPACK_ZONE_ALIGN sizeof(void*) #define MSGPACK_ZONE_ALIGN sizeof(void*)
#endif #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 { namespace msgpack {
/// @cond /// @cond

View File

@@ -140,13 +140,17 @@ inline std::size_t aligned_zone_size(msgpack::object const& obj) {
std::size_t s = 0; std::size_t s = 0;
switch (obj.type) { switch (obj.type) {
case msgpack::type::ARRAY: 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) { for (uint32_t i = 0; i < obj.via.array.size; ++i) {
s += msgpack::aligned_zone_size(obj.via.array.ptr[i]); s += msgpack::aligned_zone_size(obj.via.array.ptr[i]);
} }
break; break;
case msgpack::type::MAP: 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) { 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].key);
s += msgpack::aligned_zone_size(obj.via.map.ptr[i].val); 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; break;
case msgpack::type::EXT: case msgpack::type::EXT:
s += msgpack::aligned_size( 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; break;
case msgpack::type::STR: 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; break;
case msgpack::type::BIN: 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; break;
default: default:
break; break;
@@ -320,7 +325,7 @@ struct object_with_zone<msgpack::object> {
return; return;
case msgpack::type::STR: { 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.ptr = ptr;
o.via.str.size = v.via.str.size; o.via.str.size = v.via.str.size;
std::memcpy(ptr, v.via.str.ptr, 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: { 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.ptr = ptr;
o.via.bin.size = v.via.bin.size; o.via.bin.size = v.via.bin.size;
std::memcpy(ptr, v.via.bin.ptr, 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: { 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.ptr = ptr;
o.via.ext.size = v.via.ext.size; o.via.ext.size = v.via.ext.size;
std::memcpy(ptr, v.via.ext.ptr, v.via.ext.size + 1); 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: 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; o.via.array.size = v.via.array.size;
for (msgpack::object for (msgpack::object
* po(o.via.array.ptr), * po(o.via.array.ptr),
@@ -357,7 +362,7 @@ struct object_with_zone<msgpack::object> {
return; return;
case msgpack::type::MAP: 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; o.via.map.size = v.via.map.size;
for(msgpack::object_kv for(msgpack::object_kv
* po(o.via.map.ptr), * po(o.via.map.ptr),

View File

@@ -117,7 +117,7 @@ struct unpack_array {
if (size / sizeof(msgpack::object) != n) { if (size / sizeof(msgpack::object) != n) {
throw msgpack::array_size_overflow("array size overflow"); 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) { if (size / sizeof(msgpack::object_kv) != n) {
throw msgpack::map_size_overflow("map size overflow"); 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 { else {
if (l > u.limit().str()) throw msgpack::str_size_overflow("str size overflow"); 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); std::memcpy(tmp, p, l);
o.via.str.ptr = tmp; 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 { else {
if (l > u.limit().bin()) throw msgpack::bin_size_overflow("bin size overflow"); 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); std::memcpy(tmp, p, l);
o.via.bin.ptr = tmp; 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 { else {
if (l > u.limit().ext()) throw msgpack::ext_size_overflow("ext size overflow"); 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); std::memcpy(tmp, p, l);
o.via.ext.ptr = tmp; o.via.ext.ptr = tmp;
} }

View File

@@ -1,7 +1,7 @@
// //
// MessagePack for C++ zero-copy buffer implementation // 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. // Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at // (See accompanying file LICENSE_1_0.txt or copy at
@@ -22,7 +22,7 @@
#endif #endif
#endif // defined(_MSC_VER) #endif // defined(_MSC_VER)
#ifndef _WIN32 #if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
#include <sys/uio.h> #include <sys/uio.h>
#else #else
struct iovec { struct iovec {

View File

@@ -92,9 +92,15 @@ public:
} }
return true; return true;
} }
bool visit_float(double v) { bool visit_float32(float v) {
msgpack::object* obj = m_stack.back(); 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; obj->via.f64 = v;
return true; return true;
} }
@@ -107,7 +113,7 @@ public:
set_referenced(true); set_referenced(true);
} }
else { 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); std::memcpy(tmp, v, size);
obj->via.str.ptr = tmp; obj->via.str.ptr = tmp;
} }
@@ -123,7 +129,7 @@ public:
set_referenced(true); set_referenced(true);
} }
else { 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); std::memcpy(tmp, v, size);
obj->via.bin.ptr = tmp; obj->via.bin.ptr = tmp;
} }
@@ -139,7 +145,7 @@ public:
set_referenced(true); set_referenced(true);
} }
else { 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); std::memcpy(tmp, v, size);
obj->via.ext.ptr = tmp; obj->via.ext.ptr = tmp;
} }
@@ -161,7 +167,7 @@ public:
throw msgpack::array_size_overflow("array size overflow"); throw msgpack::array_size_overflow("array size overflow");
} }
obj->via.array.ptr = 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); m_stack.push_back(obj->via.array.ptr);
return true; return true;
@@ -192,7 +198,7 @@ public:
throw msgpack::map_size_overflow("map size overflow"); throw msgpack::map_size_overflow("map size overflow");
} }
obj->via.map.ptr = 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)); m_stack.push_back(reinterpret_cast<msgpack::object*>(obj->via.map.ptr));
return true; return true;

View File

@@ -32,7 +32,10 @@ struct null_visitor {
bool visit_negative_integer(int64_t /*v*/) { bool visit_negative_integer(int64_t /*v*/) {
return true; return true;
} }
bool visit_float(double /*v*/) { bool visit_float32(float /*v*/) {
return true;
}
bool visit_float64(double /*v*/) {
return true; return true;
} }
bool visit_str(const char* /*v*/, uint32_t /*size*/) { bool visit_str(const char* /*v*/, uint32_t /*size*/) {

View File

@@ -75,11 +75,15 @@ private:
} }
} }
else { else {
m_stack.push(sv.type(), static_cast<uint32_t>(size));
if (!sv(size)) { if (!sv(size)) {
off = m_current - m_start; off = m_current - m_start;
return PARSE_STOP_VISITOR; return PARSE_STOP_VISITOR;
} }
parse_return ret = m_stack.push(holder(), sv.type(), static_cast<uint32_t>(size));
if (ret != PARSE_CONTINUE) {
off = m_current - m_start;
return ret;
}
} }
m_cs = MSGPACK_CS_HEADER; m_cs = MSGPACK_CS_HEADER;
return PARSE_CONTINUE; return PARSE_CONTINUE;
@@ -92,12 +96,10 @@ private:
return PARSE_STOP_VISITOR; return PARSE_STOP_VISITOR;
} }
parse_return ret = m_stack.consume(holder()); parse_return ret = m_stack.consume(holder());
if (ret == PARSE_CONTINUE) { if (ret != PARSE_CONTINUE) {
m_cs = MSGPACK_CS_HEADER;
}
else {
off = m_current - m_start; off = m_current - m_start;
} }
m_cs = MSGPACK_CS_HEADER;
return ret; return ret;
} }
@@ -145,8 +147,19 @@ private:
unpack_stack() { unpack_stack() {
m_stack.reserve(MSGPACK_EMBED_STACK_SIZE); m_stack.reserve(MSGPACK_EMBED_STACK_SIZE);
} }
void push(msgpack_container_type type, uint32_t rest) { parse_return push(VisitorHolder& visitor_holder, msgpack_container_type type, uint32_t rest) {
m_stack.push_back(stack_elem(type, rest)); m_stack.push_back(stack_elem(type, rest));
switch (type) {
case MSGPACK_CT_ARRAY_ITEM:
return visitor_holder.visitor().start_array_item() ? PARSE_CONTINUE : PARSE_STOP_VISITOR;
case MSGPACK_CT_MAP_KEY:
return visitor_holder.visitor().start_map_key() ? PARSE_CONTINUE : PARSE_STOP_VISITOR;
case MSGPACK_CT_MAP_VALUE:
assert(0);
return PARSE_STOP_VISITOR;
}
assert(0);
return PARSE_STOP_VISITOR;
} }
parse_return consume(VisitorHolder& visitor_holder) { parse_return consume(VisitorHolder& visitor_holder) {
while (!m_stack.empty()) { while (!m_stack.empty()) {
@@ -287,11 +300,9 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
} else if(0x90 <= selector && selector <= 0x9f) { // FixArray } else if(0x90 <= selector && selector <= 0x9f) { // FixArray
parse_return ret = start_aggregate<fix_tag>(array_sv(holder()), array_ev(holder()), m_current, off); parse_return ret = start_aggregate<fix_tag>(array_sv(holder()), array_ev(holder()), m_current, off);
if (ret != PARSE_CONTINUE) return ret; if (ret != PARSE_CONTINUE) return ret;
if (!holder().visitor().start_array_item()) return PARSE_STOP_VISITOR;
} else if(0x80 <= selector && selector <= 0x8f) { // FixMap } else if(0x80 <= selector && selector <= 0x8f) { // FixMap
parse_return ret = start_aggregate<fix_tag>(map_sv(holder()), map_ev(holder()), m_current, off); parse_return ret = start_aggregate<fix_tag>(map_sv(holder()), map_ev(holder()), m_current, off);
if (ret != PARSE_CONTINUE) return ret; if (ret != PARSE_CONTINUE) return ret;
if (!holder().visitor().start_map_key()) return PARSE_STOP_VISITOR;
} else if(selector == 0xc2) { // false } else if(selector == 0xc2) { // false
bool visret = holder().visitor().visit_boolean(false); bool visret = holder().visitor().visit_boolean(false);
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
@@ -328,7 +339,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
case MSGPACK_CS_FLOAT: { case MSGPACK_CS_FLOAT: {
union { uint32_t i; float f; } mem; union { uint32_t i; float f; } mem;
load<uint32_t>(mem.i, n); 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); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
@@ -341,7 +352,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
// https://github.com/msgpack/msgpack-perl/pull/1 // https://github.com/msgpack/msgpack-perl/pull/1
mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL); mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
#endif #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); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
@@ -459,7 +470,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
load<uint8_t>(tmp, n); load<uint8_t>(tmp, n);
m_trail = tmp + 1; m_trail = tmp + 1;
if(m_trail == 0) { if(m_trail == 0) {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} }
@@ -501,7 +512,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
load<uint16_t>(tmp, n); load<uint16_t>(tmp, n);
m_trail = tmp + 1; m_trail = tmp + 1;
if(m_trail == 0) { if(m_trail == 0) {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} }
@@ -545,7 +556,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
m_trail = tmp; m_trail = tmp;
++m_trail; ++m_trail;
if(m_trail == 0) { if(m_trail == 0) {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} }
@@ -555,7 +566,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
} }
} break; } break;
case MSGPACK_ACS_STR_VALUE: { case MSGPACK_ACS_STR_VALUE: {
bool visret = holder().visitor().visit_str(n, m_trail); bool visret = holder().visitor().visit_str(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
@@ -565,30 +576,26 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
case MSGPACK_ACS_EXT_VALUE: { case MSGPACK_ACS_EXT_VALUE: {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
case MSGPACK_CS_ARRAY_16: { case MSGPACK_CS_ARRAY_16: {
parse_return ret = start_aggregate<uint16_t>(array_sv(holder()), array_ev(holder()), n, off); parse_return ret = start_aggregate<uint16_t>(array_sv(holder()), array_ev(holder()), n, off);
if (ret != PARSE_CONTINUE) return ret; if (ret != PARSE_CONTINUE) return ret;
if (!holder().visitor().start_array_item()) return PARSE_STOP_VISITOR;
} break; } break;
case MSGPACK_CS_ARRAY_32: { case MSGPACK_CS_ARRAY_32: {
parse_return ret = start_aggregate<uint32_t>(array_sv(holder()), array_ev(holder()), n, off); parse_return ret = start_aggregate<uint32_t>(array_sv(holder()), array_ev(holder()), n, off);
if (ret != PARSE_CONTINUE) return ret; if (ret != PARSE_CONTINUE) return ret;
if (!holder().visitor().start_array_item()) return PARSE_STOP_VISITOR;
} break; } break;
case MSGPACK_CS_MAP_16: { case MSGPACK_CS_MAP_16: {
parse_return ret = start_aggregate<uint16_t>(map_sv(holder()), map_ev(holder()), n, off); parse_return ret = start_aggregate<uint16_t>(map_sv(holder()), map_ev(holder()), n, off);
if (ret != PARSE_CONTINUE) return ret; if (ret != PARSE_CONTINUE) return ret;
if (!holder().visitor().start_map_key()) return PARSE_STOP_VISITOR;
} break; } break;
case MSGPACK_CS_MAP_32: { case MSGPACK_CS_MAP_32: {
parse_return ret = start_aggregate<uint32_t>(map_sv(holder()), map_ev(holder()), n, off); parse_return ret = start_aggregate<uint32_t>(map_sv(holder()), map_ev(holder()), n, off);
if (ret != PARSE_CONTINUE) return ret; if (ret != PARSE_CONTINUE) return ret;
if (!holder().visitor().start_map_key()) return PARSE_STOP_VISITOR;
} break; } break;
default: default:
off = m_current - m_start; off = m_current - m_start;
@@ -839,7 +846,7 @@ template <typename VisitorHolder, typename ReferencedBufferHook>
inline void parser<VisitorHolder, ReferencedBufferHook>::expand_buffer(std::size_t size) inline void parser<VisitorHolder, ReferencedBufferHook>::expand_buffer(std::size_t size)
{ {
if(m_used == m_off && detail::get_count(m_buffer) == 1 if(m_used == m_off && detail::get_count(m_buffer) == 1
&& static_cast<VisitorHolder&>(*this).visitor().referenced()) { && !static_cast<VisitorHolder&>(*this).visitor().referenced()) {
// rewind buffer // rewind buffer
m_free += m_used - COUNTER_SIZE; m_free += m_used - COUNTER_SIZE;
m_used = COUNTER_SIZE; m_used = COUNTER_SIZE;

View File

@@ -20,6 +20,7 @@ namespace msgpack {
MSGPACK_API_VERSION_NAMESPACE(v2) { MSGPACK_API_VERSION_NAMESPACE(v2) {
/// @endcond /// @endcond
struct zone_push_finalizer { struct zone_push_finalizer {
zone_push_finalizer(msgpack::zone& z):m_z(&z) {} zone_push_finalizer(msgpack::zone& z):m_z(&z) {}
void set_zone(msgpack::zone& z) { m_z = &z; } void set_zone(msgpack::zone& z) { m_z = &z; }

View File

@@ -298,7 +298,7 @@ const auto mp_object_def =
auto& app_specific = x3::get<tag_app_specific>(ctx).get(); auto& app_specific = x3::get<tag_app_specific>(ctx).get();
union { uint32_t i; float f; } mem; union { uint32_t i; float f; } mem;
mem.i = _attr(ctx); 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 // https://github.com/msgpack/msgpack-perl/pull/1
mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL); mem.i = (mem.i & 0xFFFFFFFFUL) << 32UL | (mem.i >> 32UL);
#endif #endif
app_specific.vis.visit_float(mem.f); app_specific.vis.visit_float64(mem.f);
} }
) )
] ]

View File

@@ -1,3 +1,3 @@
#define MSGPACK_VERSION_MAJOR 2 #define MSGPACK_VERSION_MAJOR 2
#define MSGPACK_VERSION_MINOR 1 #define MSGPACK_VERSION_MINOR 1
#define MSGPACK_VERSION_REVISION 0 #define MSGPACK_VERSION_REVISION 5

View File

@@ -13,7 +13,7 @@
#include "zone.h" #include "zone.h"
#include <stdlib.h> #include <stdlib.h>
#ifndef _WIN32 #if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__QNX__) || defined(__QNXTO__)
#include <sys/uio.h> #include <sys/uio.h>
#else #else
struct iovec { struct iovec {

View File

@@ -34,6 +34,7 @@ tar --append --file=$filename $prefix/COPYING
tar --append --file=$filename $prefix/README tar --append --file=$filename $prefix/README
tar --append --file=$filename $prefix/msgpack_vc8.sln tar --append --file=$filename $prefix/msgpack_vc8.sln
tar --append --file=$filename $prefix/msgpack_vc8.vcproj tar --append --file=$filename $prefix/msgpack_vc8.vcproj
tar --append --file=$filename $prefix/msgpack-config.cmake.in
rm -f $prefix rm -f $prefix

23
msgpack-config.cmake.in Normal file
View File

@@ -0,0 +1,23 @@
#.rst:
# msgpack
# -------
#
# The following import targets are created
#
# ::
#
# msgpackc-static
# msgpackc
#
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
if(NOT TARGET msgpackc AND NOT TARGET msgpackc-static)
include("${CMAKE_CURRENT_LIST_DIR}/msgpack-targets.cmake")
if(NOT @MSGPACK_ENABLE_SHARED@)
add_library(msgpackc ALIAS msgpackc-static)
endif()
endif()

View File

@@ -18,9 +18,9 @@
#include <inttypes.h> #include <inttypes.h>
#else #else
#define PRIu64 "I64u" #define PRIu64 "I64u"
#define PRIi64 "I64i" #define PRIi64 "I64i"
#define PRIi8 "i" #define PRIi8 "i"
#endif #endif
#else #else
#include <inttypes.h> #include <inttypes.h>
#endif #endif
@@ -122,7 +122,7 @@ static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
for (i = 0; i < size; ++i) { for (i = 0; i < size; ++i) {
if (ptr[i] == '"') { if (ptr[i] == '"') {
fputs("\\\"", out); fputs("\\\"", out);
} else if (isprint(ptr[i])) { } else if (isprint((unsigned char)ptr[i])) {
fputc(ptr[i], out); fputc(ptr[i], out);
} else { } else {
fprintf(out, "\\x%02x", (unsigned char)ptr[i]); fprintf(out, "\\x%02x", (unsigned char)ptr[i]);
@@ -142,7 +142,7 @@ static int msgpack_object_bin_print_buffer(char *buffer, size_t buffer_size, con
ret = snprintf(aux_buffer, aux_buffer_size, "\\\""); ret = snprintf(aux_buffer, aux_buffer_size, "\\\"");
aux_buffer = aux_buffer + ret; aux_buffer = aux_buffer + ret;
aux_buffer_size = aux_buffer_size - ret; aux_buffer_size = aux_buffer_size - ret;
} else if (isprint(ptr[i])) { } else if (isprint((unsigned char)ptr[i])) {
if (aux_buffer_size > 0) { if (aux_buffer_size > 0) {
memcpy(aux_buffer, ptr + i, 1); memcpy(aux_buffer, ptr + i, 1);
aux_buffer = aux_buffer + 1; aux_buffer = aux_buffer + 1;
@@ -339,7 +339,7 @@ int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object
ret = snprintf(aux_buffer, aux_buffer_size, "\""); ret = snprintf(aux_buffer, aux_buffer_size, "\"");
aux_buffer = aux_buffer + ret; aux_buffer = aux_buffer + ret;
aux_buffer_size = aux_buffer_size - ret; aux_buffer_size = aux_buffer_size - ret;
ret = snprintf(aux_buffer, aux_buffer_size, "%.*s", o.via.str.size, o.via.str.ptr); ret = snprintf(aux_buffer, aux_buffer_size, "%.*s", (int)o.via.str.size, o.via.str.ptr);
aux_buffer = aux_buffer + ret; aux_buffer = aux_buffer + ret;
aux_buffer_size = aux_buffer_size - ret; aux_buffer_size = aux_buffer_size - ret;
ret = snprintf(aux_buffer, aux_buffer_size, "\""); ret = snprintf(aux_buffer, aux_buffer_size, "\"");

View File

@@ -45,6 +45,7 @@ IF (MSGPACK_BOOST)
boost_variant.cpp boost_variant.cpp
boost_optional.cpp boost_optional.cpp
boost_string_ref.cpp boost_string_ref.cpp
boost_string_view.cpp
) )
ENDIF () ENDIF ()
@@ -65,10 +66,10 @@ IF (MSGPACK_CXX11)
) )
ENDIF () ENDIF ()
IF (MSGPACK_ENABLE_SHARED) IF (MSGPACK_CXX17)
SET (MSGPACK_TEST_LIB msgpackc) LIST (APPEND check_PROGRAMS
ELSE () msgpack_cpp17.cpp
SET (MSGPACK_TEST_LIB msgpackc-static) )
ENDIF () ENDIF ()
FOREACH (source_file ${check_PROGRAMS}) FOREACH (source_file ${check_PROGRAMS})
@@ -78,7 +79,7 @@ FOREACH (source_file ${check_PROGRAMS})
${source_file} ${source_file}
) )
TARGET_LINK_LIBRARIES (${source_file_we} TARGET_LINK_LIBRARIES (${source_file_we}
${MSGPACK_TEST_LIB} msgpackc
${GTEST_BOTH_LIBRARIES} ${GTEST_BOTH_LIBRARIES}
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}
@@ -104,4 +105,8 @@ ADD_EXECUTABLE (
multi_file multi_file
multi_file1.cpp multi_file2.cpp multi_file1.cpp multi_file2.cpp
) )
TARGET_INCLUDE_DIRECTORIES (multi_file
PRIVATE
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
)
ADD_TEST (multi_file multi_file) ADD_TEST (multi_file multi_file)

View File

@@ -212,4 +212,35 @@ TEST(MSGPACK_BOOST, pack_convert_no_def_con_def_con)
#endif // !defined(MSGPACK_USE_CPP03 #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) #endif // defined(MSGPACK_USE_BOOST)

View File

@@ -0,0 +1,47 @@
#include <msgpack.hpp>
#include <sstream>
#include <iterator>
#include <gtest/gtest.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#if defined(MSGPACK_USE_BOOST)
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 61
TEST(MSGPACK_BOOST, pack_convert_string_view)
{
std::stringstream ss;
std::string s = "ABC";
boost::string_view val1(s);
msgpack::pack(ss, val1);
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
boost::string_view val2 = oh.get().as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}
TEST(MSGPACK_BOOST, object_strinf_view)
{
std::string s = "ABC";
boost::string_view val1(s);
msgpack::object obj(val1);
boost::string_view val2 = obj.as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}
TEST(MSGPACK_BOOST, object_with_zone_string_view)
{
msgpack::zone z;
std::string s = "ABC";
boost::string_view val1(s);
msgpack::object obj(val1, z);
boost::string_view val2 = obj.as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 61
#endif // defined(MSGPACK_USE_BOOST)

View File

@@ -20,6 +20,10 @@ static void feed_file(msgpack::unpacker& pac, const char* path)
TEST(cases, format) 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;
msgpack::unpacker pac_compact; msgpack::unpacker pac_compact;
@@ -34,4 +38,7 @@ TEST(cases, format)
} }
EXPECT_FALSE( pac_compact.next(oh) ); 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__)
} }

View File

@@ -523,7 +523,7 @@ TEST(MSGPACKC, simple_buffer_fixext_1byte_255)
{ {
const size_t size = 255; const size_t size = 255;
char buf[size]; 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 sbuf;
msgpack_sbuffer_init(&sbuf); msgpack_sbuffer_init(&sbuf);
@@ -550,7 +550,7 @@ TEST(MSGPACKC, simple_buffer_fixext_2byte_256)
{ {
const size_t size = 256; const size_t size = 256;
char buf[size]; 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 sbuf;
msgpack_sbuffer_init(&sbuf); msgpack_sbuffer_init(&sbuf);
@@ -577,7 +577,7 @@ TEST(MSGPACKC, simple_buffer_fixext_2byte_65535)
{ {
const size_t size = 65535; const size_t size = 65535;
char buf[size]; 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 sbuf;
msgpack_sbuffer_init(&sbuf); msgpack_sbuffer_init(&sbuf);
@@ -604,7 +604,7 @@ TEST(MSGPACKC, simple_buffer_fixext_4byte_65536)
{ {
const size_t size = 65536; const size_t size = 65536;
char buf[size]; 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 sbuf;
msgpack_sbuffer_init(&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_UNPACK_SUCCESS, ret);
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type); EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
EXPECT_EQ(str_size, obj.via.str.size); EXPECT_EQ(str_size, obj.via.str.size);
EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
msgpack_zone_destroy(&z); msgpack_zone_destroy(&z);
msgpack_sbuffer_destroy(&sbuf); msgpack_sbuffer_destroy(&sbuf);
@@ -975,7 +974,6 @@ TEST(MSGPACKC, simple_buffer_v4raw_fix_l)
EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret); EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type); EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
EXPECT_EQ(str_size, obj.via.str.size); EXPECT_EQ(str_size, obj.via.str.size);
EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
msgpack_zone_destroy(&z); msgpack_zone_destroy(&z);
msgpack_sbuffer_destroy(&sbuf); msgpack_sbuffer_destroy(&sbuf);

207
test/msgpack_cpp17.cpp Normal file
View 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

View File

@@ -181,7 +181,7 @@ TEST(object, cross_zone_copy_ext)
msgpack::object::with_zone obj1(z1); msgpack::object::with_zone obj1(z1);
obj1.type = msgpack::type::EXT; 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[0] = 1;
ptr[1] = 2; ptr[1] = 2;
obj1.via.ext.ptr = ptr; obj1.via.ext.ptr = ptr;
@@ -204,7 +204,7 @@ TEST(object, cross_zone_copy_construct_ext)
msgpack::object::with_zone obj1(z1); msgpack::object::with_zone obj1(z1);
obj1.type = msgpack::type::EXT; 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[0] = 1;
ptr[1] = 2; ptr[1] = 2;
obj1.via.ext.ptr = ptr; obj1.via.ext.ptr = ptr;

View File

@@ -751,14 +751,14 @@ TEST(object_with_zone, user_defined_non_virtual)
msgpack::zone z; msgpack::zone z;
msgpack::object obj(b, z); msgpack::object obj(b, z);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
bottom br = obj.as<bottom>(); bottom br = obj.as<bottom>();
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
EXPECT_EQ(b.b, br.b); EXPECT_EQ(b.b, br.b);
EXPECT_EQ(b.m1, br.m1); EXPECT_EQ(b.m1, br.m1);
EXPECT_EQ(b.m2, br.m2); EXPECT_EQ(b.m2, br.m2);
@@ -796,14 +796,14 @@ TEST(object_with_zone, user_defined_virtual)
msgpack::zone z; msgpack::zone z;
msgpack::object obj(b, z); msgpack::object obj(b, z);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
v_bottom br = obj.as<v_bottom>(); v_bottom br = obj.as<v_bottom>();
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
EXPECT_EQ(b.b, br.b); EXPECT_EQ(b.b, br.b);
EXPECT_EQ(b.m1, br.m1); EXPECT_EQ(b.m1, br.m1);
EXPECT_EQ(b.m2, br.m2); EXPECT_EQ(b.m2, br.m2);

View File

@@ -148,11 +148,11 @@ public:
void msgpack_unpack(msgpack::object o) void msgpack_unpack(msgpack::object o)
{ {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #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); o.convert(tuple);
is_double = tuple.get<0>(); is_double = tuple.get<0>();
@@ -160,18 +160,18 @@ public:
tuple.get<1>().convert(value.f); tuple.get<1>().convert(value.f);
else else
tuple.get<1>().convert(value.i); tuple.get<1>().convert(value.i);
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
} }
}; };
TEST(MSGPACK_USER_DEFINED, simple_buffer_union_member) TEST(MSGPACK_USER_DEFINED, simple_buffer_union_member)
{ {
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
{ {
// double // double
TestUnionMemberClass val1(1.0); TestUnionMemberClass val1(1.0);
@@ -195,9 +195,9 @@ TEST(MSGPACK_USER_DEFINED, simple_buffer_union_member)
EXPECT_EQ(val1.value.i, 1); EXPECT_EQ(val1.value.i, 1);
EXPECT_EQ(val1.value.i, val2.value.i); EXPECT_EQ(val1.value.i, val2.value.i);
} }
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
} }
// inheritance // inheritance
@@ -396,14 +396,14 @@ TEST(MSGPACK_INHERIT, define_map_non_virtual)
msgpack::pack(sbuf, b); msgpack::pack(sbuf, b);
msgpack::object_handle oh = msgpack::object_handle oh =
msgpack::unpack(sbuf.data(), sbuf.size()); msgpack::unpack(sbuf.data(), sbuf.size());
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
dm_bottom br = oh.get().as<dm_bottom>(); dm_bottom br = oh.get().as<dm_bottom>();
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) && !defined(__clang__)
EXPECT_EQ(b.b, br.b); EXPECT_EQ(b.b, br.b);
EXPECT_EQ(b.m1, br.m1); EXPECT_EQ(b.m1, br.m1);
EXPECT_EQ(b.m2, br.m2); EXPECT_EQ(b.m2, br.m2);

17
update_version.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
if [ "$#" -ne 1 ]; then
echo "Usage: $0 version" >&2
exit 1
fi
major=`echo $1 | sed -e "s/^\([0-9]*\)\.[0-9]*\.[0-9]*/\1/"`
minor=`echo $1 | sed -e "s/^[0-9]*\.\([0-9]*\)\.[0-9]*/\1/"`
revision=`echo $1 | sed -e "s/^[0-9]*\.[0-9]*\.\([0-9]*\)/\1/"`
sed -i -e "s/^\(#define MSGPACK_VERSION_MAJOR[[:space:]]*\)[0-9]*/\1$major/" include/msgpack/version_master.h
sed -i -e "s/^\(#define MSGPACK_VERSION_MINOR[[:space:]]*\)[0-9]*/\1$minor/" include/msgpack/version_master.h
sed -i -e "s/^\(#define MSGPACK_VERSION_REVISION[[:space:]]*\)[0-9]*/\1$revision/" include/msgpack/version_master.h
sed -i -e "s/\(^Version \)[0-9]*\.[0-9]*\.[0-9]*/\1$1/" README.md
sed -i -e "s/\(^version: \)[0-9]*\.[0-9]*\.[0-9]*/\1$1/" appveyor.yml