mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-21 07:45:02 +02:00
Compare commits
215 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c50fbe4ce9 | ||
![]() |
d7d28b6f24 | ||
![]() |
5ebed34376 | ||
![]() |
6871a82af7 | ||
![]() |
3f79968910 | ||
![]() |
2e10adabb1 | ||
![]() |
0411ef85e7 | ||
![]() |
28b6ee0db0 | ||
![]() |
3d0fa6043c | ||
![]() |
ee169c4eb5 | ||
![]() |
0aaf95608f | ||
![]() |
918e7edba4 | ||
![]() |
88338195c0 | ||
![]() |
e90231c865 | ||
![]() |
15d8bb6792 | ||
![]() |
20ef1f925b | ||
![]() |
89b8f4ee13 | ||
![]() |
304ff96d04 | ||
![]() |
10c1917f22 | ||
![]() |
d85e731ab4 | ||
![]() |
d431e25257 | ||
![]() |
3d82c2d651 | ||
![]() |
2cbaa3a7db | ||
![]() |
bfc6e45a2f | ||
![]() |
e8fa6c1aee | ||
![]() |
d49bec4e11 | ||
![]() |
004939e732 | ||
![]() |
09e8833d53 | ||
![]() |
9ed842c014 | ||
![]() |
99c4d37a39 | ||
![]() |
4df2bdecda | ||
![]() |
597cd63121 | ||
![]() |
a51f33c02f | ||
![]() |
88032f37e1 | ||
![]() |
a76911a72c | ||
![]() |
1bc27d72cc | ||
![]() |
a6599e5fb4 | ||
![]() |
791f55da35 | ||
![]() |
e58b00016b | ||
![]() |
b4fe698777 | ||
![]() |
e89045cfcd | ||
![]() |
c6e6dbc608 | ||
![]() |
e271cf2aed | ||
![]() |
53e4bb92fe | ||
![]() |
303c1000c2 | ||
![]() |
088ce946b9 | ||
![]() |
dc86adbf8e | ||
![]() |
ad0cae30ad | ||
![]() |
bf3e2abc9e | ||
![]() |
b7543e1386 | ||
![]() |
1f515b3ae7 | ||
![]() |
a933fa5892 | ||
![]() |
a07622c276 | ||
![]() |
c955727d8c | ||
![]() |
094b70213a | ||
![]() |
c0bf8b3aff | ||
![]() |
5be2757216 | ||
![]() |
c6c31dc5cd | ||
![]() |
c704d4bfab | ||
![]() |
4466bda819 | ||
![]() |
4623654996 | ||
![]() |
84ad9a2634 | ||
![]() |
9b141fa9b6 | ||
![]() |
6a1fa2e0fc | ||
![]() |
c55f778198 | ||
![]() |
b4f2acb945 | ||
![]() |
7e139125e2 | ||
![]() |
9d37316b44 | ||
![]() |
364fc0daf6 | ||
![]() |
f24201f71f | ||
![]() |
9a113bb0ca | ||
![]() |
2674e34769 | ||
![]() |
c5c3de8f61 | ||
![]() |
0b7cabd322 | ||
![]() |
22780a6808 | ||
![]() |
4ec0fdf207 | ||
![]() |
85a0404d8c | ||
![]() |
ce67c8ed35 | ||
![]() |
1893a8e31e | ||
![]() |
dc8c253577 | ||
![]() |
9c77a0f24a | ||
![]() |
61c053d37e | ||
![]() |
04b549a46b | ||
![]() |
4a1db60af8 | ||
![]() |
55b51c506f | ||
![]() |
a97c00e463 | ||
![]() |
e61cd76310 | ||
![]() |
c30962da25 | ||
![]() |
6b7becdef0 | ||
![]() |
cfa1ab38cc | ||
![]() |
2f34d22bf5 | ||
![]() |
401460b7d9 | ||
![]() |
03b770fdf2 | ||
![]() |
d3cd07987b | ||
![]() |
ccc9ac5538 | ||
![]() |
1df97bc37b | ||
![]() |
8d09b7090d | ||
![]() |
2a7335ae90 | ||
![]() |
e7eae65ab7 | ||
![]() |
4e663609ca | ||
![]() |
98820ec6c7 | ||
![]() |
baea172cc9 | ||
![]() |
e9e31a2899 | ||
![]() |
8ffb619031 | ||
![]() |
a3ed6274c2 | ||
![]() |
f795e5d568 | ||
![]() |
87ff7e4ccc | ||
![]() |
da46fb1ef7 | ||
![]() |
b90bcf3c11 | ||
![]() |
c1f19c0e47 | ||
![]() |
d9a77e220a | ||
![]() |
894547582b | ||
![]() |
3a87cc8826 | ||
![]() |
6177038fcf | ||
![]() |
25259dc705 | ||
![]() |
5d69c22bf9 | ||
![]() |
a9caff538e | ||
![]() |
9a2bb0c972 | ||
![]() |
7191a3b014 | ||
![]() |
b82b58f184 | ||
![]() |
73af452ed8 | ||
![]() |
95b31d0d16 | ||
![]() |
c73d9a9dab | ||
![]() |
0164c1efe2 | ||
![]() |
48abfe7aa1 | ||
![]() |
8105c33f9d | ||
![]() |
237cf888d8 | ||
![]() |
b9bc9d4195 | ||
![]() |
aa790ba785 | ||
![]() |
1da0539a00 | ||
![]() |
d7a656523b | ||
![]() |
f573fd6a26 | ||
![]() |
4fa661a63d | ||
![]() |
2e4de8b65c | ||
![]() |
42181289ed | ||
![]() |
cd84d04860 | ||
![]() |
0d1e1787de | ||
![]() |
45b8d29cc0 | ||
![]() |
0bfe4c49b7 | ||
![]() |
3c997edd71 | ||
![]() |
523e986077 | ||
![]() |
90c2e35694 | ||
![]() |
4ffdc01135 | ||
![]() |
b398ce9acc | ||
![]() |
1b87018a0a | ||
![]() |
755342bb25 | ||
![]() |
438c4ff8ca | ||
![]() |
20e777c1fa | ||
![]() |
3f98327f3b | ||
![]() |
224a830ce0 | ||
![]() |
b4c4c213b1 | ||
![]() |
edc8004985 | ||
![]() |
7f37eac04c | ||
![]() |
0f66e144ab | ||
![]() |
0d475a9dbc | ||
![]() |
ca5ef097ac | ||
![]() |
4ee616bbde | ||
![]() |
de972fbe0f | ||
![]() |
585f330694 | ||
![]() |
89faf6ee9f | ||
![]() |
83dbe398fd | ||
![]() |
b68c073d1b | ||
![]() |
7eb8c8221a | ||
![]() |
7094e0872e | ||
![]() |
4b26a82ae8 | ||
![]() |
22613d4dd0 | ||
![]() |
d15d9220ff | ||
![]() |
a3f353ef42 | ||
![]() |
cc02da0ccf | ||
![]() |
e6f82cf2bb | ||
![]() |
6593cba284 | ||
![]() |
d5b515899c | ||
![]() |
068041f05e | ||
![]() |
e21b4ef28d | ||
![]() |
4c9685977b | ||
![]() |
c9814de513 | ||
![]() |
bf7bc19ccb | ||
![]() |
07b5000824 | ||
![]() |
d6ef2bc91d | ||
![]() |
db90ee4283 | ||
![]() |
a3e868acb8 | ||
![]() |
62048e1aa0 | ||
![]() |
31a06a0682 | ||
![]() |
72c7feb2c4 | ||
![]() |
a83e43a52f | ||
![]() |
8b1632dc1d | ||
![]() |
170d29a13c | ||
![]() |
1bfcf55469 | ||
![]() |
85164687f3 | ||
![]() |
f5f42782be | ||
![]() |
60a4cba6d6 | ||
![]() |
5ecb797d8a | ||
![]() |
455e0190d1 | ||
![]() |
84932e62e9 | ||
![]() |
fe229d1df0 | ||
![]() |
b5b865a6ca | ||
![]() |
d8e9941fa9 | ||
![]() |
bab3eea3a8 | ||
![]() |
07e635f158 | ||
![]() |
b641065d1f | ||
![]() |
60d4b2833d | ||
![]() |
1244edeaf1 | ||
![]() |
acf4ac01fc | ||
![]() |
549c28459e | ||
![]() |
86ac7c6eb7 | ||
![]() |
0e53b350d3 | ||
![]() |
db0726fa76 | ||
![]() |
664ab708e4 | ||
![]() |
f88e621dca | ||
![]() |
0e7345c282 | ||
![]() |
7b578cc065 | ||
![]() |
988f72d5eb | ||
![]() |
c51e8ace48 | ||
![]() |
43a86cf5b9 | ||
![]() |
54cb4350b3 |
261
.travis.yml
261
.travis.yml
@@ -1,91 +1,206 @@
|
|||||||
language: cpp
|
language: cpp
|
||||||
os:
|
sudo: false
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
cache:
|
|
||||||
- apt
|
|
||||||
compiler:
|
|
||||||
- clang
|
|
||||||
- gcc
|
|
||||||
os:
|
|
||||||
- osx
|
|
||||||
- linux
|
|
||||||
before_install:
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:h-rayflood/llvm-upper; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi
|
|
||||||
install:
|
install:
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-4.8-multilib g++-4.8-multilib; fi
|
- export BASE=`pwd`
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.6; fi
|
- mkdir ${BASE}/usr
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget --no-check-certificate https://cmake.org/files/v3.7/cmake-3.7.1-Linux-x86_64.sh -O cmake-3.7.1-Linux-x86_64.sh; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 90; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then chmod a+x cmake-3.7.1-Linux-x86_64.sh; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32gcc1; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then ./cmake-3.7.1-Linux-x86_64.sh --prefix=${BASE}/usr --skip-license; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-i386; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32z1-dev; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32stdc++6; fi
|
- if [ "$CXX" = "g++" ]; then export CXX="g++-6" CC="gcc-6"; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y bzip2; fi
|
- if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-3.9" CC="clang-3.9"; fi
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-dbg; fi
|
#gtest
|
||||||
- wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
|
- wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
|
||||||
- wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2 && tar xjf valgrind-3.10.1.tar.bz2 && cd valgrind-3.10.1 && ./configure && make && sudo make install && cd ..
|
- unzip -q googletest-release-1.7.0.zip
|
||||||
|
- cd googletest-release-1.7.0
|
||||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew unlink boost; fi
|
- $CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c
|
||||||
- if [ "$BOOST" == "boost" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.zip && unzip -q boost_1_58_0.zip && cd boost_1_58_0 && ./bootstrap.sh && ./b2 --with-timer --with-chrono address-model="$ARCH" > /dev/null && sudo ./b2 --with-timer --with-chrono address-model="$ARCH" install > /dev/null && cd ..; fi
|
- $CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c
|
||||||
|
- ar -rv libgtest.a gtest-all.o
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && g++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && g++ -m32 src/gtest-all.cc -I. -Iinclude -c && g++ -m32 src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mkdir /usr/local/lib32 && sudo mv *.a /usr/local/lib32 && cd ..; fi
|
- ar -rv libgtest_main.a gtest_main.o
|
||||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && clang++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && cd ..; fi
|
- mkdir -p ${BASE}/usr/include
|
||||||
|
- cp -r include/gtest ${BASE}/usr/include
|
||||||
env:
|
- mkdir -p ${BASE}/usr/lib
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned"
|
- mv *.a ${BASE}/usr/lib
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" CHAR_SIGN="signed"
|
- cd ..
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="signed"
|
# valgrind
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" SHARED="OFF" CHAR_SIGN="unsigned"
|
- 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
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="signed"
|
# boost
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned"
|
- 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
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="unsigned"
|
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed"
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- export PATH=/usr/local/bin:$PATH && rm -rf install
|
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
exclude:
|
include:
|
||||||
- os: osx
|
- os: osx
|
||||||
compiler: gcc
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1"
|
||||||
- os: osx
|
- os: osx
|
||||||
env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" CHAR_SIGN="signed"
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
|
||||||
- os: osx
|
- os: osx
|
||||||
env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" SHARED="OFF" CHAR_SIGN="unsigned"
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
|
||||||
- os: osx
|
- os: osx
|
||||||
env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned"
|
compiler: clang
|
||||||
- os: osx
|
env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2"
|
||||||
env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed"
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned"
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" CHAR_SIGN="signed"
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="signed"
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" SHARED="OFF" CHAR_SIGN="unsigned"
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="signed"
|
env: ACTION="ci/build_cmake.sh" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
- llvm-toolchain-precise
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-5-multilib
|
||||||
|
- g++-5-multilib
|
||||||
|
- bzip2
|
||||||
|
- clang-3.9
|
||||||
|
- libc6-dbg
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned"
|
env: ACTION="ci/build_cmake.sh" ARCH="32" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
- llvm-toolchain-precise
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-5-multilib
|
||||||
|
- g++-5-multilib
|
||||||
|
- lib32stdc++6-6-dbg
|
||||||
|
- lib32gcc1
|
||||||
|
- libc6-i386
|
||||||
|
- lib32z1-dev
|
||||||
|
- bzip2
|
||||||
|
- clang-3.9
|
||||||
|
- libc6-dbg
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC="" CHAR_SIGN="unsigned"
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2" X3_PARSE="ON"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
- llvm-toolchain-precise
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-5-multilib
|
||||||
|
- g++-5-multilib
|
||||||
|
- bzip2
|
||||||
|
- clang-3.9
|
||||||
|
- libc6-dbg
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed"
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="32" SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
- llvm-toolchain-precise
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-5-multilib
|
||||||
|
- g++-5-multilib
|
||||||
|
- lib32stdc++6-6-dbg
|
||||||
|
- lib32gcc1
|
||||||
|
- libc6-i386
|
||||||
|
- lib32z1-dev
|
||||||
|
- bzip2
|
||||||
|
- clang-3.9
|
||||||
|
- libc6-dbg
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-6-multilib
|
||||||
|
- g++-6-multilib
|
||||||
|
- bzip2
|
||||||
|
- libc6-dbg
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="32" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2" X3_PARSE="ON"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-6-multilib
|
||||||
|
- g++-6-multilib
|
||||||
|
- lib32stdc++6-6-dbg
|
||||||
|
- lib32gcc1
|
||||||
|
- libc6-i386
|
||||||
|
- lib32z1-dev
|
||||||
|
- bzip2
|
||||||
|
- libc6-dbg
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-6-multilib
|
||||||
|
- g++-6-multilib
|
||||||
|
- bzip2
|
||||||
|
- libc6-dbg
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: ACTION="ci/build_cmake.sh" ARCH="32" BOOST="ON" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="1"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-6-multilib
|
||||||
|
- g++-6-multilib
|
||||||
|
- lib32stdc++6-6-dbg
|
||||||
|
- lib32gcc1
|
||||||
|
- libc6-i386
|
||||||
|
- lib32z1-dev
|
||||||
|
- bzip2
|
||||||
|
- libc6-dbg
|
||||||
|
- os: linux
|
||||||
|
compiler: gcc
|
||||||
|
env: ACTION="ci/build_cmake.sh" ARCH="32" BOOST="ON" SHARED="OFF" CHAR_SIGN="signed" API_VERSION="2"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-multilib
|
||||||
|
- gcc-multilib
|
||||||
|
- gcc-6-multilib
|
||||||
|
- g++-6-multilib
|
||||||
|
- lib32stdc++6-6-dbg
|
||||||
|
- lib32gcc1
|
||||||
|
- libc6-i386
|
||||||
|
- lib32z1-dev
|
||||||
|
- bzip2
|
||||||
|
- libc6-dbg
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- git clean -xdf && CMAKE_LIBRARY_PATH=${LIBPATH} ${ACTION} ${VERSION} ${ARCH} ${BOOST} ${BOOST_INC} ${CHAR_SIGN}
|
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" BOOST_ROOT="${BASE}/usr" ${ACTION}
|
||||||
|
85
CHANGELOG.md
85
CHANGELOG.md
@@ -1,3 +1,88 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
## << breaking changes >>
|
||||||
|
|
||||||
|
* Fix object internal data type is float if msgpack format is float32 (#531)
|
||||||
|
|
||||||
|
## << recommended changes >>
|
||||||
|
|
||||||
|
* Add `FLOAT64` type. Please use it instead of `DOUBLE` (#531)
|
||||||
|
* Add `FLOAT32` type. Please use it instead of `FLOAT` (#531)
|
||||||
|
|
||||||
|
## << other updates >>
|
||||||
|
|
||||||
|
* Add iterator based parse/unpack function(experimental) (#553)
|
||||||
|
* Add `[[deprecated]]` attribute for C++14 (#552)
|
||||||
|
* Fix `msgpack_unpack()` return code (#548)
|
||||||
|
* Fix integer overflow (#547, #549, #550)
|
||||||
|
* Add example codes (#542)
|
||||||
|
* Add MSGPACK_NVP. You can use not only variable name but also any strings (#535)
|
||||||
|
* Fix and Improve build system (#532, #545)
|
||||||
|
* Fix `gcc_atomic.hpp` include path (#529, #530)
|
||||||
|
* Improve CI environment (#526)
|
||||||
|
* Improve documents (#524)
|
||||||
|
* Add msgpack_unpacker_next_with_size() function (#515)
|
||||||
|
* Fix `as()` applying condition (#511)
|
||||||
|
* Fix fbuffer write (#504)
|
||||||
|
* Add gcc bug workaround (#499)
|
||||||
|
* Improve object print (#497, #500, #505, #533)
|
||||||
|
* Remove some warnings (#495, #506, #508, #513, #528, #538, #545)
|
||||||
|
|
||||||
|
# 2016-06-25 version 2.0.0
|
||||||
|
|
||||||
|
## << breaking changes >>
|
||||||
|
|
||||||
|
* Removed autotools support. Use cmake instead (#476, #479)
|
||||||
|
* Removed pointer version of msgpack::unpack APIs. Use reference version instead (#453)
|
||||||
|
* Removed MSGPACK_DISABLE_LEGACY_CONVERT. msgpack::object::convert(T*) is removed by default. Use msgpack::object::convert(T&) instead (#451)
|
||||||
|
* Removed msgpacl::type::nil. Use nil_t or define MSGPACK_USE_LECACY_NIL (#444)
|
||||||
|
* Removed std::string to msgpack::object conversion (#434)
|
||||||
|
|
||||||
|
## << recommended changes >>
|
||||||
|
|
||||||
|
* Replaced msgpack::unpacked with msgpack::object_handle. msgpack::unpacked is kept as a typedef of msgpack::object_handle. (#448)
|
||||||
|
|
||||||
|
## << other updates >>
|
||||||
|
|
||||||
|
* Add strict size checking adaptor. Relaxed tuple conversion (#489)
|
||||||
|
* Fix and Improve example codes (#487)
|
||||||
|
* Add C++/CLI support for nullptr (#481)
|
||||||
|
* Update the boost libraries that are contained by msgpack-c (#475)
|
||||||
|
* Fix gcc_atomic.hpp location (#474)
|
||||||
|
* Add C-Style array support (#466, #488)
|
||||||
|
* Fix include file dependency (#464)
|
||||||
|
* Add a visitor version of unpack API (#461)
|
||||||
|
* Fix JSON string conversion from "nil" to "null" (#458)
|
||||||
|
* Fix and Improve build system (#455, #471, #473, #486, #491)
|
||||||
|
* Fix comments (#452)
|
||||||
|
* Fix unintentional msgpack::zone moving problem (#447)
|
||||||
|
* Fix operator>> and << for msgpack::object (#443)
|
||||||
|
* Fix C++03 msgpack::zone::clear() memory access violation bug (#441)
|
||||||
|
* Fix TARGET_OS_IPHONE checking (#436)
|
||||||
|
* Fix invalid front() call for empty container (#435)
|
||||||
|
* Fix compile error on g++6 (C++11 only) (#426, #430)
|
||||||
|
* Fix zone size expansion logic (#423)
|
||||||
|
* Fix wrong hader file dependency (#421)
|
||||||
|
* Fix msvc specific problem (#420)
|
||||||
|
* Add v2 API support (#415)
|
||||||
|
|
||||||
# 2016-01-22 version 1.4.0
|
# 2016-01-22 version 1.4.0
|
||||||
|
|
||||||
## << recommended changes >>
|
## << recommended changes >>
|
||||||
|
281
CMakeLists.txt
281
CMakeLists.txt
@@ -1,4 +1,10 @@
|
|||||||
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.6)
|
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12)
|
||||||
|
|
||||||
|
IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR
|
||||||
|
(CMAKE_VERSION VERSION_EQUAL 3.1))
|
||||||
|
CMAKE_POLICY(SET CMP0054 NEW)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
PROJECT (msgpack)
|
PROJECT (msgpack)
|
||||||
|
|
||||||
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents)
|
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents)
|
||||||
@@ -15,15 +21,11 @@ SET (exec_prefix "\${prefix}")
|
|||||||
SET (libdir "\${exec_prefix}/lib")
|
SET (libdir "\${exec_prefix}/lib")
|
||||||
SET (includedir "\${prefix}/include")
|
SET (includedir "\${prefix}/include")
|
||||||
SET (GNUCXX_STD_SUPPORT_VERSION "4.3")
|
SET (GNUCXX_STD_SUPPORT_VERSION "4.3")
|
||||||
SET (GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION "4.4")
|
|
||||||
|
|
||||||
OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF)
|
OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF)
|
||||||
OPTION (MSGPACK_32BIT "32bit compile" OFF)
|
OPTION (MSGPACK_32BIT "32bit compile" OFF)
|
||||||
OPTION (MSGPACK_BOOST "Using boost libraries" OFF)
|
OPTION (MSGPACK_BOOST "Using boost libraries" OFF)
|
||||||
|
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_DISABLE_LEGACY_NIL ${CMAKE_CXX_FLAGS}")
|
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_DISABLE_LEGACY_CONVERT ${CMAKE_CXX_FLAGS}")
|
|
||||||
|
|
||||||
IF (APPLE)
|
IF (APPLE)
|
||||||
SET(CMAKE_MACOSX_RPATH ON)
|
SET(CMAKE_MACOSX_RPATH ON)
|
||||||
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||||
@@ -36,27 +38,40 @@ IF (APPLE)
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_CXX11)
|
IF (MSGPACK_USE_X3_PARSE)
|
||||||
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 "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}")
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}")
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE ${CMAKE_CXX_FLAGS}")
|
||||||
IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
|
IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
|
||||||
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11.")
|
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++14.")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ELSE ()
|
ELSE ()
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
IF (MSGPACK_CXX11)
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_STD_SUPPORT_VERSION}) OR
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_STD_SUPPORT_VERSION}))
|
SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||||
SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}")
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
|
||||||
|
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11.")
|
||||||
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
ELSE ()
|
||||||
SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_STD_SUPPORT_VERSION}) OR
|
||||||
IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18)
|
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_STD_SUPPORT_VERSION}))
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_CPP03 ${CMAKE_CXX_FLAGS}")
|
SET (CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}")
|
||||||
|
ENDIF ()
|
||||||
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET (CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18)
|
||||||
|
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_CPP03 ${CMAKE_CXX_FLAGS}")
|
||||||
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
@@ -73,15 +88,24 @@ IF (MSGPACK_32BIT)
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
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}")
|
||||||
SET (Boost_USE_STATIC_LIBS ON) # only find static libs
|
|
||||||
SET (Boost_USE_MULTITHREADED ON)
|
SET (Boost_USE_MULTITHREADED ON)
|
||||||
SET (Boost_USE_STATIC_RUNTIME OFF)
|
SET (Boost_USE_STATIC_RUNTIME OFF)
|
||||||
FIND_PACKAGE (Boost COMPONENTS chrono timer system)
|
FIND_PACKAGE (Boost REQUIRED COMPONENTS chrono context system timer)
|
||||||
INCLUDE_DIRECTORIES (
|
INCLUDE_DIRECTORIES (
|
||||||
${MSGPACK_BOOST_DIR}
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
LINK_DIRECTORIES (
|
||||||
|
${Boost_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
IF (MSGPACK_BOOST_DIR)
|
||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
${MSGPACK_BOOST_DIR}
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_CHAR_SIGN)
|
IF (MSGPACK_CHAR_SIGN)
|
||||||
@@ -89,6 +113,12 @@ IF (MSGPACK_CHAR_SIGN)
|
|||||||
SET (CMAKE_CXX_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_CXX_FLAGS}")
|
SET (CMAKE_CXX_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_CXX_FLAGS}")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (MSGPACK_DEFAULT_API_VERSION)
|
||||||
|
SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=${MSGPACK_DEFAULT_API_VERSION} ${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=2 ${CMAKE_CXX_FLAGS}")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h)
|
FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h)
|
||||||
FOREACH (F ${PREDEF_FILES})
|
FOREACH (F ${PREDEF_FILES})
|
||||||
SET(M "Converting ${F}")
|
SET(M "Converting ${F}")
|
||||||
@@ -96,7 +126,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)
|
||||||
@@ -106,7 +136,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)
|
||||||
@@ -115,7 +145,6 @@ FIND_PACKAGE (Threads)
|
|||||||
IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND)
|
IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND)
|
||||||
OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON)
|
OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON)
|
|
||||||
|
|
||||||
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
|
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
|
||||||
OPTION (MSGPACK_ENABLE_SHARED "Build shared libaries in addition to static libraries." ON)
|
OPTION (MSGPACK_ENABLE_SHARED "Build shared libaries in addition to static libraries." ON)
|
||||||
@@ -132,113 +161,7 @@ int main(int argc, char * argv[])
|
|||||||
}
|
}
|
||||||
" MSGPACK_ENABLE_GCC_CXX_ATOMIC)
|
" MSGPACK_ENABLE_GCC_CXX_ATOMIC)
|
||||||
|
|
||||||
|
INCLUDE (Files.cmake)
|
||||||
LIST (APPEND msgpackc_SOURCES
|
|
||||||
src/unpack.c
|
|
||||||
src/objectc.c
|
|
||||||
src/version.c
|
|
||||||
src/vrefbuffer.c
|
|
||||||
src/zone.c
|
|
||||||
)
|
|
||||||
|
|
||||||
LIST (APPEND msgpackc_HEADERS
|
|
||||||
include/msgpack/pack_define.h
|
|
||||||
include/msgpack/pack_template.h
|
|
||||||
include/msgpack/unpack_define.h
|
|
||||||
include/msgpack/unpack_template.h
|
|
||||||
include/msgpack/util.h
|
|
||||||
include/msgpack/sysdep.h
|
|
||||||
include/msgpack/gcc_atomic.h
|
|
||||||
include/msgpack.h
|
|
||||||
include/msgpack/sbuffer.h
|
|
||||||
include/msgpack/version.h
|
|
||||||
include/msgpack/version_master.h
|
|
||||||
include/msgpack/vrefbuffer.h
|
|
||||||
include/msgpack/zbuffer.h
|
|
||||||
include/msgpack/fbuffer.h
|
|
||||||
include/msgpack/pack.h
|
|
||||||
include/msgpack/unpack.h
|
|
||||||
include/msgpack/object.h
|
|
||||||
include/msgpack/zone.h
|
|
||||||
)
|
|
||||||
|
|
||||||
FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/predef/*.h)
|
|
||||||
|
|
||||||
LIST (APPEND msgpackc_HEADERS ${PREDEF_FILES})
|
|
||||||
LIST (APPEND msgpackc_HEADERS include/msgpack/predef.h)
|
|
||||||
|
|
||||||
IF (MSGPACK_ENABLE_CXX)
|
|
||||||
LIST (APPEND msgpack_HEADERS
|
|
||||||
include/msgpack.hpp
|
|
||||||
include/msgpack/adaptor/adaptor_base.hpp
|
|
||||||
include/msgpack/adaptor/array_ref.hpp
|
|
||||||
include/msgpack/adaptor/bool.hpp
|
|
||||||
include/msgpack/adaptor/boost/fusion.hpp
|
|
||||||
include/msgpack/adaptor/boost/msgpack_variant.hpp
|
|
||||||
include/msgpack/adaptor/boost/optional.hpp
|
|
||||||
include/msgpack/adaptor/boost/string_ref.hpp
|
|
||||||
include/msgpack/adaptor/char_ptr.hpp
|
|
||||||
include/msgpack/adaptor/check_container_size.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/array.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/array_char.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/array_unsigned_char.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/forward_list.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/reference_wrapper.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/shared_ptr.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/tuple.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/unique_ptr.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/unordered_map.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/unordered_set.hpp
|
|
||||||
include/msgpack/adaptor/define.hpp
|
|
||||||
include/msgpack/adaptor/deque.hpp
|
|
||||||
include/msgpack/adaptor/detail/cpp03_define_array.hpp
|
|
||||||
include/msgpack/adaptor/detail/cpp03_define_map.hpp
|
|
||||||
include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp
|
|
||||||
include/msgpack/adaptor/detail/cpp11_define_array.hpp
|
|
||||||
include/msgpack/adaptor/detail/cpp11_define_map.hpp
|
|
||||||
include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp
|
|
||||||
include/msgpack/adaptor/ext.hpp
|
|
||||||
include/msgpack/adaptor/fixint.hpp
|
|
||||||
include/msgpack/adaptor/float.hpp
|
|
||||||
include/msgpack/adaptor/int.hpp
|
|
||||||
include/msgpack/adaptor/list.hpp
|
|
||||||
include/msgpack/adaptor/map.hpp
|
|
||||||
include/msgpack/adaptor/msgpack_tuple.hpp
|
|
||||||
include/msgpack/adaptor/nil.hpp
|
|
||||||
include/msgpack/adaptor/pair.hpp
|
|
||||||
include/msgpack/adaptor/raw.hpp
|
|
||||||
include/msgpack/adaptor/v4raw.hpp
|
|
||||||
include/msgpack/adaptor/set.hpp
|
|
||||||
include/msgpack/adaptor/string.hpp
|
|
||||||
include/msgpack/adaptor/tr1/unordered_map.hpp
|
|
||||||
include/msgpack/adaptor/tr1/unordered_set.hpp
|
|
||||||
include/msgpack/adaptor/vector.hpp
|
|
||||||
include/msgpack/adaptor/vector_bool.hpp
|
|
||||||
include/msgpack/adaptor/vector_char.hpp
|
|
||||||
include/msgpack/adaptor/vector_unsigned_char.hpp
|
|
||||||
include/msgpack/cpp_config.hpp
|
|
||||||
include/msgpack/detail/cpp03_zone.hpp
|
|
||||||
include/msgpack/detail/cpp11_zone.hpp
|
|
||||||
include/msgpack/fbuffer.hpp
|
|
||||||
include/msgpack/iterator.hpp
|
|
||||||
include/msgpack/meta.hpp
|
|
||||||
include/msgpack/object.hpp
|
|
||||||
include/msgpack/object_fwd.hpp
|
|
||||||
include/msgpack/pack.hpp
|
|
||||||
include/msgpack/sbuffer.hpp
|
|
||||||
include/msgpack/type.hpp
|
|
||||||
include/msgpack/unpack.hpp
|
|
||||||
include/msgpack/version.hpp
|
|
||||||
include/msgpack/versioning.hpp
|
|
||||||
include/msgpack/vrefbuffer.hpp
|
|
||||||
include/msgpack/zbuffer.hpp
|
|
||||||
include/msgpack/zone.hpp
|
|
||||||
)
|
|
||||||
FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/preprocessor/*.hpp)
|
|
||||||
|
|
||||||
LIST (APPEND msgpackc_HEADERS ${PREPROCESSOR_FILES})
|
|
||||||
LIST (APPEND msgpackc_HEADERS include/msgpack/preprocessor.hpp)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
EXECUTE_PROCESS (
|
EXECUTE_PROCESS (
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack
|
||||||
@@ -250,17 +173,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
|
||||||
@@ -268,9 +194,27 @@ 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)
|
||||||
SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX "_import.lib")
|
IF (MSVC)
|
||||||
|
SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX "_import.lib")
|
||||||
|
ELSEIF (MINGW)
|
||||||
|
SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX ".dll.a")
|
||||||
|
ENDIF ()
|
||||||
SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0)
|
SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
@@ -291,14 +235,10 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" ST
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
IF (MSGPACK_ENABLE_SHARED)
|
||||||
ENDIF ()
|
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR
|
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}))
|
|
||||||
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
@@ -313,6 +253,10 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" S
|
|||||||
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX)
|
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
IF (NOT DEFINED CMAKE_INSTALL_BINDIR)
|
||||||
|
SET(CMAKE_INSTALL_BINDIR bin)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
IF (NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
IF (NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
||||||
SET(CMAKE_INSTALL_LIBDIR lib)
|
SET(CMAKE_INSTALL_LIBDIR lib)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
@@ -327,8 +271,15 @@ ELSE()
|
|||||||
SET (MSGPACK_INSTALLTARGETS msgpackc-static)
|
SET (MSGPACK_INSTALLTARGETS msgpackc-static)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets
|
||||||
INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX})
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
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 ()
|
||||||
@@ -379,3 +330,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}"
|
||||||
|
)
|
||||||
|
661
Files.cmake
Normal file
661
Files.cmake
Normal file
@@ -0,0 +1,661 @@
|
|||||||
|
LIST (APPEND msgpackc_SOURCES
|
||||||
|
src/objectc.c
|
||||||
|
src/unpack.c
|
||||||
|
src/version.c
|
||||||
|
src/vrefbuffer.c
|
||||||
|
src/zone.c
|
||||||
|
)
|
||||||
|
LIST (APPEND msgpackc_HEADERS
|
||||||
|
include/msgpack.h
|
||||||
|
include/msgpack/fbuffer.h
|
||||||
|
include/msgpack/gcc_atomic.h
|
||||||
|
include/msgpack/object.h
|
||||||
|
include/msgpack/pack.h
|
||||||
|
include/msgpack/pack_define.h
|
||||||
|
include/msgpack/pack_template.h
|
||||||
|
include/msgpack/predef.h
|
||||||
|
include/msgpack/predef/architecture.h
|
||||||
|
include/msgpack/predef/architecture/alpha.h
|
||||||
|
include/msgpack/predef/architecture/arm.h
|
||||||
|
include/msgpack/predef/architecture/blackfin.h
|
||||||
|
include/msgpack/predef/architecture/convex.h
|
||||||
|
include/msgpack/predef/architecture/ia64.h
|
||||||
|
include/msgpack/predef/architecture/m68k.h
|
||||||
|
include/msgpack/predef/architecture/mips.h
|
||||||
|
include/msgpack/predef/architecture/parisc.h
|
||||||
|
include/msgpack/predef/architecture/ppc.h
|
||||||
|
include/msgpack/predef/architecture/pyramid.h
|
||||||
|
include/msgpack/predef/architecture/rs6k.h
|
||||||
|
include/msgpack/predef/architecture/sparc.h
|
||||||
|
include/msgpack/predef/architecture/superh.h
|
||||||
|
include/msgpack/predef/architecture/sys370.h
|
||||||
|
include/msgpack/predef/architecture/sys390.h
|
||||||
|
include/msgpack/predef/architecture/x86.h
|
||||||
|
include/msgpack/predef/architecture/x86/32.h
|
||||||
|
include/msgpack/predef/architecture/x86/64.h
|
||||||
|
include/msgpack/predef/architecture/z.h
|
||||||
|
include/msgpack/predef/compiler.h
|
||||||
|
include/msgpack/predef/compiler/borland.h
|
||||||
|
include/msgpack/predef/compiler/clang.h
|
||||||
|
include/msgpack/predef/compiler/comeau.h
|
||||||
|
include/msgpack/predef/compiler/compaq.h
|
||||||
|
include/msgpack/predef/compiler/diab.h
|
||||||
|
include/msgpack/predef/compiler/digitalmars.h
|
||||||
|
include/msgpack/predef/compiler/dignus.h
|
||||||
|
include/msgpack/predef/compiler/edg.h
|
||||||
|
include/msgpack/predef/compiler/ekopath.h
|
||||||
|
include/msgpack/predef/compiler/gcc.h
|
||||||
|
include/msgpack/predef/compiler/gcc_xml.h
|
||||||
|
include/msgpack/predef/compiler/greenhills.h
|
||||||
|
include/msgpack/predef/compiler/hp_acc.h
|
||||||
|
include/msgpack/predef/compiler/iar.h
|
||||||
|
include/msgpack/predef/compiler/ibm.h
|
||||||
|
include/msgpack/predef/compiler/intel.h
|
||||||
|
include/msgpack/predef/compiler/kai.h
|
||||||
|
include/msgpack/predef/compiler/llvm.h
|
||||||
|
include/msgpack/predef/compiler/metaware.h
|
||||||
|
include/msgpack/predef/compiler/metrowerks.h
|
||||||
|
include/msgpack/predef/compiler/microtec.h
|
||||||
|
include/msgpack/predef/compiler/mpw.h
|
||||||
|
include/msgpack/predef/compiler/palm.h
|
||||||
|
include/msgpack/predef/compiler/pgi.h
|
||||||
|
include/msgpack/predef/compiler/sgi_mipspro.h
|
||||||
|
include/msgpack/predef/compiler/sunpro.h
|
||||||
|
include/msgpack/predef/compiler/tendra.h
|
||||||
|
include/msgpack/predef/compiler/visualc.h
|
||||||
|
include/msgpack/predef/compiler/watcom.h
|
||||||
|
include/msgpack/predef/detail/_cassert.h
|
||||||
|
include/msgpack/predef/detail/_exception.h
|
||||||
|
include/msgpack/predef/detail/comp_detected.h
|
||||||
|
include/msgpack/predef/detail/endian_compat.h
|
||||||
|
include/msgpack/predef/detail/os_detected.h
|
||||||
|
include/msgpack/predef/detail/platform_detected.h
|
||||||
|
include/msgpack/predef/detail/test.h
|
||||||
|
include/msgpack/predef/detail/test_def.h
|
||||||
|
include/msgpack/predef/hardware.h
|
||||||
|
include/msgpack/predef/hardware/simd.h
|
||||||
|
include/msgpack/predef/hardware/simd/arm.h
|
||||||
|
include/msgpack/predef/hardware/simd/arm/versions.h
|
||||||
|
include/msgpack/predef/hardware/simd/ppc.h
|
||||||
|
include/msgpack/predef/hardware/simd/ppc/versions.h
|
||||||
|
include/msgpack/predef/hardware/simd/x86.h
|
||||||
|
include/msgpack/predef/hardware/simd/x86/versions.h
|
||||||
|
include/msgpack/predef/hardware/simd/x86_amd.h
|
||||||
|
include/msgpack/predef/hardware/simd/x86_amd/versions.h
|
||||||
|
include/msgpack/predef/language.h
|
||||||
|
include/msgpack/predef/language/objc.h
|
||||||
|
include/msgpack/predef/language/stdc.h
|
||||||
|
include/msgpack/predef/language/stdcpp.h
|
||||||
|
include/msgpack/predef/library.h
|
||||||
|
include/msgpack/predef/library/c.h
|
||||||
|
include/msgpack/predef/library/c/_prefix.h
|
||||||
|
include/msgpack/predef/library/c/gnu.h
|
||||||
|
include/msgpack/predef/library/c/uc.h
|
||||||
|
include/msgpack/predef/library/c/vms.h
|
||||||
|
include/msgpack/predef/library/c/zos.h
|
||||||
|
include/msgpack/predef/library/std.h
|
||||||
|
include/msgpack/predef/library/std/_prefix.h
|
||||||
|
include/msgpack/predef/library/std/cxx.h
|
||||||
|
include/msgpack/predef/library/std/dinkumware.h
|
||||||
|
include/msgpack/predef/library/std/libcomo.h
|
||||||
|
include/msgpack/predef/library/std/modena.h
|
||||||
|
include/msgpack/predef/library/std/msl.h
|
||||||
|
include/msgpack/predef/library/std/roguewave.h
|
||||||
|
include/msgpack/predef/library/std/sgi.h
|
||||||
|
include/msgpack/predef/library/std/stdcpp3.h
|
||||||
|
include/msgpack/predef/library/std/stlport.h
|
||||||
|
include/msgpack/predef/library/std/vacpp.h
|
||||||
|
include/msgpack/predef/make.h
|
||||||
|
include/msgpack/predef/os.h
|
||||||
|
include/msgpack/predef/os/aix.h
|
||||||
|
include/msgpack/predef/os/amigaos.h
|
||||||
|
include/msgpack/predef/os/android.h
|
||||||
|
include/msgpack/predef/os/beos.h
|
||||||
|
include/msgpack/predef/os/bsd.h
|
||||||
|
include/msgpack/predef/os/bsd/bsdi.h
|
||||||
|
include/msgpack/predef/os/bsd/dragonfly.h
|
||||||
|
include/msgpack/predef/os/bsd/free.h
|
||||||
|
include/msgpack/predef/os/bsd/net.h
|
||||||
|
include/msgpack/predef/os/bsd/open.h
|
||||||
|
include/msgpack/predef/os/cygwin.h
|
||||||
|
include/msgpack/predef/os/haiku.h
|
||||||
|
include/msgpack/predef/os/hpux.h
|
||||||
|
include/msgpack/predef/os/ios.h
|
||||||
|
include/msgpack/predef/os/irix.h
|
||||||
|
include/msgpack/predef/os/linux.h
|
||||||
|
include/msgpack/predef/os/macos.h
|
||||||
|
include/msgpack/predef/os/os400.h
|
||||||
|
include/msgpack/predef/os/qnxnto.h
|
||||||
|
include/msgpack/predef/os/solaris.h
|
||||||
|
include/msgpack/predef/os/unix.h
|
||||||
|
include/msgpack/predef/os/vms.h
|
||||||
|
include/msgpack/predef/os/windows.h
|
||||||
|
include/msgpack/predef/other.h
|
||||||
|
include/msgpack/predef/other/endian.h
|
||||||
|
include/msgpack/predef/platform.h
|
||||||
|
include/msgpack/predef/platform/mingw.h
|
||||||
|
include/msgpack/predef/platform/windows_desktop.h
|
||||||
|
include/msgpack/predef/platform/windows_phone.h
|
||||||
|
include/msgpack/predef/platform/windows_runtime.h
|
||||||
|
include/msgpack/predef/platform/windows_store.h
|
||||||
|
include/msgpack/predef/version.h
|
||||||
|
include/msgpack/predef/version_number.h
|
||||||
|
include/msgpack/sbuffer.h
|
||||||
|
include/msgpack/sysdep.h
|
||||||
|
include/msgpack/unpack.h
|
||||||
|
include/msgpack/unpack_define.h
|
||||||
|
include/msgpack/unpack_template.h
|
||||||
|
include/msgpack/util.h
|
||||||
|
include/msgpack/version.h
|
||||||
|
include/msgpack/version_master.h
|
||||||
|
include/msgpack/vrefbuffer.h
|
||||||
|
include/msgpack/zbuffer.h
|
||||||
|
include/msgpack/zone.h
|
||||||
|
)
|
||||||
|
IF (MSGPACK_ENABLE_CXX)
|
||||||
|
LIST (APPEND msgpackc_HEADERS
|
||||||
|
include/msgpack.hpp
|
||||||
|
include/msgpack/adaptor/adaptor_base.hpp
|
||||||
|
include/msgpack/adaptor/adaptor_base_decl.hpp
|
||||||
|
include/msgpack/adaptor/array_ref.hpp
|
||||||
|
include/msgpack/adaptor/array_ref_decl.hpp
|
||||||
|
include/msgpack/adaptor/bool.hpp
|
||||||
|
include/msgpack/adaptor/boost/fusion.hpp
|
||||||
|
include/msgpack/adaptor/boost/msgpack_variant.hpp
|
||||||
|
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
|
||||||
|
include/msgpack/adaptor/boost/optional.hpp
|
||||||
|
include/msgpack/adaptor/boost/string_ref.hpp
|
||||||
|
include/msgpack/adaptor/boost/string_view.hpp
|
||||||
|
include/msgpack/adaptor/carray.hpp
|
||||||
|
include/msgpack/adaptor/char_ptr.hpp
|
||||||
|
include/msgpack/adaptor/check_container_size.hpp
|
||||||
|
include/msgpack/adaptor/check_container_size_decl.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/array.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/array_char.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/array_unsigned_char.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/forward_list.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/reference_wrapper.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/shared_ptr.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/tuple.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/unique_ptr.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/unordered_map.hpp
|
||||||
|
include/msgpack/adaptor/cpp11/unordered_set.hpp
|
||||||
|
include/msgpack/adaptor/define.hpp
|
||||||
|
include/msgpack/adaptor/define_decl.hpp
|
||||||
|
include/msgpack/adaptor/deque.hpp
|
||||||
|
include/msgpack/adaptor/ext.hpp
|
||||||
|
include/msgpack/adaptor/ext_decl.hpp
|
||||||
|
include/msgpack/adaptor/fixint.hpp
|
||||||
|
include/msgpack/adaptor/fixint_decl.hpp
|
||||||
|
include/msgpack/adaptor/float.hpp
|
||||||
|
include/msgpack/adaptor/int.hpp
|
||||||
|
include/msgpack/adaptor/int_decl.hpp
|
||||||
|
include/msgpack/adaptor/list.hpp
|
||||||
|
include/msgpack/adaptor/map.hpp
|
||||||
|
include/msgpack/adaptor/map_decl.hpp
|
||||||
|
include/msgpack/adaptor/msgpack_tuple.hpp
|
||||||
|
include/msgpack/adaptor/msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/adaptor/nil.hpp
|
||||||
|
include/msgpack/adaptor/nil_decl.hpp
|
||||||
|
include/msgpack/adaptor/pair.hpp
|
||||||
|
include/msgpack/adaptor/raw.hpp
|
||||||
|
include/msgpack/adaptor/raw_decl.hpp
|
||||||
|
include/msgpack/adaptor/set.hpp
|
||||||
|
include/msgpack/adaptor/size_equal_only.hpp
|
||||||
|
include/msgpack/adaptor/size_equal_only_decl.hpp
|
||||||
|
include/msgpack/adaptor/string.hpp
|
||||||
|
include/msgpack/adaptor/tr1/unordered_map.hpp
|
||||||
|
include/msgpack/adaptor/tr1/unordered_set.hpp
|
||||||
|
include/msgpack/adaptor/v4raw.hpp
|
||||||
|
include/msgpack/adaptor/v4raw_decl.hpp
|
||||||
|
include/msgpack/adaptor/vector.hpp
|
||||||
|
include/msgpack/adaptor/vector_bool.hpp
|
||||||
|
include/msgpack/adaptor/vector_char.hpp
|
||||||
|
include/msgpack/adaptor/vector_unsigned_char.hpp
|
||||||
|
include/msgpack/cpp_config.hpp
|
||||||
|
include/msgpack/cpp_config_decl.hpp
|
||||||
|
include/msgpack/fbuffer.hpp
|
||||||
|
include/msgpack/fbuffer_decl.hpp
|
||||||
|
include/msgpack/gcc_atomic.hpp
|
||||||
|
include/msgpack/iterator.hpp
|
||||||
|
include/msgpack/iterator_decl.hpp
|
||||||
|
include/msgpack/meta.hpp
|
||||||
|
include/msgpack/meta_decl.hpp
|
||||||
|
include/msgpack/object.hpp
|
||||||
|
include/msgpack/object_decl.hpp
|
||||||
|
include/msgpack/object_fwd.hpp
|
||||||
|
include/msgpack/object_fwd_decl.hpp
|
||||||
|
include/msgpack/pack.hpp
|
||||||
|
include/msgpack/pack_decl.hpp
|
||||||
|
include/msgpack/parse_return.hpp
|
||||||
|
include/msgpack/preprocessor.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/add.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/dec.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/detail/div_base.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/div.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/inc.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/mod.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/mul.hpp
|
||||||
|
include/msgpack/preprocessor/arithmetic/sub.hpp
|
||||||
|
include/msgpack/preprocessor/array.hpp
|
||||||
|
include/msgpack/preprocessor/array/data.hpp
|
||||||
|
include/msgpack/preprocessor/array/detail/get_data.hpp
|
||||||
|
include/msgpack/preprocessor/array/elem.hpp
|
||||||
|
include/msgpack/preprocessor/array/enum.hpp
|
||||||
|
include/msgpack/preprocessor/array/insert.hpp
|
||||||
|
include/msgpack/preprocessor/array/pop_back.hpp
|
||||||
|
include/msgpack/preprocessor/array/pop_front.hpp
|
||||||
|
include/msgpack/preprocessor/array/push_back.hpp
|
||||||
|
include/msgpack/preprocessor/array/push_front.hpp
|
||||||
|
include/msgpack/preprocessor/array/remove.hpp
|
||||||
|
include/msgpack/preprocessor/array/replace.hpp
|
||||||
|
include/msgpack/preprocessor/array/reverse.hpp
|
||||||
|
include/msgpack/preprocessor/array/size.hpp
|
||||||
|
include/msgpack/preprocessor/array/to_list.hpp
|
||||||
|
include/msgpack/preprocessor/array/to_seq.hpp
|
||||||
|
include/msgpack/preprocessor/array/to_tuple.hpp
|
||||||
|
include/msgpack/preprocessor/assert_msg.hpp
|
||||||
|
include/msgpack/preprocessor/cat.hpp
|
||||||
|
include/msgpack/preprocessor/comma.hpp
|
||||||
|
include/msgpack/preprocessor/comma_if.hpp
|
||||||
|
include/msgpack/preprocessor/comparison.hpp
|
||||||
|
include/msgpack/preprocessor/comparison/equal.hpp
|
||||||
|
include/msgpack/preprocessor/comparison/greater.hpp
|
||||||
|
include/msgpack/preprocessor/comparison/greater_equal.hpp
|
||||||
|
include/msgpack/preprocessor/comparison/less.hpp
|
||||||
|
include/msgpack/preprocessor/comparison/less_equal.hpp
|
||||||
|
include/msgpack/preprocessor/comparison/not_equal.hpp
|
||||||
|
include/msgpack/preprocessor/config/config.hpp
|
||||||
|
include/msgpack/preprocessor/config/limits.hpp
|
||||||
|
include/msgpack/preprocessor/control.hpp
|
||||||
|
include/msgpack/preprocessor/control/deduce_d.hpp
|
||||||
|
include/msgpack/preprocessor/control/detail/dmc/while.hpp
|
||||||
|
include/msgpack/preprocessor/control/detail/edg/while.hpp
|
||||||
|
include/msgpack/preprocessor/control/detail/msvc/while.hpp
|
||||||
|
include/msgpack/preprocessor/control/detail/while.hpp
|
||||||
|
include/msgpack/preprocessor/control/expr_if.hpp
|
||||||
|
include/msgpack/preprocessor/control/expr_iif.hpp
|
||||||
|
include/msgpack/preprocessor/control/if.hpp
|
||||||
|
include/msgpack/preprocessor/control/iif.hpp
|
||||||
|
include/msgpack/preprocessor/control/while.hpp
|
||||||
|
include/msgpack/preprocessor/debug.hpp
|
||||||
|
include/msgpack/preprocessor/debug/assert.hpp
|
||||||
|
include/msgpack/preprocessor/debug/error.hpp
|
||||||
|
include/msgpack/preprocessor/debug/line.hpp
|
||||||
|
include/msgpack/preprocessor/dec.hpp
|
||||||
|
include/msgpack/preprocessor/detail/auto_rec.hpp
|
||||||
|
include/msgpack/preprocessor/detail/check.hpp
|
||||||
|
include/msgpack/preprocessor/detail/dmc/auto_rec.hpp
|
||||||
|
include/msgpack/preprocessor/detail/is_binary.hpp
|
||||||
|
include/msgpack/preprocessor/detail/is_nullary.hpp
|
||||||
|
include/msgpack/preprocessor/detail/is_unary.hpp
|
||||||
|
include/msgpack/preprocessor/detail/null.hpp
|
||||||
|
include/msgpack/preprocessor/detail/split.hpp
|
||||||
|
include/msgpack/preprocessor/empty.hpp
|
||||||
|
include/msgpack/preprocessor/enum.hpp
|
||||||
|
include/msgpack/preprocessor/enum_params.hpp
|
||||||
|
include/msgpack/preprocessor/enum_params_with_a_default.hpp
|
||||||
|
include/msgpack/preprocessor/enum_params_with_defaults.hpp
|
||||||
|
include/msgpack/preprocessor/enum_shifted.hpp
|
||||||
|
include/msgpack/preprocessor/enum_shifted_params.hpp
|
||||||
|
include/msgpack/preprocessor/expand.hpp
|
||||||
|
include/msgpack/preprocessor/expr_if.hpp
|
||||||
|
include/msgpack/preprocessor/facilities.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/apply.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/detail/is_empty.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/empty.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/expand.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/identity.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/intercept.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/is_1.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/is_empty.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/is_empty_or_1.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/is_empty_variadic.hpp
|
||||||
|
include/msgpack/preprocessor/facilities/overload.hpp
|
||||||
|
include/msgpack/preprocessor/for.hpp
|
||||||
|
include/msgpack/preprocessor/identity.hpp
|
||||||
|
include/msgpack/preprocessor/if.hpp
|
||||||
|
include/msgpack/preprocessor/inc.hpp
|
||||||
|
include/msgpack/preprocessor/iterate.hpp
|
||||||
|
include/msgpack/preprocessor/iteration.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/lower1.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/lower2.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/lower3.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/lower4.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/lower5.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/upper1.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/upper2.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/upper3.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/upper4.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/bounds/upper5.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/finish.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/forward1.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/forward2.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/forward3.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/forward4.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/forward5.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/reverse1.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/reverse2.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/reverse3.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/reverse4.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/iter/reverse5.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/local.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/rlocal.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/self.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/detail/start.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/iterate.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/local.hpp
|
||||||
|
include/msgpack/preprocessor/iteration/self.hpp
|
||||||
|
include/msgpack/preprocessor/library.hpp
|
||||||
|
include/msgpack/preprocessor/limits.hpp
|
||||||
|
include/msgpack/preprocessor/list.hpp
|
||||||
|
include/msgpack/preprocessor/list/adt.hpp
|
||||||
|
include/msgpack/preprocessor/list/append.hpp
|
||||||
|
include/msgpack/preprocessor/list/at.hpp
|
||||||
|
include/msgpack/preprocessor/list/cat.hpp
|
||||||
|
include/msgpack/preprocessor/list/detail/dmc/fold_left.hpp
|
||||||
|
include/msgpack/preprocessor/list/detail/edg/fold_left.hpp
|
||||||
|
include/msgpack/preprocessor/list/detail/edg/fold_right.hpp
|
||||||
|
include/msgpack/preprocessor/list/detail/fold_left.hpp
|
||||||
|
include/msgpack/preprocessor/list/detail/fold_right.hpp
|
||||||
|
include/msgpack/preprocessor/list/enum.hpp
|
||||||
|
include/msgpack/preprocessor/list/filter.hpp
|
||||||
|
include/msgpack/preprocessor/list/first_n.hpp
|
||||||
|
include/msgpack/preprocessor/list/fold_left.hpp
|
||||||
|
include/msgpack/preprocessor/list/fold_right.hpp
|
||||||
|
include/msgpack/preprocessor/list/for_each.hpp
|
||||||
|
include/msgpack/preprocessor/list/for_each_i.hpp
|
||||||
|
include/msgpack/preprocessor/list/for_each_product.hpp
|
||||||
|
include/msgpack/preprocessor/list/rest_n.hpp
|
||||||
|
include/msgpack/preprocessor/list/reverse.hpp
|
||||||
|
include/msgpack/preprocessor/list/size.hpp
|
||||||
|
include/msgpack/preprocessor/list/to_array.hpp
|
||||||
|
include/msgpack/preprocessor/list/to_seq.hpp
|
||||||
|
include/msgpack/preprocessor/list/to_tuple.hpp
|
||||||
|
include/msgpack/preprocessor/list/transform.hpp
|
||||||
|
include/msgpack/preprocessor/logical.hpp
|
||||||
|
include/msgpack/preprocessor/logical/and.hpp
|
||||||
|
include/msgpack/preprocessor/logical/bitand.hpp
|
||||||
|
include/msgpack/preprocessor/logical/bitnor.hpp
|
||||||
|
include/msgpack/preprocessor/logical/bitor.hpp
|
||||||
|
include/msgpack/preprocessor/logical/bitxor.hpp
|
||||||
|
include/msgpack/preprocessor/logical/bool.hpp
|
||||||
|
include/msgpack/preprocessor/logical/compl.hpp
|
||||||
|
include/msgpack/preprocessor/logical/nor.hpp
|
||||||
|
include/msgpack/preprocessor/logical/not.hpp
|
||||||
|
include/msgpack/preprocessor/logical/or.hpp
|
||||||
|
include/msgpack/preprocessor/logical/xor.hpp
|
||||||
|
include/msgpack/preprocessor/max.hpp
|
||||||
|
include/msgpack/preprocessor/min.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/comma.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/comma_if.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/detail/is_begin_parens.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/is_begin_parens.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/paren.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/paren_if.hpp
|
||||||
|
include/msgpack/preprocessor/punctuation/remove_parens.hpp
|
||||||
|
include/msgpack/preprocessor/repeat.hpp
|
||||||
|
include/msgpack/preprocessor/repeat_2nd.hpp
|
||||||
|
include/msgpack/preprocessor/repeat_3rd.hpp
|
||||||
|
include/msgpack/preprocessor/repeat_from_to.hpp
|
||||||
|
include/msgpack/preprocessor/repeat_from_to_2nd.hpp
|
||||||
|
include/msgpack/preprocessor/repeat_from_to_3rd.hpp
|
||||||
|
include/msgpack/preprocessor/repetition.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/deduce_r.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/deduce_z.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/detail/dmc/for.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/detail/edg/for.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/detail/for.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/detail/msvc/for.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_binary_params.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_params.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_params_with_a_default.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_params_with_defaults.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_shifted.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_shifted_binary_params.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_shifted_params.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_trailing.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_trailing_binary_params.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/enum_trailing_params.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/for.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/repeat.hpp
|
||||||
|
include/msgpack/preprocessor/repetition/repeat_from_to.hpp
|
||||||
|
include/msgpack/preprocessor/selection.hpp
|
||||||
|
include/msgpack/preprocessor/selection/max.hpp
|
||||||
|
include/msgpack/preprocessor/selection/min.hpp
|
||||||
|
include/msgpack/preprocessor/seq.hpp
|
||||||
|
include/msgpack/preprocessor/seq/cat.hpp
|
||||||
|
include/msgpack/preprocessor/seq/detail/binary_transform.hpp
|
||||||
|
include/msgpack/preprocessor/seq/detail/is_empty.hpp
|
||||||
|
include/msgpack/preprocessor/seq/detail/split.hpp
|
||||||
|
include/msgpack/preprocessor/seq/elem.hpp
|
||||||
|
include/msgpack/preprocessor/seq/enum.hpp
|
||||||
|
include/msgpack/preprocessor/seq/filter.hpp
|
||||||
|
include/msgpack/preprocessor/seq/first_n.hpp
|
||||||
|
include/msgpack/preprocessor/seq/fold_left.hpp
|
||||||
|
include/msgpack/preprocessor/seq/fold_right.hpp
|
||||||
|
include/msgpack/preprocessor/seq/for_each.hpp
|
||||||
|
include/msgpack/preprocessor/seq/for_each_i.hpp
|
||||||
|
include/msgpack/preprocessor/seq/for_each_product.hpp
|
||||||
|
include/msgpack/preprocessor/seq/insert.hpp
|
||||||
|
include/msgpack/preprocessor/seq/pop_back.hpp
|
||||||
|
include/msgpack/preprocessor/seq/pop_front.hpp
|
||||||
|
include/msgpack/preprocessor/seq/push_back.hpp
|
||||||
|
include/msgpack/preprocessor/seq/push_front.hpp
|
||||||
|
include/msgpack/preprocessor/seq/remove.hpp
|
||||||
|
include/msgpack/preprocessor/seq/replace.hpp
|
||||||
|
include/msgpack/preprocessor/seq/rest_n.hpp
|
||||||
|
include/msgpack/preprocessor/seq/reverse.hpp
|
||||||
|
include/msgpack/preprocessor/seq/seq.hpp
|
||||||
|
include/msgpack/preprocessor/seq/size.hpp
|
||||||
|
include/msgpack/preprocessor/seq/subseq.hpp
|
||||||
|
include/msgpack/preprocessor/seq/to_array.hpp
|
||||||
|
include/msgpack/preprocessor/seq/to_list.hpp
|
||||||
|
include/msgpack/preprocessor/seq/to_tuple.hpp
|
||||||
|
include/msgpack/preprocessor/seq/transform.hpp
|
||||||
|
include/msgpack/preprocessor/seq/variadic_seq_to_seq.hpp
|
||||||
|
include/msgpack/preprocessor/slot.hpp
|
||||||
|
include/msgpack/preprocessor/slot/counter.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/counter.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/def.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/shared.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/slot1.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/slot2.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/slot3.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/slot4.hpp
|
||||||
|
include/msgpack/preprocessor/slot/detail/slot5.hpp
|
||||||
|
include/msgpack/preprocessor/slot/slot.hpp
|
||||||
|
include/msgpack/preprocessor/stringize.hpp
|
||||||
|
include/msgpack/preprocessor/tuple.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/detail/is_single_return.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/eat.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/elem.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/enum.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/insert.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/pop_back.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/pop_front.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/push_back.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/push_front.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/rem.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/remove.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/replace.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/reverse.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/size.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/to_array.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/to_list.hpp
|
||||||
|
include/msgpack/preprocessor/tuple/to_seq.hpp
|
||||||
|
include/msgpack/preprocessor/variadic.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/detail/is_single_return.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/elem.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/size.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/to_array.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/to_list.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/to_seq.hpp
|
||||||
|
include/msgpack/preprocessor/variadic/to_tuple.hpp
|
||||||
|
include/msgpack/preprocessor/while.hpp
|
||||||
|
include/msgpack/preprocessor/wstringize.hpp
|
||||||
|
include/msgpack/sbuffer.hpp
|
||||||
|
include/msgpack/sbuffer_decl.hpp
|
||||||
|
include/msgpack/type.hpp
|
||||||
|
include/msgpack/unpack.hpp
|
||||||
|
include/msgpack/unpack_decl.hpp
|
||||||
|
include/msgpack/unpack_exception.hpp
|
||||||
|
include/msgpack/v1/adaptor/adaptor_base.hpp
|
||||||
|
include/msgpack/v1/adaptor/adaptor_base_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/array_ref.hpp
|
||||||
|
include/msgpack/v1/adaptor/array_ref_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/bool.hpp
|
||||||
|
include/msgpack/v1/adaptor/boost/fusion.hpp
|
||||||
|
include/msgpack/v1/adaptor/boost/msgpack_variant.hpp
|
||||||
|
include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/boost/optional.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/char_ptr.hpp
|
||||||
|
include/msgpack/v1/adaptor/check_container_size.hpp
|
||||||
|
include/msgpack/v1/adaptor/check_container_size_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/array.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/array_char.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/forward_list.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/reference_wrapper.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/shared_ptr.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/tuple.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/unique_ptr.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/unordered_map.hpp
|
||||||
|
include/msgpack/v1/adaptor/cpp11/unordered_set.hpp
|
||||||
|
include/msgpack/v1/adaptor/define.hpp
|
||||||
|
include/msgpack/v1/adaptor/define_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/deque.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp03_define_array.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp03_define_map.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp11_define_array.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp11_define_array_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp11_define_map.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp11_define_map_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp
|
||||||
|
include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/ext.hpp
|
||||||
|
include/msgpack/v1/adaptor/ext_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/fixint.hpp
|
||||||
|
include/msgpack/v1/adaptor/fixint_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/float.hpp
|
||||||
|
include/msgpack/v1/adaptor/int.hpp
|
||||||
|
include/msgpack/v1/adaptor/int_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/list.hpp
|
||||||
|
include/msgpack/v1/adaptor/map.hpp
|
||||||
|
include/msgpack/v1/adaptor/map_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/msgpack_tuple.hpp
|
||||||
|
include/msgpack/v1/adaptor/msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/nil.hpp
|
||||||
|
include/msgpack/v1/adaptor/nil_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/pair.hpp
|
||||||
|
include/msgpack/v1/adaptor/raw.hpp
|
||||||
|
include/msgpack/v1/adaptor/raw_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/set.hpp
|
||||||
|
include/msgpack/v1/adaptor/size_equal_only.hpp
|
||||||
|
include/msgpack/v1/adaptor/size_equal_only_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/string.hpp
|
||||||
|
include/msgpack/v1/adaptor/tr1/unordered_map.hpp
|
||||||
|
include/msgpack/v1/adaptor/tr1/unordered_set.hpp
|
||||||
|
include/msgpack/v1/adaptor/v4raw.hpp
|
||||||
|
include/msgpack/v1/adaptor/v4raw_decl.hpp
|
||||||
|
include/msgpack/v1/adaptor/vector.hpp
|
||||||
|
include/msgpack/v1/adaptor/vector_bool.hpp
|
||||||
|
include/msgpack/v1/adaptor/vector_char.hpp
|
||||||
|
include/msgpack/v1/adaptor/vector_unsigned_char.hpp
|
||||||
|
include/msgpack/v1/cpp_config.hpp
|
||||||
|
include/msgpack/v1/cpp_config_decl.hpp
|
||||||
|
include/msgpack/v1/detail/cpp03_zone.hpp
|
||||||
|
include/msgpack/v1/detail/cpp03_zone_decl.hpp
|
||||||
|
include/msgpack/v1/detail/cpp11_zone.hpp
|
||||||
|
include/msgpack/v1/detail/cpp11_zone_decl.hpp
|
||||||
|
include/msgpack/v1/fbuffer.hpp
|
||||||
|
include/msgpack/v1/fbuffer_decl.hpp
|
||||||
|
include/msgpack/v1/iterator.hpp
|
||||||
|
include/msgpack/v1/iterator_decl.hpp
|
||||||
|
include/msgpack/v1/meta.hpp
|
||||||
|
include/msgpack/v1/meta_decl.hpp
|
||||||
|
include/msgpack/v1/object.hpp
|
||||||
|
include/msgpack/v1/object_decl.hpp
|
||||||
|
include/msgpack/v1/object_fwd.hpp
|
||||||
|
include/msgpack/v1/object_fwd_decl.hpp
|
||||||
|
include/msgpack/v1/pack.hpp
|
||||||
|
include/msgpack/v1/pack_decl.hpp
|
||||||
|
include/msgpack/v1/parse_return.hpp
|
||||||
|
include/msgpack/v1/preprocessor.hpp
|
||||||
|
include/msgpack/v1/sbuffer.hpp
|
||||||
|
include/msgpack/v1/sbuffer_decl.hpp
|
||||||
|
include/msgpack/v1/unpack.hpp
|
||||||
|
include/msgpack/v1/unpack_decl.hpp
|
||||||
|
include/msgpack/v1/unpack_exception.hpp
|
||||||
|
include/msgpack/v1/version.hpp
|
||||||
|
include/msgpack/v1/versioning.hpp
|
||||||
|
include/msgpack/v1/vrefbuffer.hpp
|
||||||
|
include/msgpack/v1/vrefbuffer_decl.hpp
|
||||||
|
include/msgpack/v1/zbuffer.hpp
|
||||||
|
include/msgpack/v1/zbuffer_decl.hpp
|
||||||
|
include/msgpack/v1/zone.hpp
|
||||||
|
include/msgpack/v1/zone_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/adaptor_base.hpp
|
||||||
|
include/msgpack/v2/adaptor/adaptor_base_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/array_ref_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/check_container_size_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/define_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/detail/cpp03_define_array_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/detail/cpp03_define_map_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/detail/cpp03_msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/detail/cpp11_define_array_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/detail/cpp11_define_map_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/ext_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/fixint_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/int_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/map_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/msgpack_tuple_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/nil_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/raw_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/size_equal_only_decl.hpp
|
||||||
|
include/msgpack/v2/adaptor/v4raw_decl.hpp
|
||||||
|
include/msgpack/v2/cpp_config_decl.hpp
|
||||||
|
include/msgpack/v2/create_object_visitor.hpp
|
||||||
|
include/msgpack/v2/detail/cpp03_zone_decl.hpp
|
||||||
|
include/msgpack/v2/detail/cpp11_zone_decl.hpp
|
||||||
|
include/msgpack/v2/fbuffer_decl.hpp
|
||||||
|
include/msgpack/v2/iterator_decl.hpp
|
||||||
|
include/msgpack/v2/meta_decl.hpp
|
||||||
|
include/msgpack/v2/null_visitor.hpp
|
||||||
|
include/msgpack/v2/object.hpp
|
||||||
|
include/msgpack/v2/object_decl.hpp
|
||||||
|
include/msgpack/v2/object_fwd.hpp
|
||||||
|
include/msgpack/v2/object_fwd_decl.hpp
|
||||||
|
include/msgpack/v2/pack_decl.hpp
|
||||||
|
include/msgpack/v2/parse.hpp
|
||||||
|
include/msgpack/v2/parse_return.hpp
|
||||||
|
include/msgpack/v2/sbuffer_decl.hpp
|
||||||
|
include/msgpack/v2/unpack.hpp
|
||||||
|
include/msgpack/v2/unpack_decl.hpp
|
||||||
|
include/msgpack/v2/vrefbuffer_decl.hpp
|
||||||
|
include/msgpack/v2/x3_parse.hpp
|
||||||
|
include/msgpack/v2/x3_unpack.hpp
|
||||||
|
include/msgpack/v2/zbuffer_decl.hpp
|
||||||
|
include/msgpack/v2/zone_decl.hpp
|
||||||
|
include/msgpack/version.hpp
|
||||||
|
include/msgpack/versioning.hpp
|
||||||
|
include/msgpack/vrefbuffer.hpp
|
||||||
|
include/msgpack/vrefbuffer_decl.hpp
|
||||||
|
include/msgpack/zbuffer.hpp
|
||||||
|
include/msgpack/zbuffer_decl.hpp
|
||||||
|
include/msgpack/zone.hpp
|
||||||
|
include/msgpack/zone_decl.hpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
20
Makefile.am
20
Makefile.am
@@ -1,20 +0,0 @@
|
|||||||
SUBDIRS = src test
|
|
||||||
|
|
||||||
DOC_FILES = \
|
|
||||||
Doxyfile \
|
|
||||||
README.md \
|
|
||||||
LICENSE_1_0.txt \
|
|
||||||
NOTICE \
|
|
||||||
msgpack_vc8.vcproj \
|
|
||||||
msgpack_vc8.sln
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
|
||||||
$(DOC_FILES) CMakeLists.txt test/CMakeLists.txt example
|
|
||||||
|
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
|
||||||
pkgconfig_DATA = msgpack.pc
|
|
||||||
|
|
||||||
doxygen:
|
|
||||||
./preprocess clean
|
|
||||||
cd src && $(MAKE) doxygen
|
|
||||||
./preprocess
|
|
@@ -31,11 +31,11 @@ int main(void) {
|
|||||||
msgpack::pack(sbuf, vec);
|
msgpack::pack(sbuf, vec);
|
||||||
|
|
||||||
// deserialize it.
|
// deserialize it.
|
||||||
msgpack::unpacked msg;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(&msg, sbuf.data(), sbuf.size());
|
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||||
|
|
||||||
// print the deserialized object.
|
// print the deserialized object.
|
||||||
msgpack::object obj = msg.get();
|
msgpack::object obj = oh.get();
|
||||||
std::cout << obj << std::endl; //=> ["Hello", "MessagePack"]
|
std::cout << obj << std::endl; //=> ["Hello", "MessagePack"]
|
||||||
|
|
||||||
// convert it into statically typed object.
|
// convert it into statically typed object.
|
||||||
@@ -47,13 +47,11 @@ int main(void) {
|
|||||||
Compile it as follows:
|
Compile it as follows:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT hello.cc -o hello
|
$ g++ -Ipath_to_msgpack/include hello.cc -o hello
|
||||||
$ ./hello
|
$ ./hello
|
||||||
["Hello", "MessagePack"]
|
["Hello", "MessagePack"]
|
||||||
```
|
```
|
||||||
|
|
||||||
See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140).
|
|
||||||
|
|
||||||
## Streaming feature
|
## Streaming feature
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
@@ -79,13 +77,13 @@ int main(void) {
|
|||||||
pac.buffer_consumed(buffer.size());
|
pac.buffer_consumed(buffer.size());
|
||||||
|
|
||||||
// now starts streaming deserialization.
|
// now starts streaming deserialization.
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh;
|
||||||
while(pac.next(&result)) {
|
while(pac.next(oh)) {
|
||||||
std::cout << result.get() << std::endl;
|
std::cout << oh.get() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// results:
|
// results:
|
||||||
// $ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT stream.cc -o stream
|
// $ g++ -Ipath_to_msgpack/include stream.cc -o stream
|
||||||
// $ ./stream
|
// $ ./stream
|
||||||
// "Log message ... 1"
|
// "Log message ... 1"
|
||||||
// "Log message ... 2"
|
// "Log message ... 2"
|
||||||
@@ -93,8 +91,6 @@ int main(void) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140).
|
|
||||||
|
|
||||||
### Streaming into an array or map
|
### Streaming into an array or map
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
@@ -151,10 +147,10 @@ int main(void) {
|
|||||||
msgpack::sbuffer sbuf;
|
msgpack::sbuffer sbuf;
|
||||||
msgpack::pack(sbuf, vec);
|
msgpack::pack(sbuf, vec);
|
||||||
|
|
||||||
msgpack::unpacked msg;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(&msg, sbuf.data(), sbuf.size());
|
msgpack::unpack(sbuf.data(), sbuf.size());
|
||||||
|
|
||||||
msgpack::object obj = msg.get();
|
msgpack::object obj = oh.get();
|
||||||
|
|
||||||
// you can convert object to myclass directly
|
// you can convert object to myclass directly
|
||||||
std::vector<myclass> rvec;
|
std::vector<myclass> rvec;
|
||||||
|
48
README.md
48
README.md
@@ -1,7 +1,7 @@
|
|||||||
`msgpack` for C/C++
|
`msgpack` for C/C++
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Version 1.4.0 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
|
Version 2.1.2 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
|
||||||
|
|
||||||
It's like JSON but small and fast.
|
It's like JSON but small and fast.
|
||||||
|
|
||||||
@@ -83,12 +83,11 @@ int main(void)
|
|||||||
// deserialize the buffer into msgpack::object instance.
|
// deserialize the buffer into msgpack::object instance.
|
||||||
std::string str(buffer.str());
|
std::string str(buffer.str());
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
|
msgpack::unpack(str.data(), str.size());
|
||||||
|
|
||||||
msgpack::unpack(result, str.data(), str.size());
|
// deserialized object is valid during the msgpack::object_handle instance is alive.
|
||||||
|
msgpack::object deserialized = oh.get();
|
||||||
// deserialized object is valid during the msgpack::unpacked instance alive.
|
|
||||||
msgpack::object deserialized = result.get();
|
|
||||||
|
|
||||||
// msgpack::object supports ostream.
|
// msgpack::object supports ostream.
|
||||||
std::cout << deserialized << std::endl;
|
std::cout << deserialized << std::endl;
|
||||||
@@ -112,9 +111,7 @@ Usage
|
|||||||
When you use msgpack on C++03 and C++11, you can just add
|
When you use msgpack on C++03 and C++11, you can just add
|
||||||
msgpack-c/include to your include path:
|
msgpack-c/include to your include path:
|
||||||
|
|
||||||
g++ -I msgpack-c/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT your_source_file.cpp
|
g++ -I msgpack-c/include your_source_file.cpp
|
||||||
|
|
||||||
See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140).
|
|
||||||
|
|
||||||
If you want to use C version of msgpack, you need to build it. You can
|
If you want to use C version of msgpack, you need to build it. You can
|
||||||
also install the C and C++ versions of msgpack.
|
also install the C and C++ versions of msgpack.
|
||||||
@@ -123,36 +120,7 @@ also install the C and C++ versions of msgpack.
|
|||||||
|
|
||||||
#### Install from git repository
|
#### Install from git repository
|
||||||
|
|
||||||
##### Using autotools
|
##### Using the Terminal (CLI)
|
||||||
|
|
||||||
You will need:
|
|
||||||
|
|
||||||
- `gcc >= 4.1.0` or `clang >= 3.3.0`
|
|
||||||
- `autoconf >= 2.60`
|
|
||||||
- `automake >= 1.10`
|
|
||||||
- `libtool >= 2.2.4`
|
|
||||||
|
|
||||||
The build steps below are for C and C++03. If compiling for C++11,
|
|
||||||
add `-std=c++11` to the environmental variable `CXXFLAGS` with
|
|
||||||
`export CXXFLAGS="$CXXFLAGS -std=c++11"` prior to following the
|
|
||||||
directions below.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ git clone https://github.com/msgpack/msgpack-c
|
|
||||||
$ cd msgpack-c
|
|
||||||
$ ./bootstrap
|
|
||||||
$ ./configure
|
|
||||||
$ make
|
|
||||||
```
|
|
||||||
|
|
||||||
You can install the resulting library like this:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ sudo make install
|
|
||||||
```
|
|
||||||
##### Using cmake
|
|
||||||
|
|
||||||
###### Using the Terminal (CLI)
|
|
||||||
|
|
||||||
You will need:
|
You will need:
|
||||||
|
|
||||||
@@ -175,7 +143,7 @@ execute the following commands:
|
|||||||
$ cmake -DMSGPACK_CXX11=ON .
|
$ cmake -DMSGPACK_CXX11=ON .
|
||||||
$ sudo make install
|
$ sudo make install
|
||||||
|
|
||||||
##### GUI on Windows
|
#### GUI on Windows
|
||||||
|
|
||||||
Clone msgpack-c git repository.
|
Clone msgpack-c git repository.
|
||||||
|
|
||||||
|
66
appveyor.yml
66
appveyor.yml
@@ -1,42 +1,58 @@
|
|||||||
version: 1.1.0.{build}
|
version: 2.1.2.{build}
|
||||||
before_build:
|
|
||||||
- appveyor DownloadFile http://googletest.googlecode.com/files/gtest-1.7.0.zip -FileName gtest-1.7.0.zip
|
image:
|
||||||
- 7z x gtest-1.7.0.zip > NUL
|
- Visual Studio 2015
|
||||||
- cd gtest-1.7.0
|
environment:
|
||||||
|
global:
|
||||||
|
BOOST_ROOT: C:\Libraries\boost_1_60_0
|
||||||
|
matrix:
|
||||||
|
- cpp11: -DMSGPACK_CXX11=OFF
|
||||||
|
boost: -DMSGPACK_BOOST=OFF
|
||||||
|
msvc: '"Visual Studio 10 2010"'
|
||||||
|
- cpp11: -DMSGPACK_CXX11=OFF
|
||||||
|
boost: -DMSGPACK_BOOST=OFF
|
||||||
|
msvc: '"Visual Studio 11 2012"'
|
||||||
|
- cpp11: -DMSGPACK_CXX11=OFF
|
||||||
|
boost: -DMSGPACK_BOOST=OFF
|
||||||
|
msvc: '"Visual Studio 12 2013"'
|
||||||
|
- cpp11: -DMSGPACK_CXX11=ON
|
||||||
|
boost: -DMSGPACK_BOOST=ON
|
||||||
|
msvc: '"Visual Studio 14 2015"'
|
||||||
|
- cpp11: -DMSGPACK_CXX11=OFF
|
||||||
|
boost: -DMSGPACK_BOOST=ON
|
||||||
|
msvc: '"Visual Studio 14 2015"'
|
||||||
|
- cpp11: -DMSGPACK_CXX11=ON
|
||||||
|
boost: -DMSGPACK_BOOST=OFF
|
||||||
|
msvc: '"Visual Studio 14 2015"'
|
||||||
|
- cpp11: -DMSGPACK_CXX11=OFF
|
||||||
|
boost: -DMSGPACK_BOOST=OFF
|
||||||
|
msvc: '"Visual Studio 14 2015"'
|
||||||
|
build_script:
|
||||||
|
- appveyor DownloadFile https://github.com/google/googletest/archive/release-1.7.0.zip -FileName googletest-release-1.7.0.zip
|
||||||
|
- 7z x googletest-release-1.7.0.zip > NUL
|
||||||
|
- cd googletest-release-1.7.0
|
||||||
- md build
|
- md build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake -DBUILD_SHARED_LIBS=ON ..
|
- cmake -G %msvc% -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_FLAGS=/D_VARIADIC_MAX=10 ..
|
||||||
- cmake --build . --config Release
|
- cmake --build . --config Release
|
||||||
- cd ..
|
- cd ..
|
||||||
- cd ..
|
- cd ..
|
||||||
- appveyor DownloadFile http://zlib.net/zlib-1.2.8.tar.gz -FileName zlib-1.2.8.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.8.tar.gz > NUL
|
- 7z x zlib-1.2.11.tar.gz > NUL
|
||||||
- 7z x zlib-1.2.8.tar > NUL
|
- 7z x zlib-1.2.11.tar > NUL
|
||||||
- cd zlib-1.2.8
|
- cd zlib-1.2.11
|
||||||
- md build
|
- md build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake ..
|
- cmake -G %msvc% ..
|
||||||
- cmake --build . --config Release
|
- cmake --build . --config Release
|
||||||
- copy zconf.h ..
|
- copy zconf.h ..
|
||||||
- cd ..
|
- cd ..
|
||||||
- cd ..
|
- cd ..
|
||||||
|
|
||||||
environment:
|
|
||||||
matrix:
|
|
||||||
- cpp11: -DMSGPACK_CXX11=ON
|
|
||||||
boost: -DMSGPACK_BOOST=ON
|
|
||||||
- cpp11: -DMSGPACK_CXX11=OFF
|
|
||||||
boost: -DMSGPACK_BOOST=ON
|
|
||||||
- cpp11: -DMSGPACK_CXX11=ON
|
|
||||||
boost: -DMSGPACK_BOOST=OFF
|
|
||||||
- cpp11: -DMSGPACK_CXX11=OFF
|
|
||||||
boost: -DMSGPACK_BOOST=OFF
|
|
||||||
build_script:
|
|
||||||
- md build
|
- md build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake %cpp11% %boost% -DMSGPACK_BOOST_DIR=C:\Libraries\\boost_1_58_0 -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8 ..
|
- 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%\gtest-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8\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
|
||||||
|
121
bootstrap
121
bootstrap
@@ -1,121 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# vim:ts=4:sw=4
|
|
||||||
# Calls autotools to build configure script and Makefile.in.
|
|
||||||
# Generated automatically using bootstrapper 0.2.1
|
|
||||||
# http://bootstrapper.sourceforge.net/
|
|
||||||
#
|
|
||||||
# Copyright (C) 2002 Anthony Ventimiglia
|
|
||||||
#
|
|
||||||
# This bootstrap script is free software; you can redistribute
|
|
||||||
# it and/or modify it under the terms of the GNU General Public
|
|
||||||
# License as published by the Free Software Foundation; either
|
|
||||||
# version 2 of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Calls proper programs to create configure script and Makefile.in files.
|
|
||||||
# if run with the --clean option, bootstrap removes files it generates. To
|
|
||||||
# clean all autogenerated files (eg: for cvs imports) first run
|
|
||||||
# make distclean, then bootstrap --clean
|
|
||||||
# see bootstrapper(1) for more infor
|
|
||||||
|
|
||||||
|
|
||||||
if test x"$1" = x"--help"; then
|
|
||||||
echo "$0: automatic bootstrapping utility for GNU Autotools"
|
|
||||||
echo " cleans up old autogenerated files and runs autoconf,"
|
|
||||||
echo " automake and aclocal on local directory"
|
|
||||||
echo
|
|
||||||
echo " --clean clean up auto-generated files without"
|
|
||||||
echo " creating new scripts"
|
|
||||||
echo
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p ac
|
|
||||||
test -f AUTHORS || touch AUTHORS
|
|
||||||
test -f COPYING || touch COPYING
|
|
||||||
test -f ChangeLog || cp -f CHANGELOG.md ChangeLog
|
|
||||||
test -f NEWS || touch NEWS
|
|
||||||
test -f NOTICE || touch NOTICE
|
|
||||||
test -f README || cp -f README.md README
|
|
||||||
|
|
||||||
ACLOCAL="aclocal"
|
|
||||||
ACLOCAL_FILES="aclocal.m4"
|
|
||||||
ALWAYS_CLEAN="config.status config.log config.cache libtool"
|
|
||||||
AUTOCONF="autoconf"
|
|
||||||
AUTOCONF_FILES="configure"
|
|
||||||
AUTOHEADER="autoheader"
|
|
||||||
AUTOHEADER_FILES=""
|
|
||||||
AUTOMAKE="automake --add-missing --copy"
|
|
||||||
AUTOMAKE_FILES="config.sub stamp-h.in ltmain.sh missing mkinstalldirs install-sh config.guess"
|
|
||||||
CONFIG_AUX_DIR="."
|
|
||||||
CONFIG_FILES="stamp-h ltconfig"
|
|
||||||
CONFIG_HEADER=""
|
|
||||||
if [ x`uname` = x"Darwin" ]; then
|
|
||||||
LIBTOOLIZE="glibtoolize --force --copy"
|
|
||||||
else
|
|
||||||
LIBTOOLIZE="libtoolize --force --copy"
|
|
||||||
fi
|
|
||||||
LIBTOOLIZE_FILES="config.sub ltmain.sh config.guess"
|
|
||||||
RM="rm"
|
|
||||||
SUBDIRS="[]"
|
|
||||||
|
|
||||||
|
|
||||||
# These are files created by configure, so we'll always clean them
|
|
||||||
for i in $ALWAYS_CLEAN; do
|
|
||||||
test -f $i && \
|
|
||||||
$RM $i
|
|
||||||
done
|
|
||||||
|
|
||||||
if test x"$1" = x"--clean"; then
|
|
||||||
#
|
|
||||||
#Clean Files left by previous bootstrap run
|
|
||||||
#
|
|
||||||
if test -n "$CONFIG_AUX_DIR";
|
|
||||||
then CONFIG_AUX_DIR="$CONFIG_AUX_DIR/"
|
|
||||||
fi
|
|
||||||
# Clean Libtoolize generated files
|
|
||||||
for cf in $LIBTOOLIZE_FILES; do
|
|
||||||
cf="$CONFIG_AUX_DIR$cf"
|
|
||||||
test -f $cf && \
|
|
||||||
$RM $cf
|
|
||||||
done
|
|
||||||
#aclocal.m4 created by aclocal
|
|
||||||
test -f $ACLOCAL_FILES && $RM $ACLOCAL_FILES
|
|
||||||
#Clean Autoheader Generated files
|
|
||||||
for cf in $AUTOHEADER_FILES; do
|
|
||||||
cf=$CONFIG_AUX_DIR$cf
|
|
||||||
test -f $cf && \
|
|
||||||
$RM $cf
|
|
||||||
done
|
|
||||||
# remove config header (Usaually config.h)
|
|
||||||
test -n "$CONFIG_HEADER" && test -f $CONFIG_HEADER && $RM $CONFIG_HEADER
|
|
||||||
#Clean Automake generated files
|
|
||||||
for cf in $AUTOMAKE_FILES; do
|
|
||||||
cf=$CONFIG_AUX_DIR$cf
|
|
||||||
test -f $cf && \
|
|
||||||
$RM $cf
|
|
||||||
done
|
|
||||||
for i in $SUBDIRS; do
|
|
||||||
test -f $i/Makefile.in && \
|
|
||||||
$RM $i/Makefile.in
|
|
||||||
done
|
|
||||||
#Autoconf generated files
|
|
||||||
for cf in $AUTOCONF_FILES; do
|
|
||||||
test -f $cf && \
|
|
||||||
$RM $cf
|
|
||||||
done
|
|
||||||
for cf in $CONFIG_FILES; do
|
|
||||||
cf="$CONFIG_AUX_DIR$cf"
|
|
||||||
test -f $cf && \
|
|
||||||
$RM $cf
|
|
||||||
done
|
|
||||||
else
|
|
||||||
$LIBTOOLIZE
|
|
||||||
$ACLOCAL
|
|
||||||
$AUTOHEADER
|
|
||||||
$AUTOMAKE
|
|
||||||
$AUTOCONF
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
@@ -1,63 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
./bootstrap
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $1 = "cpp11" ]
|
|
||||||
then
|
|
||||||
cpp11="-std=c++11"
|
|
||||||
else
|
|
||||||
cpp11=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $2 = "32" ]
|
|
||||||
then
|
|
||||||
bit32="-m32"
|
|
||||||
else
|
|
||||||
bit32=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $3 = "boost" ]
|
|
||||||
then
|
|
||||||
boost="-DMSGPACK_USE_BOOST"
|
|
||||||
else
|
|
||||||
boost=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
./configure CFLAGS="$bit32 -f${CHAR_SIGN}-char" CXXFLAGS="$bit32 -f${CHAR_SIGN}-char $cpp11 $boost -I$4"
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
make check
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
make install DESTDIR=`pwd`/build/install
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
@@ -16,42 +16,14 @@ then
|
|||||||
exit $ret
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $1 = "cpp11" ]
|
if [ "${ARCH}" == "32" ]
|
||||||
then
|
then
|
||||||
cpp11="-DMSGPACK_CXX11=ON"
|
export BIT32="ON"
|
||||||
else
|
else
|
||||||
cpp11=""
|
export BIT32="OFF"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $2 = "32" ]
|
cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DMSGPACK_ENABLE_SHARED=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} ..
|
||||||
then
|
|
||||||
bit32="-DMSGPACK_32BIT=ON"
|
|
||||||
else
|
|
||||||
bit32=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $3 = "boost" ]
|
|
||||||
then
|
|
||||||
boost="-DMSGPACK_BOOST=ON"
|
|
||||||
else
|
|
||||||
boost=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$4" != "" ]
|
|
||||||
then
|
|
||||||
boost_dir="-DMSGPACK_BOOST_DIR=$4"
|
|
||||||
else
|
|
||||||
boost_dir=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$5" = "OFF" ]
|
|
||||||
then
|
|
||||||
shared="-DMSGPACK_ENABLE_SHARED=OFF"
|
|
||||||
else
|
|
||||||
shared=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmake $cpp11 $bit32 $boost $boost_dir $shared -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} ..
|
|
||||||
|
|
||||||
ret=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]
|
if [ $ret -ne 0 ]
|
||||||
@@ -83,7 +55,7 @@ then
|
|||||||
exit $ret
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$2" != "32" ]
|
if [ "${ARCH}" != "32" ] && [ `uname` = "Linux" ]
|
||||||
then
|
then
|
||||||
ctest -T memcheck | tee memcheck.log
|
ctest -T memcheck | tee memcheck.log
|
||||||
|
|
||||||
|
98
configure.in
98
configure.in
@@ -1,98 +0,0 @@
|
|||||||
AC_INIT(msgpack, m4_esyscmd([cat include/msgpack/version_master.h | tr -d "\n" | sed -e 's/#define MSGPACK_VERSION_MAJOR[[:space:]]*\([[:alnum:]]*\)/\1./g' -e 's/#define MSGPACK_VERSION_MINOR[[:space:]]*\([[:alnum:]]*\)/\1./g' -e 's/#define MSGPACK_VERSION_REVISION[[:space:]]*\([[:alnum:]]*\)/\1/g' | tr -d "\n"]))
|
|
||||||
AC_CONFIG_AUX_DIR(ac)
|
|
||||||
AM_INIT_AUTOMAKE
|
|
||||||
AC_CONFIG_HEADER(config.h)
|
|
||||||
AC_SUBST(CFLAGS)
|
|
||||||
CFLAGS="-O3 -Wall -Wextra -Werror $CFLAGS"
|
|
||||||
|
|
||||||
AC_SUBST(CXXFLAGS)
|
|
||||||
CXXFLAGS="-O3 -Wall -Wextra -Wno-mismatched-tags -Werror $CXXFLAGS"
|
|
||||||
|
|
||||||
|
|
||||||
AC_PROG_CC
|
|
||||||
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if C++ API is enabled])
|
|
||||||
AC_ARG_ENABLE(cxx,
|
|
||||||
AS_HELP_STRING([--disable-cxx],
|
|
||||||
[don't build C++ API]) ) #'
|
|
||||||
AC_MSG_RESULT([$enable_cxx])
|
|
||||||
if test "$enable_cxx" != "no"; then
|
|
||||||
AC_PROG_CXX
|
|
||||||
AM_PROG_CC_C_O
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(ENABLE_CXX, test "$enable_cxx" != "no")
|
|
||||||
|
|
||||||
|
|
||||||
AC_PROG_LIBTOOL
|
|
||||||
AM_PROG_AS
|
|
||||||
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([if debug option is enabled])
|
|
||||||
AC_ARG_ENABLE(debug,
|
|
||||||
AS_HELP_STRING([--disable-debug],
|
|
||||||
[disable assert macros and omit -g option]) )
|
|
||||||
AC_MSG_RESULT([$enable_debug])
|
|
||||||
if test "$enable_debug" != "no"; then
|
|
||||||
CXXFLAGS="$CXXFLAGS -g"
|
|
||||||
CFLAGS="$CFLAGS -g"
|
|
||||||
else
|
|
||||||
CXXFLAGS="$CXXFLAGS -DNDEBUG"
|
|
||||||
CFLAGS="$CFLAGS -DNDEBUG"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([for __sync_* atomic operations], msgpack_cv_atomic_ops, [
|
|
||||||
AC_TRY_LINK([
|
|
||||||
int atomic_sub(int i) { return __sync_sub_and_fetch(&i, 1); }
|
|
||||||
int atomic_add(int i) { return __sync_add_and_fetch(&i, 1); }
|
|
||||||
], [atomic_sub(1); atomic_add(1);], msgpack_cv_atomic_ops="yes")
|
|
||||||
])
|
|
||||||
if test "$msgpack_cv_atomic_ops" != "yes"; then
|
|
||||||
if test "$enable_cxx" = "no"; then
|
|
||||||
AC_MSG_ERROR([__sync_* atomic operations are not found. Try to enable C++ support.
|
|
||||||
If you are using gcc >= 4.1 and the default target CPU architecture is "i386", try to
|
|
||||||
add CFLAGS="-march=i686" and CXXFLAGS="-march=i686" options to ./configure as follows:
|
|
||||||
|
|
||||||
$ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686"
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_LANG_PUSH([C++])
|
|
||||||
AC_CACHE_CHECK([for __gnu_cxx::__exchange_and_add], msgpack_cv_gcc_cxx_atomic_ops, [
|
|
||||||
AC_TRY_LINK([
|
|
||||||
#include <bits/atomicity.h>
|
|
||||||
int atomic_sub(int i) { return __gnu_cxx::__exchange_and_add(&i, -1) - 1; }
|
|
||||||
int atomic_add(int i) { return __gnu_cxx::__exchange_and_add(&i, 1) + 1; }
|
|
||||||
], [atomic_sub(1); atomic_add(1);], msgpack_cv_gcc_cxx_atomic_ops="yes")
|
|
||||||
])
|
|
||||||
AC_LANG_POP([C++])
|
|
||||||
|
|
||||||
if test "$msgpack_cv_gcc_cxx_atomic_ops" != "yes"; then
|
|
||||||
AC_MSG_ERROR([__sync_* atomic operations nor __gnu_cxx::__exchange_and_add are not found.
|
|
||||||
|
|
||||||
If you are using gcc >= 4.1 and the default target CPU architecture is "i386", try to
|
|
||||||
add CFLAGS="-march=i686" and CXXFLAGS="-march=i686" options to ./configure as follows:
|
|
||||||
|
|
||||||
$ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686"
|
|
||||||
])
|
|
||||||
|
|
||||||
else
|
|
||||||
enable_gcc_cxx_atomic=yes
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL(ENABLE_GCC_CXX_ATOMIC, test "$enable_gcc_cxx_atomic" = "yes")
|
|
||||||
|
|
||||||
major=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\1/'`
|
|
||||||
minor=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\2/'`
|
|
||||||
revision=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\3/'`
|
|
||||||
AC_SUBST(VERSION_MAJOR, $major)
|
|
||||||
AC_SUBST(VERSION_MINOR, $minor)
|
|
||||||
AC_SUBST(VERSION_REVISION, $revision)
|
|
||||||
|
|
||||||
|
|
||||||
AC_OUTPUT([Makefile
|
|
||||||
msgpack.pc
|
|
||||||
src/Makefile
|
|
||||||
test/Makefile])
|
|
@@ -1,91 +1,27 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
#ifndef MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
|
||||||
#define MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
#define MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp"
|
||||||
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
|
||||||
#define MSGPACK_DEFINE_ARRAY(...) \
|
|
||||||
template <typename Packer> \
|
|
||||||
void msgpack_pack(Packer& pk) const \
|
|
||||||
{ \
|
|
||||||
msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
|
|
||||||
} \
|
|
||||||
void msgpack_unpack(msgpack::object const& o) \
|
|
||||||
{ \
|
|
||||||
msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
|
|
||||||
}\
|
|
||||||
template <typename MSGPACK_OBJECT> \
|
|
||||||
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
|
||||||
{ \
|
|
||||||
msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this)))
|
|
||||||
|
|
||||||
// MSGPACK_ADD_ENUM must be used in the global namespace.
|
|
||||||
#define MSGPACK_ADD_ENUM(enum_name) \
|
|
||||||
namespace msgpack { \
|
|
||||||
/** @cond */ \
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
|
||||||
/** @endcond */ \
|
|
||||||
namespace adaptor { \
|
|
||||||
template<> \
|
|
||||||
struct convert<enum_name> { \
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\
|
|
||||||
int tmp; \
|
|
||||||
o >> tmp; \
|
|
||||||
v = static_cast<enum_name>(tmp); \
|
|
||||||
return o; \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
template<> \
|
|
||||||
struct object<enum_name> { \
|
|
||||||
void operator()(msgpack::object& o, const enum_name& v) const {\
|
|
||||||
o << static_cast<int>(v); \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
template<> \
|
|
||||||
struct object_with_zone<enum_name> { \
|
|
||||||
void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \
|
|
||||||
o << static_cast<int>(v); \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
template<> \
|
|
||||||
struct pack<enum_name> { \
|
|
||||||
template <typename Stream> \
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \
|
|
||||||
return o << static_cast<int>(v); \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
} \
|
|
||||||
/** @cond */ \
|
|
||||||
} \
|
|
||||||
/** @endcond */ \
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
/// @cond
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
/// @endcond
|
/// @endcond
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<% GENERATION_LIMIT = 31 %>
|
<% GENERATION_LIMIT = 31 %>
|
||||||
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
|
||||||
struct define_array;
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct define_array<> {
|
struct define_array<> {
|
||||||
typedef define_array<> value_type;
|
typedef define_array<> value_type;
|
||||||
@@ -102,7 +38,7 @@ struct define_array<> {
|
|||||||
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
||||||
{
|
{
|
||||||
o->type = msgpack::type::ARRAY;
|
o->type = msgpack::type::ARRAY;
|
||||||
o->via.array.ptr = nullptr;
|
o->via.array.ptr = MSGPACK_NULLPTR;
|
||||||
o->via.array.size = 0;
|
o->via.array.size = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -130,7 +66,9 @@ 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
|
||||||
|
<%}%>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -169,5 +107,4 @@ inline define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_array(A0& a0
|
|||||||
/// @endcond
|
/// @endcond
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
|
||||||
#endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
|
42
erb/v1/cpp03_define_array_decl.hpp.erb
Normal file
42
erb/v1/cpp03_define_array_decl.hpp.erb
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2008-2016 FURUHASHI Sadayuki and 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_CPP03_DEFINE_ARRAY_DECL_HPP
|
||||||
|
#define MSGPACK_V1_CPP03_DEFINE_ARRAY_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
namespace type {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<% GENERATION_LIMIT = 31 %>
|
||||||
|
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
||||||
|
struct define_array;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
define_array<> make_define_array();
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
inline define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_array(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>);
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_DECL_HPP
|
@@ -1,70 +1,21 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2015-2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP03_DEFINE_MAP_HPP
|
#ifndef MSGPACK_V1_CPP03_DEFINE_MAP_HPP
|
||||||
#define MSGPACK_CPP03_DEFINE_MAP_HPP
|
#define MSGPACK_V1_CPP03_DEFINE_MAP_HPP
|
||||||
|
|
||||||
// BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp
|
#include "msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp"
|
||||||
// http://www.boost.org/libs/preprocessor/doc/ref/variadics.html
|
|
||||||
// However, supporting compiler detection is not complete. msgpack-c requires
|
|
||||||
// variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly.
|
|
||||||
#if !defined(MSGPACK_PP_VARIADICS)
|
|
||||||
#define MSGPACK_PP_VARIADICS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <msgpack/preprocessor.hpp>
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
|
||||||
#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \
|
#include <map>
|
||||||
MSGPACK_PP_IF( \
|
|
||||||
MSGPACK_PP_IS_BEGIN_PARENS(elem), \
|
|
||||||
elem, \
|
|
||||||
(MSGPACK_PP_STRINGIZE(elem))(elem) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define MSGPACK_DEFINE_MAP_IMPL(...) \
|
|
||||||
MSGPACK_PP_SEQ_TO_TUPLE( \
|
|
||||||
MSGPACK_PP_SEQ_FOR_EACH( \
|
|
||||||
MSGPACK_DEFINE_MAP_EACH_PROC, \
|
|
||||||
0, \
|
|
||||||
MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \
|
|
||||||
) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define MSGPACK_DEFINE_MAP(...) \
|
|
||||||
template <typename Packer> \
|
|
||||||
void msgpack_pack(Packer& pk) const \
|
|
||||||
{ \
|
|
||||||
msgpack::type::make_define_map \
|
|
||||||
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
|
||||||
.msgpack_pack(pk); \
|
|
||||||
} \
|
|
||||||
void msgpack_unpack(msgpack::object const& o) \
|
|
||||||
{ \
|
|
||||||
msgpack::type::make_define_map \
|
|
||||||
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
|
||||||
.msgpack_unpack(o); \
|
|
||||||
}\
|
|
||||||
template <typename MSGPACK_OBJECT> \
|
|
||||||
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
|
||||||
{ \
|
|
||||||
msgpack::type::make_define_map \
|
|
||||||
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
|
||||||
.msgpack_object(o, z); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MSGPACK_BASE_MAP(base) \
|
|
||||||
(MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this)))
|
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
/// @cond
|
/// @cond
|
||||||
@@ -72,12 +23,7 @@ MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|||||||
/// @endcond
|
/// @endcond
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<% GENERATION_LIMIT = 31 %>
|
<% GENERATION_LIMIT = 31 %>
|
||||||
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
|
||||||
struct define_map;
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct define_map<> {
|
struct define_map<> {
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
@@ -92,7 +38,7 @@ struct define_map<> {
|
|||||||
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
||||||
{
|
{
|
||||||
o->type = msgpack::type::MAP;
|
o->type = msgpack::type::MAP;
|
||||||
o->via.map.ptr = nullptr;
|
o->via.map.ptr = MSGPACK_NULLPTR;
|
||||||
o->via.map.size = 0;
|
o->via.map.size = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -170,4 +116,4 @@ inline define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1.
|
|||||||
/// @endcond
|
/// @endcond
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_DEFINE_MAP_HPP
|
#endif // MSGPACK_V1_CPP03_DEFINE_MAP_HPP
|
42
erb/v1/cpp03_define_map_decl.hpp.erb
Normal file
42
erb/v1/cpp03_define_map_decl.hpp.erb
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015-2016 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_CPP03_DEFINE_MAP_DECL_HPP
|
||||||
|
#define MSGPACK_V1_CPP03_DEFINE_MAP_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
namespace type {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<% GENERATION_LIMIT = 31 %>
|
||||||
|
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
||||||
|
struct define_map;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
define_map<> make_define_map();
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>);
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_V1_CPP03_DEFINE_MAP_DECL_HPP
|
@@ -1,18 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi
|
// Copyright (C) 2008-2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP03_MSGPACK_TUPLE_HPP
|
#ifndef MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
|
||||||
#define MSGPACK_CPP03_MSGPACK_TUPLE_HPP
|
#define MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp"
|
||||||
#include "msgpack/object.hpp"
|
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
@@ -26,17 +24,6 @@ namespace type {
|
|||||||
// FIXME operator!=
|
// FIXME operator!=
|
||||||
<% GENERATION_LIMIT = 31 %>
|
<% GENERATION_LIMIT = 31 %>
|
||||||
|
|
||||||
/// @cond
|
|
||||||
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
|
||||||
struct tuple;
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <typename Tuple, int N>
|
|
||||||
struct tuple_element;
|
|
||||||
|
|
||||||
template <typename Tuple, int N>
|
|
||||||
struct const_tuple_element;
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct tuple_type {
|
struct tuple_type {
|
||||||
typedef T type;
|
typedef T type;
|
||||||
@@ -96,6 +83,7 @@ struct tuple<> {
|
|||||||
tuple() {}
|
tuple() {}
|
||||||
tuple(msgpack::object const& o) { o.convert(*this); }
|
tuple(msgpack::object const& o) { o.convert(*this); }
|
||||||
typedef tuple<> value_type;
|
typedef tuple<> value_type;
|
||||||
|
std::size_t size() const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @cond
|
/// @cond
|
||||||
@@ -103,6 +91,7 @@ struct tuple<> {
|
|||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
||||||
typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type;
|
typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type;
|
||||||
|
std::size_t size() const { return <%=i+1%>; }
|
||||||
tuple() {}
|
tuple() {}
|
||||||
tuple(typename tuple_type<A0>::transparent_reference _a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference _a<%=j%><%}%>) :
|
tuple(typename tuple_type<A0>::transparent_reference _a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference _a<%=j%><%}%>) :
|
||||||
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
||||||
@@ -161,10 +150,10 @@ struct convert<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
|||||||
msgpack::object const& o,
|
msgpack::object const& o,
|
||||||
type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& 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 < <%=i+1%>) { throw msgpack::type_error(); }
|
|
||||||
<%0.upto(i) {|j|%>
|
<%0.upto(i) {|j|%>
|
||||||
// In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
|
// In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
|
||||||
o.via.array.ptr[<%=j%>].msgpack::object::convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%>
|
if(o.via.array.size > <%=j%>)
|
||||||
|
o.via.array.ptr[<%=j%>].msgpack::object::convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%>
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -205,7 +194,7 @@ struct object_with_zone<type::tuple<> > {
|
|||||||
msgpack::object::with_zone& o,
|
msgpack::object::with_zone& o,
|
||||||
const type::tuple<>&) const {
|
const type::tuple<>&) const {
|
||||||
o.type = msgpack::type::ARRAY;
|
o.type = msgpack::type::ARRAY;
|
||||||
o.via.array.ptr = nullptr;
|
o.via.array.ptr = MSGPACK_NULLPTR;
|
||||||
o.via.array.size = 0;
|
o.via.array.size = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -235,4 +224,4 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
|||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP
|
#endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
|
69
erb/v1/cpp03_msgpack_tuple_decl.hpp.erb
Normal file
69
erb/v1/cpp03_msgpack_tuple_decl.hpp.erb
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2008-2016 FURUHASHI Sadayuki and 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_CPP03_MSGPACK_TUPLE_DECL_HPP
|
||||||
|
#define MSGPACK_V1_CPP03_MSGPACK_TUPLE_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/object.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace type {
|
||||||
|
|
||||||
|
// FIXME operator==
|
||||||
|
// FIXME operator!=
|
||||||
|
<% GENERATION_LIMIT = 31 %>
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
||||||
|
struct tuple;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
template <typename Tuple, int N>
|
||||||
|
struct tuple_element;
|
||||||
|
|
||||||
|
template <typename Tuple, int N>
|
||||||
|
struct const_tuple_element;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct tuple_type;
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
|
template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
typename type::tuple_element<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>, N>::reference get(type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& t);
|
||||||
|
template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
typename type::const_tuple_element<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>, N>::const_reference get(type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> const& t);
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
tuple<> make_tuple();
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>);
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace type
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_DECL_HPP
|
@@ -1,28 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ memory pool
|
// MessagePack for C++ memory pool
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2010 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP03_ZONE_HPP
|
#ifndef MSGPACK_V1_CPP03_ZONE_HPP
|
||||||
#define MSGPACK_CPP03_ZONE_HPP
|
#define MSGPACK_V1_CPP03_ZONE_HPP
|
||||||
|
|
||||||
#include <cstdlib>
|
#include "msgpack/zone_decl.hpp"
|
||||||
#include <memory>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
|
|
||||||
#ifndef MSGPACK_ZONE_CHUNK_SIZE
|
|
||||||
#define MSGPACK_ZONE_CHUNK_SIZE 8192
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MSGPACK_ZONE_ALIGN
|
|
||||||
#define MSGPACK_ZONE_ALIGN sizeof(void*)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
<% GENERATION_LIMIT = 15 %>
|
<% GENERATION_LIMIT = 15 %>
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
@@ -39,7 +27,7 @@ class zone {
|
|||||||
void* m_data;
|
void* m_data;
|
||||||
};
|
};
|
||||||
struct finalizer_array {
|
struct finalizer_array {
|
||||||
finalizer_array():m_tail(nullptr), m_end(nullptr), m_array(nullptr) {}
|
finalizer_array():m_tail(MSGPACK_NULLPTR), m_end(MSGPACK_NULLPTR), m_array(MSGPACK_NULLPTR) {}
|
||||||
void call() {
|
void call() {
|
||||||
finalizer* fin = m_tail;
|
finalizer* fin = m_tail;
|
||||||
for(; fin != m_array; --fin) (*(fin-1))();
|
for(; fin != m_array; --fin) (*(fin-1))();
|
||||||
@@ -105,7 +93,7 @@ class zone {
|
|||||||
m_head = c;
|
m_head = c;
|
||||||
m_free = chunk_size;
|
m_free = chunk_size;
|
||||||
m_ptr = reinterpret_cast<char*>(c) + sizeof(chunk);
|
m_ptr = reinterpret_cast<char*>(c) + sizeof(chunk);
|
||||||
c->m_next = nullptr;
|
c->m_next = MSGPACK_NULLPTR;
|
||||||
}
|
}
|
||||||
~chunk_list()
|
~chunk_list()
|
||||||
{
|
{
|
||||||
@@ -125,10 +113,11 @@ class zone {
|
|||||||
::free(c);
|
::free(c);
|
||||||
c = n;
|
c = n;
|
||||||
} else {
|
} else {
|
||||||
|
m_head = c;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_head->m_next = nullptr;
|
m_head->m_next = MSGPACK_NULLPTR;
|
||||||
m_free = chunk_size;
|
m_free = chunk_size;
|
||||||
m_ptr = reinterpret_cast<char*>(m_head) + sizeof(chunk);
|
m_ptr = reinterpret_cast<char*>(m_head) + sizeof(chunk);
|
||||||
}
|
}
|
||||||
@@ -302,7 +291,7 @@ inline void zone::undo_allocate(size_t size)
|
|||||||
|
|
||||||
inline std::size_t aligned_size(
|
inline std::size_t aligned_size(
|
||||||
std::size_t size,
|
std::size_t size,
|
||||||
std::size_t align = MSGPACK_ZONE_ALIGN) {
|
std::size_t align) {
|
||||||
return (size + align - 1) / align * align;
|
return (size + align - 1) / align * align;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,4 +324,4 @@ T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>)
|
|||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_ZONE_HPP
|
#endif // MSGPACK_V1_CPP03_ZONE_HPP
|
46
erb/v1/cpp03_zone_decl.hpp.erb
Normal file
46
erb/v1/cpp03_zone_decl.hpp.erb
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ memory pool
|
||||||
|
//
|
||||||
|
// Copyright (C) 2008-2016 FURUHASHI Sadayuki and 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_CPP03_ZONE_DECL_HPP
|
||||||
|
#define MSGPACK_V1_CPP03_ZONE_DECL_HPP
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
|
||||||
|
#ifndef MSGPACK_ZONE_CHUNK_SIZE
|
||||||
|
#define MSGPACK_ZONE_CHUNK_SIZE 8192
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MSGPACK_ZONE_ALIGN
|
||||||
|
#define MSGPACK_ZONE_ALIGN sizeof(void*)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
<% GENERATION_LIMIT = 15 %>
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
class zone;
|
||||||
|
|
||||||
|
std::size_t aligned_size(
|
||||||
|
std::size_t size,
|
||||||
|
std::size_t align = MSGPACK_ZONE_ALIGN);
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_V1_CPP03_ZONE_DECL_HPP
|
@@ -2,3 +2,4 @@ ADD_SUBDIRECTORY (c)
|
|||||||
ADD_SUBDIRECTORY (cpp03)
|
ADD_SUBDIRECTORY (cpp03)
|
||||||
ADD_SUBDIRECTORY (cpp11)
|
ADD_SUBDIRECTORY (cpp11)
|
||||||
ADD_SUBDIRECTORY (boost)
|
ADD_SUBDIRECTORY (boost)
|
||||||
|
ADD_SUBDIRECTORY (x3)
|
||||||
|
@@ -11,6 +11,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 ()
|
||||||
@@ -19,13 +23,6 @@ FOREACH (source_file ${exec_PROGRAMS})
|
|||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR
|
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}))
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
@@ -73,8 +73,8 @@ int main() {
|
|||||||
msgpack::pack(ss1, u);
|
msgpack::pack(ss1, u);
|
||||||
print(ss1.str());
|
print(ss1.str());
|
||||||
|
|
||||||
msgpack::unpacked unp1 = msgpack::unpack(ss1.str().data(), ss1.str().size());
|
msgpack::object_handle oh1 = msgpack::unpack(ss1.str().data(), ss1.str().size());
|
||||||
msgpack::object const& obj1 = unp1.get();
|
msgpack::object const& obj1 = oh1.get();
|
||||||
std::cout << "Unpacked msgpack object." << std::endl;
|
std::cout << "Unpacked msgpack object." << std::endl;
|
||||||
std::cout << obj1 << std::endl;
|
std::cout << obj1 << std::endl;
|
||||||
|
|
||||||
@@ -87,8 +87,8 @@ int main() {
|
|||||||
msgpack::pack(ss2, v);
|
msgpack::pack(ss2, v);
|
||||||
print(ss2.str());
|
print(ss2.str());
|
||||||
|
|
||||||
msgpack::unpacked unp2 = msgpack::unpack(ss2.str().data(), ss2.str().size());
|
msgpack::object_handle oh2 = msgpack::unpack(ss2.str().data(), ss2.str().size());
|
||||||
msgpack::object const& obj2 = unp2.get();
|
msgpack::object const& obj2 = oh2.get();
|
||||||
std::cout << "Modified msgpack object." << std::endl;
|
std::cout << "Modified msgpack object." << std::endl;
|
||||||
std::cout << obj2 << std::endl;
|
std::cout << obj2 << std::endl;
|
||||||
}
|
}
|
||||||
|
@@ -45,7 +45,11 @@ struct proc:boost::static_visitor<void> {
|
|||||||
// You can remove key-value pair from msgpack::type::variant_ref
|
// You can remove key-value pair from msgpack::type::variant_ref
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_CPP03)
|
#if defined(MSGPACK_USE_CPP03)
|
||||||
|
# if MSGPACK_LIB_STD_CXX
|
||||||
|
v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it++));
|
||||||
|
# else // MSGPACK_LIB_STD_CXX
|
||||||
v.erase(it++);
|
v.erase(it++);
|
||||||
|
# endif // MSGPACK_LIB_STD_CXX
|
||||||
#else // defined(MSGPACK_USE_CPP03)
|
#else // defined(MSGPACK_USE_CPP03)
|
||||||
# if MSGPACK_LIB_STD_CXX
|
# if MSGPACK_LIB_STD_CXX
|
||||||
it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it));
|
it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it));
|
||||||
@@ -79,8 +83,8 @@ int main() {
|
|||||||
u.address = "Tokyo";
|
u.address = "Tokyo";
|
||||||
msgpack::pack(ss, u);
|
msgpack::pack(ss, u);
|
||||||
|
|
||||||
msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size());
|
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object const& obj = unp.get();
|
msgpack::object const& obj = oh.get();
|
||||||
std::cout << "Unpacked msgpack object." << std::endl;
|
std::cout << "Unpacked msgpack object." << std::endl;
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>();
|
msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>();
|
||||||
|
@@ -1,6 +1,9 @@
|
|||||||
INCLUDE_DIRECTORIES (
|
IF (MSGPACK_ENABLE_SHARED)
|
||||||
../include
|
SET (MSGPACK_LIB msgpackc)
|
||||||
)
|
ELSE ()
|
||||||
|
SET (MSGPACK_LIB msgpackc-static)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
|
||||||
LIST (APPEND exec_PROGRAMS
|
LIST (APPEND exec_PROGRAMS
|
||||||
lib_buffer_unpack.c
|
lib_buffer_unpack.c
|
||||||
@@ -17,7 +20,7 @@ FOREACH (source_file ${exec_PROGRAMS})
|
|||||||
${source_file}
|
${source_file}
|
||||||
)
|
)
|
||||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
msgpackc
|
${MSGPACK_LIB}
|
||||||
)
|
)
|
||||||
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")
|
||||||
@@ -27,13 +30,6 @@ FOREACH (source_file ${exec_PROGRAMS})
|
|||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR
|
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}))
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
@@ -44,13 +44,14 @@ size_t receiver_recv(receiver *r, char* buf, size_t try_size) {
|
|||||||
size_t receiver_to_unpacker(receiver* r, size_t request_size,
|
size_t receiver_to_unpacker(receiver* r, size_t request_size,
|
||||||
msgpack_unpacker *unpacker)
|
msgpack_unpacker *unpacker)
|
||||||
{
|
{
|
||||||
|
size_t recv_len;
|
||||||
// make sure there's enough room, or expand the unpacker accordingly
|
// make sure there's enough room, or expand the unpacker accordingly
|
||||||
if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) {
|
if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) {
|
||||||
msgpack_unpacker_reserve_buffer(unpacker, request_size);
|
msgpack_unpacker_reserve_buffer(unpacker, request_size);
|
||||||
assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size);
|
assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size);
|
||||||
}
|
}
|
||||||
size_t recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker),
|
recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker),
|
||||||
request_size);
|
request_size);
|
||||||
msgpack_unpacker_buffer_consumed(unpacker, recv_len);
|
msgpack_unpacker_buffer_consumed(unpacker, recv_len);
|
||||||
return recv_len;
|
return recv_len;
|
||||||
}
|
}
|
||||||
@@ -70,7 +71,11 @@ void unpack(receiver* r) {
|
|||||||
while (true) {
|
while (true) {
|
||||||
recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
|
recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
|
||||||
if (recv_len == 0) break; // (reached end of input)
|
if (recv_len == 0) break; // (reached end of input)
|
||||||
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
|
printf("receive count: %d %Id bytes received.\n", recv_count++, recv_len);
|
||||||
|
#else // defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
|
printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
|
||||||
|
#endif // defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
ret = msgpack_unpacker_next(unp, &result);
|
ret = msgpack_unpacker_next(unp, &result);
|
||||||
while (ret == MSGPACK_UNPACK_SUCCESS) {
|
while (ret == MSGPACK_UNPACK_SUCCESS) {
|
||||||
msgpack_object obj = result.data;
|
msgpack_object obj = result.data;
|
||||||
|
@@ -2,6 +2,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
#define UNPACKED_BUFFER_SIZE 2048
|
||||||
|
|
||||||
void prepare(msgpack_sbuffer* sbuf) {
|
void prepare(msgpack_sbuffer* sbuf) {
|
||||||
msgpack_packer pk;
|
msgpack_packer pk;
|
||||||
|
|
||||||
@@ -27,6 +29,7 @@ void unpack(char const* buf, size_t len) {
|
|||||||
size_t off = 0;
|
size_t off = 0;
|
||||||
msgpack_unpack_return ret;
|
msgpack_unpack_return ret;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
char unpacked_buffer[UNPACKED_BUFFER_SIZE];
|
||||||
msgpack_unpacked_init(&result);
|
msgpack_unpacked_init(&result);
|
||||||
ret = msgpack_unpack_next(&result, buf, len, &off);
|
ret = msgpack_unpack_next(&result, buf, len, &off);
|
||||||
while (ret == MSGPACK_UNPACK_SUCCESS) {
|
while (ret == MSGPACK_UNPACK_SUCCESS) {
|
||||||
@@ -36,6 +39,8 @@ void unpack(char const* buf, size_t len) {
|
|||||||
printf("Object no %d:\n", ++i);
|
printf("Object no %d:\n", ++i);
|
||||||
msgpack_object_print(stdout, obj);
|
msgpack_object_print(stdout, obj);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
msgpack_object_print_buffer(unpacked_buffer, UNPACKED_BUFFER_SIZE, obj);
|
||||||
|
printf("%s\n", unpacked_buffer);
|
||||||
/* If you want to allocate something on the zone, you can use zone. */
|
/* If you want to allocate something on the zone, you can use zone. */
|
||||||
/* msgpack_zone* zone = result.zone; */
|
/* msgpack_zone* zone = result.zone; */
|
||||||
/* The lifetime of the obj and the zone, */
|
/* The lifetime of the obj and the zone, */
|
||||||
|
@@ -5,12 +5,17 @@ LIST (APPEND exec_PROGRAMS
|
|||||||
custom.cpp
|
custom.cpp
|
||||||
enum.cpp
|
enum.cpp
|
||||||
map_based_versionup.cpp
|
map_based_versionup.cpp
|
||||||
protocol.cpp
|
|
||||||
protocol_new.cpp
|
protocol_new.cpp
|
||||||
reuse_zone.cpp
|
reuse_zone.cpp
|
||||||
simple.cpp
|
simple.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
IF (MSGPACK_DEFAULT_API_VERSION EQUAL 1)
|
||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
protocol.cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
IF (NOT MSVC)
|
IF (NOT MSVC)
|
||||||
LIST (APPEND with_pthread_PROGRAMS
|
LIST (APPEND with_pthread_PROGRAMS
|
||||||
stream.cpp
|
stream.cpp
|
||||||
@@ -18,12 +23,10 @@ IF (NOT MSVC)
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_BOOST)
|
IF (MSGPACK_BOOST)
|
||||||
IF (NOT MSVC)
|
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
|
)
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
FOREACH (source_file ${exec_PROGRAMS})
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
@@ -32,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 ()
|
||||||
@@ -50,11 +57,15 @@ 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}
|
||||||
pthread
|
${CMAKE_THREAD_LIBS_INIT}
|
||||||
)
|
)
|
||||||
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 -pthread")
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
@@ -75,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}
|
||||||
@@ -95,13 +110,6 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS})
|
|||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR
|
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}))
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
@@ -84,9 +84,9 @@ int main() {
|
|||||||
|
|
||||||
print(ss.str());
|
print(ss.str());
|
||||||
|
|
||||||
msgpack::unpacked unp;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(unp, ss.str().data(), ss.str().size());
|
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object obj = unp.get();
|
msgpack::object obj = oh.get();
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<my_class>() == my);
|
assert(obj.as<my_class>() == my);
|
||||||
}
|
}
|
||||||
|
@@ -59,9 +59,9 @@ int main() {
|
|||||||
|
|
||||||
print(ss.str());
|
print(ss.str());
|
||||||
|
|
||||||
msgpack::unpacked unp;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(unp, ss.str().data(), ss.str().size());
|
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object obj = unp.get();
|
msgpack::object obj = oh.get();
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<my_class>() == my);
|
assert(obj.as<my_class>() == my);
|
||||||
}
|
}
|
||||||
|
@@ -102,9 +102,9 @@ int main() {
|
|||||||
|
|
||||||
print(ss.str());
|
print(ss.str());
|
||||||
|
|
||||||
msgpack::unpacked unp;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(unp, ss.str().data(), ss.str().size());
|
msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object obj = unp.get();
|
msgpack::object obj = oh.get();
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<my_class>() == my);
|
assert(obj.as<my_class>() == my);
|
||||||
}
|
}
|
||||||
|
@@ -40,9 +40,9 @@ int main(void)
|
|||||||
std::stringstream sbuf;
|
std::stringstream sbuf;
|
||||||
msgpack::pack(sbuf, oc);
|
msgpack::pack(sbuf, oc);
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(result, sbuf.str().data(), sbuf.str().size());
|
msgpack::unpack(sbuf.str().data(), sbuf.str().size());
|
||||||
msgpack::object obj = result.get();
|
msgpack::object obj = oh.get();
|
||||||
|
|
||||||
obj.convert(nc);
|
obj.convert(nc);
|
||||||
|
|
||||||
@@ -56,9 +56,9 @@ int main(void)
|
|||||||
std::stringstream sbuf;
|
std::stringstream sbuf;
|
||||||
msgpack::pack(sbuf, nc);
|
msgpack::pack(sbuf, nc);
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(result, sbuf.str().data(), sbuf.str().size());
|
msgpack::unpack(sbuf.str().data(), sbuf.str().size());
|
||||||
msgpack::object obj = result.get();
|
msgpack::object obj = oh.get();
|
||||||
|
|
||||||
obj.convert(oc);
|
obj.convert(oc);
|
||||||
|
|
||||||
|
@@ -30,20 +30,20 @@ int main(void)
|
|||||||
my_enum e3 = elem3;
|
my_enum e3 = elem3;
|
||||||
msgpack::pack(sbuf, e3);
|
msgpack::pack(sbuf, e3);
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh;
|
||||||
std::size_t off = 0;
|
std::size_t off = 0;
|
||||||
|
|
||||||
msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off);
|
msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
|
||||||
std::cout << result.get().as<my_enum>() << std::endl;
|
std::cout << oh.get().as<my_enum>() << std::endl;
|
||||||
assert(result.get().as<my_enum>() == elem1);
|
assert(oh.get().as<my_enum>() == elem1);
|
||||||
|
|
||||||
msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off);
|
msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
|
||||||
std::cout << result.get().as<my_enum>() << std::endl;
|
std::cout << oh.get().as<my_enum>() << std::endl;
|
||||||
assert(result.get().as<my_enum>() == elem2);
|
assert(oh.get().as<my_enum>() == elem2);
|
||||||
|
|
||||||
msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off);
|
msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
|
||||||
std::cout << result.get().as<my_enum>() << std::endl;
|
std::cout << oh.get().as<my_enum>() << std::endl;
|
||||||
assert(result.get().as<my_enum>() == elem3);
|
assert(oh.get().as<my_enum>() == elem3);
|
||||||
}
|
}
|
||||||
{ // create object without zone
|
{ // create object without zone
|
||||||
msgpack::object obj(elem2);
|
msgpack::object obj(elem2);
|
||||||
|
@@ -71,9 +71,9 @@ int main() {
|
|||||||
|
|
||||||
print(ss.str());
|
print(ss.str());
|
||||||
|
|
||||||
msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size());
|
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
|
|
||||||
msgpack::object obj = unp.get();
|
msgpack::object obj = oh.get();
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
|
|
||||||
v2 newv = obj.as<v2>();
|
v2 newv = obj.as<v2>();
|
||||||
|
@@ -57,9 +57,9 @@ int main(void)
|
|||||||
{
|
{
|
||||||
std::string buffer(stream.str());
|
std::string buffer(stream.str());
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(result, buffer.data(), buffer.size());
|
msgpack::unpack(buffer.data(), buffer.size());
|
||||||
msgpack::object o = result.get();
|
msgpack::object o = oh.get();
|
||||||
|
|
||||||
myprotocol::Get req;
|
myprotocol::Get req;
|
||||||
o.convert(req);
|
o.convert(req);
|
||||||
@@ -85,9 +85,9 @@ int main(void)
|
|||||||
{
|
{
|
||||||
std::string buffer(stream.str());
|
std::string buffer(stream.str());
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(result, buffer.data(), buffer.size());
|
msgpack::unpack(buffer.data(), buffer.size());
|
||||||
msgpack::object o = result.get();
|
msgpack::object o = oh.get();
|
||||||
|
|
||||||
|
|
||||||
myprotocol::MultiGet req;
|
myprotocol::MultiGet req;
|
||||||
|
@@ -44,9 +44,9 @@ int main(void)
|
|||||||
{
|
{
|
||||||
std::string buffer(stream.str());
|
std::string buffer(stream.str());
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(result, buffer.data(), buffer.size());
|
msgpack::unpack(buffer.data(), buffer.size());
|
||||||
msgpack::object o = result.get();
|
msgpack::object o = oh.get();
|
||||||
|
|
||||||
myprotocol::Get req;
|
myprotocol::Get req;
|
||||||
o.convert(req);
|
o.convert(req);
|
||||||
@@ -72,9 +72,9 @@ int main(void)
|
|||||||
{
|
{
|
||||||
std::string buffer(stream.str());
|
std::string buffer(stream.str());
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh =
|
||||||
msgpack::unpack(result, buffer.data(), buffer.size());
|
msgpack::unpack(buffer.data(), buffer.size());
|
||||||
msgpack::object o = result.get();
|
msgpack::object o = oh.get();
|
||||||
|
|
||||||
|
|
||||||
myprotocol::MultiGet req;
|
myprotocol::MultiGet req;
|
||||||
|
@@ -27,12 +27,10 @@ int main(void)
|
|||||||
// deserialize the buffer into msgpack::object instance.
|
// deserialize the buffer into msgpack::object instance.
|
||||||
std::string str(buffer.str());
|
std::string str(buffer.str());
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
|
||||||
|
|
||||||
msgpack::unpack(result, str.data(), str.size());
|
// deserialized object is valid during the msgpack::object_handle instance alive.
|
||||||
|
msgpack::object deserialized = oh.get();
|
||||||
// deserialized object is valid during the msgpack::unpacked instance alive.
|
|
||||||
msgpack::object deserialized = result.get();
|
|
||||||
|
|
||||||
// msgpack::object supports ostream.
|
// msgpack::object supports ostream.
|
||||||
std::cout << deserialized << std::endl;
|
std::cout << deserialized << std::endl;
|
||||||
|
@@ -37,11 +37,11 @@ void test_map_pack_unpack() {
|
|||||||
buffer.seekg(0);
|
buffer.seekg(0);
|
||||||
std::string str(buffer.str());
|
std::string str(buffer.str());
|
||||||
|
|
||||||
msgpack::unpacked unpacked;
|
msgpack::object_handle oh;
|
||||||
std::cout << "Start unpacking...by void unpack(unpacked& result, const char* data, size_t len)" << std::endl;
|
std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl;
|
||||||
{
|
{
|
||||||
boost::timer::cpu_timer timer;
|
boost::timer::cpu_timer timer;
|
||||||
msgpack::unpack(unpacked, str.data(), str.size());
|
msgpack::unpack(oh, str.data(), str.size());
|
||||||
std::string result = timer.format();
|
std::string result = timer.format();
|
||||||
std::cout << result << std::endl;
|
std::cout << result << std::endl;
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@ void test_map_pack_unpack() {
|
|||||||
std::cout << "Start converting..." << std::endl;
|
std::cout << "Start converting..." << std::endl;
|
||||||
{
|
{
|
||||||
boost::timer::cpu_timer timer;
|
boost::timer::cpu_timer timer;
|
||||||
unpacked.get().convert(m2);
|
oh.get().convert(m2);
|
||||||
std::string result = timer.format();
|
std::string result = timer.format();
|
||||||
std::cout << result << std::endl;
|
std::cout << result << std::endl;
|
||||||
}
|
}
|
||||||
|
@@ -60,11 +60,11 @@ void test_array_of_array() {
|
|||||||
buffer.seekg(0);
|
buffer.seekg(0);
|
||||||
std::string str(buffer.str());
|
std::string str(buffer.str());
|
||||||
|
|
||||||
msgpack::unpacked unpacked;
|
msgpack::object_handle oh;
|
||||||
std::cout << "Start unpacking...by void unpack(unpacked& result, const char* data, size_t len)" << std::endl;
|
std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl;
|
||||||
{
|
{
|
||||||
boost::timer::cpu_timer timer;
|
boost::timer::cpu_timer timer;
|
||||||
msgpack::unpack(unpacked, str.data(), str.size());
|
msgpack::unpack(oh, str.data(), str.size());
|
||||||
std::string result = timer.format();
|
std::string result = timer.format();
|
||||||
std::cout << result << std::endl;
|
std::cout << result << std::endl;
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ void test_array_of_array() {
|
|||||||
std::cout << "Start converting..." << std::endl;
|
std::cout << "Start converting..." << std::endl;
|
||||||
{
|
{
|
||||||
boost::timer::cpu_timer timer;
|
boost::timer::cpu_timer timer;
|
||||||
unpacked.get().convert(v2);
|
oh.get().convert(v2);
|
||||||
std::string result = timer.format();
|
std::string result = timer.format();
|
||||||
std::cout << result << std::endl;
|
std::cout << result << std::endl;
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,12 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
|
#include <io.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#define pipe(fds) _pipe(fds, 4096, _O_BINARY)
|
||||||
|
#endif // _MSC_VER || __MINGW32__
|
||||||
|
|
||||||
class Server {
|
class Server {
|
||||||
public:
|
public:
|
||||||
Server(int sock) : m_sock(sock) { }
|
Server(int sock) : m_sock(sock) { }
|
||||||
@@ -43,10 +49,10 @@ public:
|
|||||||
|
|
||||||
m_pac.buffer_consumed(count);
|
m_pac.buffer_consumed(count);
|
||||||
|
|
||||||
msgpack::unpacked result;
|
msgpack::object_handle oh;
|
||||||
while (m_pac.next(&result)) {
|
while (m_pac.next(oh)) {
|
||||||
msgpack::object msg = result.get();
|
msgpack::object msg = oh.get();
|
||||||
unique_zone& life = result.zone();
|
unique_zone& life = oh.zone();
|
||||||
process_message(msg, life);
|
process_message(msg, life);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,12 +8,22 @@ IF (MSGPACK_CXX11)
|
|||||||
non_def_con_class.cpp
|
non_def_con_class.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
IF ("${MSGPACK_DEFAULT_API_VERSION}" GREATER "1")
|
||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
socket_stream_example.cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
FOREACH (source_file ${exec_PROGRAMS})
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
ADD_EXECUTABLE (
|
ADD_EXECUTABLE (
|
||||||
${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 ()
|
||||||
@@ -22,13 +32,6 @@ IF (MSGPACK_CXX11)
|
|||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR
|
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}))
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
@@ -25,8 +25,8 @@ void array() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, a);
|
msgpack::pack(ss, a);
|
||||||
|
|
||||||
msgpack::unpacked und = msgpack::unpack(ss.str().data(), ss.str().size());
|
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object obj = und.get();
|
msgpack::object obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert((obj.as<std::array<int, 5>>()) == a);
|
assert((obj.as<std::array<int, 5>>()) == a);
|
||||||
@@ -37,8 +37,8 @@ void tuple() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, t);
|
msgpack::pack(ss, t);
|
||||||
|
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(t)>() == t);
|
assert(obj.as<decltype(t)>() == t);
|
||||||
@@ -49,8 +49,8 @@ void unordered_map() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, m);
|
msgpack::pack(ss, m);
|
||||||
|
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object obj = und.get();
|
msgpack::object obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(m)>() == m);
|
assert(obj.as<decltype(m)>() == m);
|
||||||
@@ -61,8 +61,8 @@ void unordered_set() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, s);
|
msgpack::pack(ss, s);
|
||||||
|
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(s)>() == s);
|
assert(obj.as<decltype(s)>() == s);
|
||||||
@@ -74,8 +74,8 @@ void forward_list() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, f);
|
msgpack::pack(ss, f);
|
||||||
|
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<type>() == f);
|
assert(obj.as<type>() == f);
|
||||||
@@ -98,40 +98,40 @@ void combi() {
|
|||||||
std::size_t offset = 0;
|
std::size_t offset = 0;
|
||||||
std::cout << "offset: " << offset << std::endl;
|
std::cout << "offset: " << offset << std::endl;
|
||||||
{
|
{
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(a)>() == a);
|
assert(obj.as<decltype(a)>() == a);
|
||||||
}
|
}
|
||||||
std::cout << "offset: " << offset << std::endl;
|
std::cout << "offset: " << offset << std::endl;
|
||||||
{
|
{
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(t)>() == t);
|
assert(obj.as<decltype(t)>() == t);
|
||||||
}
|
}
|
||||||
std::cout << "offset: " << offset << std::endl;
|
std::cout << "offset: " << offset << std::endl;
|
||||||
{
|
{
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(m)>() == m);
|
assert(obj.as<decltype(m)>() == m);
|
||||||
}
|
}
|
||||||
std::cout << "offset: " << offset << std::endl;
|
std::cout << "offset: " << offset << std::endl;
|
||||||
{
|
{
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(s)>() == s);
|
assert(obj.as<decltype(s)>() == s);
|
||||||
}
|
}
|
||||||
std::cout << "offset: " << offset << std::endl;
|
std::cout << "offset: " << offset << std::endl;
|
||||||
{
|
{
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
auto obj = und.get();
|
auto obj = oh.get();
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(f)>() == f);
|
assert(obj.as<decltype(f)>() == f);
|
||||||
|
157
example/cpp11/socket_stream_example.cpp
Normal file
157
example/cpp11/socket_stream_example.cpp
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct json_like_visitor : msgpack::v2::null_visitor {
|
||||||
|
json_like_visitor(std::string& s):m_s(s), m_ref(false) {} // m_ref is false by default
|
||||||
|
|
||||||
|
bool visit_nil() {
|
||||||
|
m_s += "null";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_boolean(bool v) {
|
||||||
|
if (v) m_s += "true";
|
||||||
|
else m_s += "false";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_positive_integer(uint64_t v) {
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << v;
|
||||||
|
m_s += ss.str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_negative_integer(int64_t v) {
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << v;
|
||||||
|
m_s += ss.str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_str(const char* v, uint32_t size) {
|
||||||
|
// I omit escape process.
|
||||||
|
m_s += '"' + std::string(v, size) + '"';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool start_array(uint32_t /*num_elements*/) {
|
||||||
|
m_s += "[";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_array_item() {
|
||||||
|
m_s += ",";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_array() {
|
||||||
|
m_s.erase(m_s.size() - 1, 1); // remove the last ','
|
||||||
|
m_s += "]";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool start_map(uint32_t /*num_kv_pairs*/) {
|
||||||
|
m_s += "{";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_map_key() {
|
||||||
|
m_s += ":";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_map_value() {
|
||||||
|
m_s += ",";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_map() {
|
||||||
|
m_s.erase(m_s.size() - 1, 1); // remove the last ','
|
||||||
|
m_s += "}";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void parse_error(size_t /*parsed_offset*/, size_t /*error_offset*/) {
|
||||||
|
std::cerr << "parse error"<<std::endl;
|
||||||
|
}
|
||||||
|
void insufficient_bytes(size_t /*parsed_offset*/, size_t /*error_offset*/) {
|
||||||
|
std::cout << "insufficient bytes"<<std::endl;
|
||||||
|
}
|
||||||
|
std::string& m_s;
|
||||||
|
|
||||||
|
// These two functions are required by parser.
|
||||||
|
void set_referenced(bool ref) { m_ref = ref; }
|
||||||
|
bool referenced() const { return m_ref; }
|
||||||
|
bool m_ref;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct do_nothing {
|
||||||
|
void operator()(char* /*buffer*/) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class json_like_printer : public msgpack::parser<json_like_printer, do_nothing>,
|
||||||
|
public json_like_visitor {
|
||||||
|
typedef parser<json_like_printer, do_nothing> parser_t;
|
||||||
|
public:
|
||||||
|
json_like_printer(std::size_t initial_buffer_size = MSGPACK_UNPACKER_INIT_BUFFER_SIZE)
|
||||||
|
:parser_t(do_nothing_, initial_buffer_size),
|
||||||
|
json_like_visitor(json_str_) {
|
||||||
|
}
|
||||||
|
|
||||||
|
json_like_visitor& visitor() { return *this; }
|
||||||
|
void print() { std::cout << json_str_ << std::endl; json_str_.clear();}
|
||||||
|
private:
|
||||||
|
do_nothing do_nothing_;
|
||||||
|
std::string json_str_;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct ref_buffer {
|
||||||
|
ref_buffer(T& t):t(t) {}
|
||||||
|
void write(char const* ptr, std::size_t len) {
|
||||||
|
if (len > t.buffer_capacity()) {
|
||||||
|
t.reserve_buffer(len - t.buffer_capacity());
|
||||||
|
}
|
||||||
|
std::memcpy(t.buffer(), ptr, len);
|
||||||
|
t.buffer_consumed(len);
|
||||||
|
}
|
||||||
|
T& t;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define BUFFERING_SIZE_MAX 100
|
||||||
|
|
||||||
|
//simulates streamed content (a socket for example)
|
||||||
|
bool produce( std::stringstream & ss, char* buff, std::size_t& size)
|
||||||
|
{
|
||||||
|
ss.read(buff, BUFFERING_SIZE_MAX);
|
||||||
|
size = static_cast<std::size_t>(ss.gcount());
|
||||||
|
return (size > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//shows how you can treat data
|
||||||
|
void consume( const char* buff, const std::size_t size,
|
||||||
|
ref_buffer<json_like_printer> & rb,
|
||||||
|
json_like_printer & jp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
rb.write(buff,size);
|
||||||
|
while( jp.next() )
|
||||||
|
{
|
||||||
|
//here we print the data, you could do any wanted processing
|
||||||
|
jp.print();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
std::vector<std::vector<int>> vvi1 { { 1,2,3,4,5}, { 6,7,8,9,10} };
|
||||||
|
std::vector<std::vector<int>> vvi2 { { 11,12,13,14,15}, { 16,17,18,19,20} };
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
msgpack::pack(ss, vvi1);
|
||||||
|
msgpack::pack(ss, vvi2);
|
||||||
|
|
||||||
|
char buffer[BUFFERING_SIZE_MAX];
|
||||||
|
std::size_t size = 0;
|
||||||
|
|
||||||
|
json_like_printer jp(1); // set initial buffer size explicitly
|
||||||
|
ref_buffer<json_like_printer> rb(jp);
|
||||||
|
|
||||||
|
while( produce(ss,buffer,size) )
|
||||||
|
{
|
||||||
|
consume(buffer, size, rb, jp);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
72
example/x3/CMakeLists.txt
Normal file
72
example/x3/CMakeLists.txt
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
IF (MSGPACK_USE_X3_PARSE)
|
||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
../include
|
||||||
|
)
|
||||||
|
|
||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
unpack.cpp
|
||||||
|
parse.cpp
|
||||||
|
)
|
||||||
|
IF (MSGPACK_BOOST)
|
||||||
|
LIST (APPEND with_boost_PROGRAMS
|
||||||
|
stream_unpack.cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${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")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g ")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
ENDFOREACH ()
|
||||||
|
FOREACH (source_file ${with_boost_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
TARGET_INCLUDE_DIRECTORIES (${source_file_we}
|
||||||
|
PRIVATE
|
||||||
|
$<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES>
|
||||||
|
)
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
${Boost_CONTEXT_LIBRARY}
|
||||||
|
${Boost_SYSTEM_LIBRARY}
|
||||||
|
${CMAKE_THREAD_LIBS_INIT}
|
||||||
|
)
|
||||||
|
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 ")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
ENDFOREACH ()
|
||||||
|
ENDIF ()
|
119
example/x3/parse.cpp
Normal file
119
example/x3/parse.cpp
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
// 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 <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
// MSGPACK_USE_X3_PARSE should be defined before including msgpack.hpp
|
||||||
|
// It usually defined as a compiler option as -DMSGPACK_USE_X3_PARSE.
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct json_like_visitor : msgpack::v2::null_visitor {
|
||||||
|
json_like_visitor(std::string& s):m_s(s) {}
|
||||||
|
|
||||||
|
bool visit_nil() {
|
||||||
|
m_s += "null";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_boolean(bool v) {
|
||||||
|
if (v) m_s += "true";
|
||||||
|
else m_s += "false";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_positive_integer(uint64_t v) {
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << v;
|
||||||
|
m_s += ss.str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_negative_integer(int64_t v) {
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << v;
|
||||||
|
m_s += ss.str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_float(double v) {
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << v;
|
||||||
|
m_s += ss.str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool visit_str(const char* v, uint32_t size) {
|
||||||
|
m_s += '"' + std::string(v, size) + '"';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool start_array(uint32_t /*num_elements*/) {
|
||||||
|
m_s += "[";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_array_item() {
|
||||||
|
m_s += ",";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_array() {
|
||||||
|
m_s.erase(m_s.size() - 1, 1); // remove the last ','
|
||||||
|
m_s += "]";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool start_map(uint32_t /*num_kv_pairs*/) {
|
||||||
|
m_s += "{";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_map_key() {
|
||||||
|
m_s += ":";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_map_value() {
|
||||||
|
m_s += ",";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool end_map() {
|
||||||
|
m_s.erase(m_s.size() - 1, 1); // remove the last ','
|
||||||
|
m_s += "}";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void parse_error(size_t /*parsed_offset*/, size_t /*error_offset*/) {
|
||||||
|
}
|
||||||
|
void insufficient_bytes(size_t /*parsed_offset*/, size_t /*error_offset*/) {
|
||||||
|
}
|
||||||
|
std::string& m_s;
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::stringstream ss;
|
||||||
|
std::map<std::string, std::vector<int>> v1 {
|
||||||
|
{ "ABC", { 1, 2, 3 } },
|
||||||
|
{ "DEFG", { 4, 5 } }
|
||||||
|
};
|
||||||
|
std::vector<std::string> v2 {
|
||||||
|
"HIJ", "KLM", "NOP"
|
||||||
|
};
|
||||||
|
msgpack::pack(ss, v1);
|
||||||
|
msgpack::pack(ss, v2);
|
||||||
|
|
||||||
|
std::string const& buf = ss.str();
|
||||||
|
auto it = buf.begin();
|
||||||
|
auto end = buf.end();
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
bool ret = msgpack::parse(it, end, json_like_visitor(str));
|
||||||
|
// it is updated here.
|
||||||
|
assert(ret);
|
||||||
|
std::cout << str << std::endl;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
bool ret = msgpack::parse(it, end, json_like_visitor(str));
|
||||||
|
// it is updated here.
|
||||||
|
assert(ret);
|
||||||
|
std::cout << str << std::endl;
|
||||||
|
}
|
||||||
|
}
|
248
example/x3/stream_unpack.cpp
Normal file
248
example/x3/stream_unpack.cpp
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
// 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 <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cassert>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
// MSGPACK_USE_X3_PARSE should be defined before including msgpack.hpp
|
||||||
|
// It usually defined as a compiler option as -DMSGPACK_USE_X3_PARSE.
|
||||||
|
|
||||||
|
//#define MSGPACK_USE_X3_PARSE
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
#include <boost/asio.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>
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif // defined(__clang__)
|
||||||
|
|
||||||
|
namespace as = boost::asio;
|
||||||
|
namespace x3 = boost::spirit::x3;
|
||||||
|
namespace coro2 = boost::coroutines2;
|
||||||
|
|
||||||
|
using pull_type = coro2::asymmetric_coroutine<std::shared_ptr<std::vector<char>>>::pull_type;
|
||||||
|
|
||||||
|
// iterator fetching data from coroutine2.
|
||||||
|
class buffered_iterator : public std::iterator<std::input_iterator_tag, char> {
|
||||||
|
public:
|
||||||
|
using pointer_t = typename iterator::pointer;
|
||||||
|
using reference_t = typename iterator::reference;
|
||||||
|
|
||||||
|
explicit buffered_iterator(pull_type& source) noexcept
|
||||||
|
: source_{ &source } {
|
||||||
|
fetch_();
|
||||||
|
}
|
||||||
|
buffered_iterator() = default;
|
||||||
|
|
||||||
|
bool operator==(buffered_iterator const& other) const noexcept {
|
||||||
|
if (!other.source_ && !source_ && !other.buf_ && !buf_) return true;
|
||||||
|
return other.it_ == it_;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(buffered_iterator const& other) const noexcept {
|
||||||
|
return !(other == *this);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffered_iterator & operator++() {
|
||||||
|
increment_();
|
||||||
|
return * this;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffered_iterator operator++(int) = delete;
|
||||||
|
|
||||||
|
reference_t operator*() noexcept {
|
||||||
|
return *it_;
|
||||||
|
}
|
||||||
|
|
||||||
|
pointer_t operator->() noexcept {
|
||||||
|
return std::addressof(*it_);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void fetch_() noexcept {
|
||||||
|
BOOST_ASSERT( nullptr != source_);
|
||||||
|
if (*source_) {
|
||||||
|
buf_ = source_->get();
|
||||||
|
it_ = buf_->begin();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
source_ = nullptr;
|
||||||
|
buf_.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void increment_() {
|
||||||
|
BOOST_ASSERT( nullptr != source_);
|
||||||
|
BOOST_ASSERT(*source_);
|
||||||
|
if (++it_ == buf_->end()) {
|
||||||
|
(*source_)();
|
||||||
|
fetch_();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
pull_type* source_{ nullptr };
|
||||||
|
std::shared_ptr<std::vector<char>> buf_;
|
||||||
|
std::vector<char>::iterator it_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// session class that corresponding to each client
|
||||||
|
class session : public std::enable_shared_from_this<session> {
|
||||||
|
public:
|
||||||
|
session(as::ip::tcp::socket socket)
|
||||||
|
: socket_(std::move(socket)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void start() {
|
||||||
|
sink_ = std::make_shared<coro2::asymmetric_coroutine<std::shared_ptr<std::vector<char>>>::push_type>(
|
||||||
|
[&, this](pull_type& source) {
|
||||||
|
// *1 is started when the first sink is called.
|
||||||
|
|
||||||
|
std::cout << "session started" << std::endl;
|
||||||
|
do_read();
|
||||||
|
source();
|
||||||
|
|
||||||
|
// use buffered_iterator here
|
||||||
|
// b is incremented in msgpack::unpack() and fetch data from sink
|
||||||
|
// via coroutine2 mechanism
|
||||||
|
auto b = boost::spirit::make_default_multi_pass(buffered_iterator(source));
|
||||||
|
auto e = boost::spirit::make_default_multi_pass(buffered_iterator());
|
||||||
|
|
||||||
|
// This is usually an infinity look, but for test, loop is finished when
|
||||||
|
// two message pack data is processed.
|
||||||
|
for (int i = 0; i != 2; ++i) {
|
||||||
|
auto oh = msgpack::unpack(b, e);
|
||||||
|
std::cout << oh.get() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// send dummy data to start *1
|
||||||
|
(*sink_)({});
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void do_read() {
|
||||||
|
std::cout << "session do_read() is called" << std::endl;
|
||||||
|
auto self(shared_from_this());
|
||||||
|
auto data = std::make_shared<std::vector<char>>(static_cast<std::size_t>(max_length));
|
||||||
|
socket_.async_read_some(
|
||||||
|
boost::asio::buffer(*data),
|
||||||
|
[this, self, data]
|
||||||
|
(boost::system::error_code ec, std::size_t length) {
|
||||||
|
if (!ec) {
|
||||||
|
data->resize(length);
|
||||||
|
(*sink_)(data);
|
||||||
|
do_read();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
as::ip::tcp::socket socket_;
|
||||||
|
static constexpr std::size_t const max_length = 1024;
|
||||||
|
std::shared_ptr<coro2::asymmetric_coroutine<std::shared_ptr<std::vector<char>>>::push_type> sink_;
|
||||||
|
};
|
||||||
|
|
||||||
|
class server {
|
||||||
|
public:
|
||||||
|
server(
|
||||||
|
as::io_service& ios,
|
||||||
|
std::uint16_t port)
|
||||||
|
: acceptor_(ios, as::ip::tcp::endpoint(as::ip::tcp::v4(), port)),
|
||||||
|
socket_(ios) {
|
||||||
|
do_accept();
|
||||||
|
std::cout << "server start accept" << std::endl;
|
||||||
|
ios.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void do_accept() {
|
||||||
|
acceptor_.async_accept(
|
||||||
|
socket_,
|
||||||
|
[this](boost::system::error_code ec) {
|
||||||
|
if (!ec) {
|
||||||
|
std::make_shared<session>(std::move(socket_))->start();
|
||||||
|
}
|
||||||
|
// for test, only one session is accepted.
|
||||||
|
// do_accept();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
as::ip::tcp::acceptor acceptor_;
|
||||||
|
as::ip::tcp::socket socket_;
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::thread srv(
|
||||||
|
[]{
|
||||||
|
boost::asio::io_service ios;
|
||||||
|
server s(ios, 12345);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
std::thread cli(
|
||||||
|
[]{
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
std::cout << "client start" << std::endl;
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
std::map<std::string, std::vector<int>> v1 {
|
||||||
|
{ "ABC", { 1, 2, 3 } },
|
||||||
|
{ "DEFG", { 4, 5 } }
|
||||||
|
};
|
||||||
|
std::vector<std::string> v2 {
|
||||||
|
"HIJ", "KLM", "NOP"
|
||||||
|
};
|
||||||
|
msgpack::pack(ss, v1);
|
||||||
|
msgpack::pack(ss, v2);
|
||||||
|
|
||||||
|
auto send_data = ss.str();
|
||||||
|
|
||||||
|
boost::asio::io_service ios;
|
||||||
|
as::ip::tcp::resolver::query q("127.0.0.1", "12345");
|
||||||
|
as::ip::tcp::resolver r(ios);
|
||||||
|
auto it = r.resolve(q);
|
||||||
|
|
||||||
|
std::cout << "client connect" << std::endl;
|
||||||
|
as::ip::tcp::socket s(ios);
|
||||||
|
as::connect(s, it);
|
||||||
|
|
||||||
|
|
||||||
|
std::size_t const size = 5;
|
||||||
|
std::size_t rest = send_data.size();
|
||||||
|
std::size_t index = 0;
|
||||||
|
while (rest != 0) {
|
||||||
|
std::cout << "client send data" << std::endl;
|
||||||
|
auto send_size = size < rest ? size : rest;
|
||||||
|
as::write(s, as::buffer(&send_data[index], send_size));
|
||||||
|
rest -= send_size;
|
||||||
|
index += send_size;
|
||||||
|
std::cout << "client wait" << std::endl;
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
cli.join();
|
||||||
|
std::cout << "client joinded" << std::endl;
|
||||||
|
srv.join();
|
||||||
|
std::cout << "server joinded" << std::endl;
|
||||||
|
}
|
43
example/x3/unpack.cpp
Normal file
43
example/x3/unpack.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// 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 <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
// MSGPACK_USE_X3_PARSE should be defined before including msgpack.hpp
|
||||||
|
// It usually defined as a compiler option as -DMSGPACK_USE_X3_PARSE.
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::stringstream ss;
|
||||||
|
std::map<std::string, std::vector<int>> v1 {
|
||||||
|
{ "ABC", { 1, 2, 3 } },
|
||||||
|
{ "DEFG", { 4, 5 } }
|
||||||
|
};
|
||||||
|
std::vector<std::string> v2 {
|
||||||
|
"HIJ", "KLM", "NOP"
|
||||||
|
};
|
||||||
|
msgpack::pack(ss, v1);
|
||||||
|
msgpack::pack(ss, v2);
|
||||||
|
|
||||||
|
std::string const& buf = ss.str();
|
||||||
|
auto it = buf.begin();
|
||||||
|
auto end = buf.end();
|
||||||
|
{
|
||||||
|
auto oh = msgpack::unpack(it, end);
|
||||||
|
// it is updated here.
|
||||||
|
assert(v1 == (oh.get().as<std::map<std::string, std::vector<int>>>()));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto oh = msgpack::unpack(it, end);
|
||||||
|
assert(v2 == oh.get().as<std::vector<std::string>>());
|
||||||
|
}
|
||||||
|
}
|
2
external/boost/predef
vendored
2
external/boost/predef
vendored
Submodule external/boost/predef updated: c14eafa3ef...1e8d1c2cfc
2
external/boost/preprocessor
vendored
2
external/boost/preprocessor
vendored
Submodule external/boost/preprocessor updated: 9cb039ab8b...c2beb74b90
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2015-2016 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
|
||||||
@@ -10,75 +10,9 @@
|
|||||||
#ifndef MSGPACK_ADAPTOR_BASE_HPP
|
#ifndef MSGPACK_ADAPTOR_BASE_HPP
|
||||||
#define MSGPACK_ADAPTOR_BASE_HPP
|
#define MSGPACK_ADAPTOR_BASE_HPP
|
||||||
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base_decl.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
class packer;
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
// Adaptor functors
|
|
||||||
|
|
||||||
template <typename T, typename Enabler = void>
|
|
||||||
struct convert {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, T& v) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Enabler = void>
|
|
||||||
struct pack {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, T const& v) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Enabler = void>
|
|
||||||
struct object {
|
|
||||||
void operator()(msgpack::object& o, T const& v) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Enabler = void>
|
|
||||||
struct object_with_zone {
|
|
||||||
void operator()(msgpack::object::with_zone& o, T const& v) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
// operators
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, T& v) {
|
|
||||||
return adaptor::convert<T>()(o, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
inline
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, T const& v) {
|
|
||||||
return adaptor::pack<T>()(o, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline
|
|
||||||
void operator<< (msgpack::object& o, T const& v) {
|
|
||||||
adaptor::object<T>()(o, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline
|
|
||||||
void operator<< (msgpack::object::with_zone& o, T const& v) {
|
|
||||||
adaptor::object_with_zone<T>()(o, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/adaptor_base.hpp"
|
||||||
|
|
||||||
#endif // MSGPACK_ADAPTOR_BASE_HPP
|
#endif // MSGPACK_ADAPTOR_BASE_HPP
|
||||||
|
16
include/msgpack/adaptor/adaptor_base_decl.hpp
Normal file
16
include/msgpack/adaptor/adaptor_base_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_ADAPTOR_BASE_DECL_HPP
|
||||||
|
#define MSGPACK_ADAPTOR_BASE_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/adaptor_base_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/adaptor_base_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_ADAPTOR_BASE_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
@@ -10,165 +10,8 @@
|
|||||||
#ifndef MSGPACK_TYPE_ARRAY_REF_HPP
|
#ifndef MSGPACK_TYPE_ARRAY_REF_HPP
|
||||||
#define MSGPACK_TYPE_ARRAY_REF_HPP
|
#define MSGPACK_TYPE_ARRAY_REF_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/array_ref_decl.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
#include <cstring>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/array_ref.hpp"
|
||||||
|
|
||||||
/// @cond
|
#endif // MSGPACK_TYPE_ARRAY_REFL_HPP
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct array_ref {
|
|
||||||
array_ref() : data(nullptr) {}
|
|
||||||
array_ref(T& t) : data(&t) {}
|
|
||||||
|
|
||||||
T* data;
|
|
||||||
|
|
||||||
template <typename U>
|
|
||||||
bool operator==(array_ref<U> const& t) const {
|
|
||||||
return *data == *t.data;
|
|
||||||
}
|
|
||||||
template <typename U>
|
|
||||||
bool operator!=(array_ref<U> const& t) const {
|
|
||||||
return !(*data == *t.data);
|
|
||||||
}
|
|
||||||
template <typename U>
|
|
||||||
bool operator< (array_ref<U> const& t) const
|
|
||||||
{
|
|
||||||
return *data < *t.data;
|
|
||||||
}
|
|
||||||
template <typename U>
|
|
||||||
bool operator> (array_ref<U> const& t) const
|
|
||||||
{
|
|
||||||
return *t.data < *data;
|
|
||||||
}
|
|
||||||
template <typename U>
|
|
||||||
bool operator<= (array_ref<U> const& t) const
|
|
||||||
{
|
|
||||||
return !(*t.data < *data);
|
|
||||||
}
|
|
||||||
template <typename U>
|
|
||||||
bool operator>= (array_ref<U> const& t) const
|
|
||||||
{
|
|
||||||
return !(*data < *t.data);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline array_ref<T const> make_array_ref(T const& t) {
|
|
||||||
return array_ref<T const>(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline array_ref<T> make_array_ref(T& t) {
|
|
||||||
return array_ref<T>(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<msgpack::type::array_ref<T> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<T>& v) const {
|
|
||||||
if (!v.data) { throw msgpack::type_error(); }
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if (v.data->size() < o.via.bin.size) { throw msgpack::type_error(); }
|
|
||||||
if (o.via.array.size > 0) {
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
typename T::iterator it = v.data->begin();
|
|
||||||
do {
|
|
||||||
p->convert(*it);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<msgpack::type::array_ref<std::vector<T> > > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<std::vector<T> >& v) const {
|
|
||||||
if (!v.data) { throw msgpack::type_error(); }
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
v.data->resize(o.via.bin.size);
|
|
||||||
if (o.via.array.size > 0) {
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
typename std::vector<T>::iterator it = v.data->begin();
|
|
||||||
do {
|
|
||||||
p->convert(*it);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct pack<msgpack::type::array_ref<T> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::array_ref<T>& v) const {
|
|
||||||
if (!v.data) { throw msgpack::type_error(); }
|
|
||||||
uint32_t size = checked_get_container_size(v.data->size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for (typename T::const_iterator it(v.data->begin()), it_end(v.data->end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object_with_zone<msgpack::type::array_ref<T> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const msgpack::type::array_ref<T>& v) const {
|
|
||||||
if (!v.data) { throw msgpack::type_error(); }
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if (v.data->empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uint32_t size = checked_get_container_size(v.data->size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename T::const_iterator it(v.data->begin());
|
|
||||||
do {
|
|
||||||
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
|
||||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_REF_HPP
|
|
||||||
|
16
include/msgpack/adaptor/array_ref_decl.hpp
Normal file
16
include/msgpack/adaptor/array_ref_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2008-2016 FURUHASHI Sadayuki and 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_ARRAY_REF_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_ARRAY_REF_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/array_ref_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/array_ref_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_ARRAY_REF_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
@@ -10,57 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_BOOL_HPP
|
#ifndef MSGPACK_TYPE_BOOL_HPP
|
||||||
#define MSGPACK_TYPE_BOOL_HPP
|
#define MSGPACK_TYPE_BOOL_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/bool.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<bool> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, bool& v) const {
|
|
||||||
if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); }
|
|
||||||
v = o.via.boolean;
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<bool> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const bool& v) const {
|
|
||||||
if(v) { o.pack_true(); }
|
|
||||||
else { o.pack_false(); }
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<bool> {
|
|
||||||
void operator()(msgpack::object& o, bool v) const {
|
|
||||||
o.type = msgpack::type::BOOLEAN;
|
|
||||||
o.via.boolean = v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<bool> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, bool v) const {
|
|
||||||
static_cast<msgpack::object&>(o) << v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOL_HPP
|
#endif // MSGPACK_TYPE_BOOL_HPP
|
||||||
|
@@ -10,151 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_BOOST_FUSION_HPP
|
#ifndef MSGPACK_TYPE_BOOST_FUSION_HPP
|
||||||
#define MSGPACK_TYPE_BOOST_FUSION_HPP
|
#define MSGPACK_TYPE_BOOST_FUSION_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/boost/fusion.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
#include "msgpack/meta.hpp"
|
|
||||||
|
|
||||||
#if !defined (MSGPACK_USE_CPP03)
|
|
||||||
#include "msgpack/adaptor/cpp11/tuple.hpp"
|
|
||||||
#endif // #if !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
|
||||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
|
||||||
#include <boost/fusion/algorithm/iteration/for_each.hpp>
|
|
||||||
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
|
||||||
#include <boost/fusion/include/mpl.hpp>
|
|
||||||
#include <boost/mpl/size.hpp>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct as<
|
|
||||||
T,
|
|
||||||
typename msgpack::enable_if<
|
|
||||||
boost::fusion::traits::is_sequence<T>::value &&
|
|
||||||
boost::mpl::fold<
|
|
||||||
T,
|
|
||||||
boost::mpl::bool_<true>,
|
|
||||||
boost::mpl::if_ <
|
|
||||||
boost::mpl::and_<
|
|
||||||
boost::mpl::_1,
|
|
||||||
msgpack::has_as<boost::mpl::_2>
|
|
||||||
>,
|
|
||||||
boost::mpl::bool_<true>,
|
|
||||||
boost::mpl::bool_<false>
|
|
||||||
>
|
|
||||||
>::type::value
|
|
||||||
>::type
|
|
||||||
> {
|
|
||||||
T operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if (o.via.array.size != checked_get_container_size(boost::mpl::size<T>::value)) {
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
using tuple_t = decltype(to_tuple(std::declval<T>(), gen_seq<boost::mpl::size<T>::value>()));
|
|
||||||
return to_t(
|
|
||||||
o.as<tuple_t>(),
|
|
||||||
msgpack::gen_seq<boost::mpl::size<T>::value>());
|
|
||||||
}
|
|
||||||
template<std::size_t... Is, typename U>
|
|
||||||
static std::tuple<
|
|
||||||
typename std::remove_reference<
|
|
||||||
typename boost::fusion::result_of::at_c<T, Is>::type
|
|
||||||
>::type...>
|
|
||||||
to_tuple(U const& u, seq<Is...>) {
|
|
||||||
return std::make_tuple(boost::fusion::at_c<Is>(u)...);
|
|
||||||
}
|
|
||||||
template<std::size_t... Is, typename U>
|
|
||||||
static T to_t(U const& u, seq<Is...>) {
|
|
||||||
return T(std::get<Is>(u)...);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, T& v) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) {
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
uint32_t index = 0;
|
|
||||||
boost::fusion::for_each(v, convert_imp(o, index));
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
struct convert_imp {
|
|
||||||
convert_imp(msgpack::object const& obj, uint32_t& index):obj_(obj), index_(index) {}
|
|
||||||
template <typename U>
|
|
||||||
void operator()(U& v) const {
|
|
||||||
msgpack::adaptor::convert<U>()(obj_.via.array.ptr[index_++], v);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
msgpack::object const& obj_;
|
|
||||||
uint32_t& index_;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct pack<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(boost::fusion::size(v));
|
|
||||||
o.pack_array(size);
|
|
||||||
boost::fusion::for_each(v, pack_imp<Stream>(o));
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
template <typename Stream>
|
|
||||||
struct pack_imp {
|
|
||||||
pack_imp(msgpack::packer<Stream>& stream):stream_(stream) {}
|
|
||||||
template <typename U>
|
|
||||||
void operator()(U const& v) const {
|
|
||||||
stream_.pack(v);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
msgpack::packer<Stream>& stream_;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object_with_zone<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const T& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(boost::fusion::size(v));
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
o.via.array.size = size;
|
|
||||||
uint32_t count = 0;
|
|
||||||
boost::fusion::for_each(v, with_zone_imp(o, count));
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
struct with_zone_imp {
|
|
||||||
with_zone_imp(msgpack::object::with_zone const& obj, uint32_t& count):obj_(obj), count_(count) {}
|
|
||||||
template <typename U>
|
|
||||||
void operator()(U const& v) const {
|
|
||||||
obj_.via.array.ptr[count_++] = msgpack::object(v, obj_.zone);
|
|
||||||
}
|
|
||||||
msgpack::object::with_zone const& obj_;
|
|
||||||
uint32_t& count_;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_FUSION_HPP
|
#endif // MSGPACK_TYPE_BOOST_FUSION_HPP
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2015-2016 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
|
||||||
@@ -10,421 +10,9 @@
|
|||||||
#ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
#ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
||||||
#define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
#define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_BOOST)
|
#include "msgpack/adaptor/boost/msgpack_variant_decl.hpp"
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/boost/msgpack_variant.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
//#include "msgpack/v2/adaptor/boost/msgpack_variant.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
#include "msgpack/adaptor/boost/string_ref.hpp"
|
|
||||||
|
|
||||||
#include "msgpack/adaptor/nil.hpp"
|
|
||||||
#include "msgpack/adaptor/bool.hpp"
|
|
||||||
#include "msgpack/adaptor/int.hpp"
|
|
||||||
#include "msgpack/adaptor/float.hpp"
|
|
||||||
#include "msgpack/adaptor/string.hpp"
|
|
||||||
#include "msgpack/adaptor/vector_char.hpp"
|
|
||||||
#include "msgpack/adaptor/raw.hpp"
|
|
||||||
#include "msgpack/adaptor/ext.hpp"
|
|
||||||
#include "msgpack/adaptor/vector.hpp"
|
|
||||||
#include "msgpack/adaptor/map.hpp"
|
|
||||||
|
|
||||||
#include <boost/variant.hpp>
|
|
||||||
#include <boost/operators.hpp>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
struct basic_variant :
|
|
||||||
boost::variant<
|
|
||||||
nil_t, // NIL
|
|
||||||
bool, // BOOL
|
|
||||||
int64_t, // NEGATIVE_INTEGER
|
|
||||||
uint64_t, // POSITIVE_INTEGER
|
|
||||||
double, // FLOAT
|
|
||||||
std::string, // STR
|
|
||||||
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
boost::string_ref, // STR
|
|
||||||
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
std::vector<char>, // BIN
|
|
||||||
msgpack::type::raw_ref, // BIN
|
|
||||||
ext, // EXT
|
|
||||||
ext_ref, // EXT
|
|
||||||
boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >, // ARRAY
|
|
||||||
boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >, // MAP
|
|
||||||
boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >// MAP
|
|
||||||
>,
|
|
||||||
private boost::totally_ordered<basic_variant<STR, BIN, EXT> > {
|
|
||||||
typedef boost::variant<
|
|
||||||
nil_t, // NIL
|
|
||||||
bool, // BOOL
|
|
||||||
int64_t, // NEGATIVE_INTEGER
|
|
||||||
uint64_t, // POSITIVE_INTEGER
|
|
||||||
double, // FLOAT
|
|
||||||
std::string, // STR
|
|
||||||
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
boost::string_ref, // STR
|
|
||||||
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
std::vector<char>, // BIN
|
|
||||||
msgpack::type::raw_ref, // BIN
|
|
||||||
ext, // EXT
|
|
||||||
ext_ref, // EXT
|
|
||||||
boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >, // ARRAY
|
|
||||||
boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >, // MAP
|
|
||||||
boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >// MAP
|
|
||||||
> base;
|
|
||||||
basic_variant() {}
|
|
||||||
template <typename T>
|
|
||||||
basic_variant(T const& t):base(t) {}
|
|
||||||
basic_variant(char const* p):base(std::string(p)) {}
|
|
||||||
basic_variant(char v) {
|
|
||||||
int_init(v);
|
|
||||||
}
|
|
||||||
basic_variant(signed char v) {
|
|
||||||
int_init(v);
|
|
||||||
}
|
|
||||||
basic_variant(unsigned char v):base(uint64_t(v)) {}
|
|
||||||
basic_variant(signed int v) {
|
|
||||||
int_init(v);
|
|
||||||
}
|
|
||||||
basic_variant(unsigned int v):base(uint64_t(v)) {}
|
|
||||||
basic_variant(signed long v) {
|
|
||||||
int_init(v);
|
|
||||||
}
|
|
||||||
basic_variant(unsigned long v):base(uint64_t(v)) {}
|
|
||||||
basic_variant(signed long long v) {
|
|
||||||
int_init(v);
|
|
||||||
}
|
|
||||||
basic_variant(unsigned long long v):base(uint64_t(v)) {}
|
|
||||||
|
|
||||||
bool is_nil() const {
|
|
||||||
return boost::get<msgpack::type::nil_t>(this);
|
|
||||||
}
|
|
||||||
bool is_bool() const {
|
|
||||||
return boost::get<bool>(this);
|
|
||||||
}
|
|
||||||
bool is_int64_t() const {
|
|
||||||
return boost::get<int64_t>(this);
|
|
||||||
}
|
|
||||||
bool is_uint64_t() const {
|
|
||||||
return boost::get<uint64_t>(this);
|
|
||||||
}
|
|
||||||
bool is_double() const {
|
|
||||||
return boost::get<double>(this);
|
|
||||||
}
|
|
||||||
bool is_string() const {
|
|
||||||
return boost::get<std::string>(this);
|
|
||||||
}
|
|
||||||
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
bool is_boost_string_ref() const {
|
|
||||||
return boost::get<boost::string_ref>(this);
|
|
||||||
}
|
|
||||||
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
bool is_vector_char() const {
|
|
||||||
return boost::get<std::vector<char> >(this);
|
|
||||||
}
|
|
||||||
bool is_vector_char() {
|
|
||||||
return boost::get<std::vector<char> >(this);
|
|
||||||
}
|
|
||||||
bool is_raw_ref() const {
|
|
||||||
return boost::get<raw_ref>(this);
|
|
||||||
}
|
|
||||||
bool is_ext() const {
|
|
||||||
return boost::get<ext>(this);
|
|
||||||
}
|
|
||||||
bool is_ext_ref() const {
|
|
||||||
return boost::get<ext_ref>(this);
|
|
||||||
}
|
|
||||||
bool is_vector() const {
|
|
||||||
return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(this);
|
|
||||||
}
|
|
||||||
bool is_map() const {
|
|
||||||
return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(this);
|
|
||||||
}
|
|
||||||
bool is_multimap() const {
|
|
||||||
return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool as_bool() const {
|
|
||||||
return boost::get<bool>(*this);
|
|
||||||
}
|
|
||||||
int64_t as_int64_t() const {
|
|
||||||
return boost::get<int64_t>(*this);
|
|
||||||
}
|
|
||||||
int64_t& as_int64_t() {
|
|
||||||
return boost::get<int64_t>(*this);
|
|
||||||
}
|
|
||||||
uint64_t as_uint64_t() const {
|
|
||||||
return boost::get<uint64_t>(*this);
|
|
||||||
}
|
|
||||||
uint64_t& as_uint64_t() {
|
|
||||||
return boost::get<uint64_t>(*this);
|
|
||||||
}
|
|
||||||
double as_double() const {
|
|
||||||
return boost::get<double>(*this);
|
|
||||||
}
|
|
||||||
double& as_double() {
|
|
||||||
return boost::get<double>(*this);
|
|
||||||
}
|
|
||||||
std::string const& as_string() const {
|
|
||||||
return boost::get<std::string>(*this);
|
|
||||||
}
|
|
||||||
std::string& as_string() {
|
|
||||||
return boost::get<std::string>(*this);
|
|
||||||
}
|
|
||||||
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
boost::string_ref const& as_boost_string_ref() const {
|
|
||||||
return boost::get<boost::string_ref>(*this);
|
|
||||||
}
|
|
||||||
boost::string_ref& as_boost_string_ref() {
|
|
||||||
return boost::get<boost::string_ref>(*this);
|
|
||||||
}
|
|
||||||
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
std::vector<char> const& as_vector_char() const {
|
|
||||||
return boost::get<std::vector<char> >(*this);
|
|
||||||
}
|
|
||||||
std::vector<char>& as_vector_char() {
|
|
||||||
return boost::get<std::vector<char> >(*this);
|
|
||||||
}
|
|
||||||
raw_ref const& as_raw_ref() const {
|
|
||||||
return boost::get<raw_ref>(*this);
|
|
||||||
}
|
|
||||||
ext const& as_ext() const {
|
|
||||||
return boost::get<ext>(*this);
|
|
||||||
}
|
|
||||||
ext& as_ext() {
|
|
||||||
return boost::get<ext>(*this);
|
|
||||||
}
|
|
||||||
ext_ref const& as_ext_ref() const {
|
|
||||||
return boost::get<ext_ref>(*this);
|
|
||||||
}
|
|
||||||
std::vector<basic_variant<STR, BIN, EXT> > const& as_vector() const {
|
|
||||||
return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this);
|
|
||||||
}
|
|
||||||
std::vector<basic_variant<STR, BIN, EXT> >& as_vector() {
|
|
||||||
return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this);
|
|
||||||
}
|
|
||||||
std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > const& as_map() const {
|
|
||||||
return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this);
|
|
||||||
}
|
|
||||||
std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> >& as_map() {
|
|
||||||
return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this);
|
|
||||||
}
|
|
||||||
std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > const& as_multimap() const {
|
|
||||||
return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this);
|
|
||||||
}
|
|
||||||
std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> >& as_multimap() {
|
|
||||||
return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this);
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
template <typename T>
|
|
||||||
void int_init(T v) {
|
|
||||||
if (v < 0) {
|
|
||||||
static_cast<base&>(*this) = int64_t(v);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
static_cast<base&>(*this) = uint64_t(v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
inline bool operator<(basic_variant<STR, BIN, EXT> const& lhs, basic_variant<STR, BIN, EXT> const& rhs) {
|
|
||||||
return
|
|
||||||
static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(lhs) <
|
|
||||||
static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(rhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
inline bool operator==(basic_variant<STR, BIN, EXT> const& lhs, basic_variant<STR, BIN, EXT> const& rhs) {
|
|
||||||
return
|
|
||||||
static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(lhs) ==
|
|
||||||
static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(rhs);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef basic_variant<std::string, std::vector<char>, ext> variant;
|
|
||||||
typedef basic_variant<
|
|
||||||
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
boost::string_ref,
|
|
||||||
#else // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
std::string,
|
|
||||||
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
raw_ref, ext_ref> variant_ref;
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
struct as<msgpack::type::basic_variant<STR, BIN, EXT> > {
|
|
||||||
msgpack::type::basic_variant<STR, BIN, EXT> operator()(msgpack::object const& o) const {
|
|
||||||
switch(o.type) {
|
|
||||||
case type::NIL:
|
|
||||||
return o.as<msgpack::type::nil_t>();
|
|
||||||
case type::BOOLEAN:
|
|
||||||
return o.as<bool>();
|
|
||||||
case type::POSITIVE_INTEGER:
|
|
||||||
return o.as<uint64_t>();
|
|
||||||
case type::NEGATIVE_INTEGER:
|
|
||||||
return o.as<int64_t>();
|
|
||||||
case type::FLOAT:
|
|
||||||
return o.as<double>();
|
|
||||||
case type::STR:
|
|
||||||
return o.as<STR>();
|
|
||||||
case type::BIN:
|
|
||||||
return o.as<BIN>();
|
|
||||||
case type::EXT:
|
|
||||||
return o.as<EXT>();
|
|
||||||
case type::ARRAY:
|
|
||||||
return o.as<std::vector<msgpack::type::basic_variant<STR, BIN, EXT> > >();
|
|
||||||
case type::MAP:
|
|
||||||
return o.as<std::multimap<msgpack::type::basic_variant<STR, BIN, EXT>, msgpack::type::basic_variant<STR, BIN, EXT> > >();
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return msgpack::type::basic_variant<STR, BIN, EXT>();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
struct convert<msgpack::type::basic_variant<STR, BIN, EXT> > {
|
|
||||||
msgpack::object const& operator()(
|
|
||||||
msgpack::object const& o,
|
|
||||||
msgpack::type::basic_variant<STR, BIN, EXT>& v) const {
|
|
||||||
switch(o.type) {
|
|
||||||
case type::NIL:
|
|
||||||
v = o.as<msgpack::type::nil_t>();
|
|
||||||
break;
|
|
||||||
case type::BOOLEAN:
|
|
||||||
v = o.as<bool>();
|
|
||||||
break;
|
|
||||||
case type::POSITIVE_INTEGER:
|
|
||||||
v = o.as<uint64_t>();
|
|
||||||
break;
|
|
||||||
case type::NEGATIVE_INTEGER:
|
|
||||||
v = o.as<int64_t>();
|
|
||||||
break;
|
|
||||||
case type::FLOAT:
|
|
||||||
v = o.as<double>();
|
|
||||||
break;
|
|
||||||
case type::STR:
|
|
||||||
v = o.as<STR>();
|
|
||||||
break;
|
|
||||||
case type::BIN:
|
|
||||||
v = o.as<BIN>();
|
|
||||||
break;
|
|
||||||
case type::EXT:
|
|
||||||
v = o.as<EXT>();
|
|
||||||
break;
|
|
||||||
case type::ARRAY:
|
|
||||||
v = o.as<std::vector<msgpack::type::basic_variant<STR, BIN, EXT> > >();
|
|
||||||
break;
|
|
||||||
case type::MAP:
|
|
||||||
v = o.as<std::multimap<msgpack::type::basic_variant<STR, BIN, EXT>, msgpack::type::basic_variant<STR, BIN, EXT> > >();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
struct pack_imp : boost::static_visitor<void> {
|
|
||||||
template <typename T>
|
|
||||||
void operator()(T const& value) const {
|
|
||||||
pack<T>()(o_, value);
|
|
||||||
}
|
|
||||||
pack_imp(packer<Stream>& o):o_(o) {}
|
|
||||||
packer<Stream>& o_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
struct pack<msgpack::type::basic_variant<STR, BIN, EXT> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const {
|
|
||||||
boost::apply_visitor(detail::pack_imp<Stream>(o), v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
struct object_imp : boost::static_visitor<void> {
|
|
||||||
void operator()(msgpack::type::nil_t const& v) const {
|
|
||||||
object<msgpack::type::nil_t>()(o_, v);
|
|
||||||
}
|
|
||||||
void operator()(bool const& v) const {
|
|
||||||
object<bool>()(o_, v);
|
|
||||||
}
|
|
||||||
void operator()(uint64_t const& v) const {
|
|
||||||
object<uint64_t>()(o_, v);
|
|
||||||
}
|
|
||||||
void operator()(int64_t const& v) const {
|
|
||||||
object<int64_t>()(o_, v);
|
|
||||||
}
|
|
||||||
void operator()(double const& v) const {
|
|
||||||
object<double>()(o_, v);
|
|
||||||
}
|
|
||||||
template <typename T>
|
|
||||||
void operator()(T const&) const {
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
object_imp(msgpack::object& o):o_(o) {}
|
|
||||||
msgpack::object& o_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
struct object<msgpack::type::basic_variant<STR, BIN, EXT> > {
|
|
||||||
void operator()(msgpack::object& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const {
|
|
||||||
boost::apply_visitor(detail::object_imp(o), v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
struct object_with_zone_imp : boost::static_visitor<void> {
|
|
||||||
template <typename T>
|
|
||||||
void operator()(T const& v) const {
|
|
||||||
object_with_zone<T>()(o_, v);
|
|
||||||
}
|
|
||||||
object_with_zone_imp(msgpack::object::with_zone& o):o_(o) {}
|
|
||||||
msgpack::object::with_zone& o_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
template <typename STR, typename BIN, typename EXT>
|
|
||||||
struct object_with_zone<msgpack::type::basic_variant<STR, BIN, EXT> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const {
|
|
||||||
boost::apply_visitor(detail::object_with_zone_imp(o), v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_USE_BOOST
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
#endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
||||||
|
16
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
Normal file
16
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_MSGPACK_VARIANT_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
@@ -10,87 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
#ifndef MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
||||||
#define MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
#define MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/boost/optional.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
// To suppress warning on Boost.1.58.0
|
|
||||||
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
|
||||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
|
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
|
||||||
|
|
||||||
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__)
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct as<boost::optional<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
boost::optional<T> operator()(msgpack::object const& o) const {
|
|
||||||
if(o.is_nil()) return boost::none;
|
|
||||||
return o.as<T>();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined (MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<boost::optional<T> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, boost::optional<T>& v) const {
|
|
||||||
if(o.is_nil()) v = boost::none;
|
|
||||||
else {
|
|
||||||
T t;
|
|
||||||
msgpack::adaptor::convert<T>()(o, t);
|
|
||||||
v = t;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct pack<boost::optional<T> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::optional<T>& v) const {
|
|
||||||
if (v) o.pack(*v);
|
|
||||||
else o.pack_nil();
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object<boost::optional<T> > {
|
|
||||||
void operator()(msgpack::object& o, const boost::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<boost::optional<T> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const boost::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 // MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
#endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
@@ -10,78 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
#ifndef MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
||||||
#define MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
#define MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
||||||
|
|
||||||
#include <boost/version.hpp>
|
#include "msgpack/v1/adaptor/boost/string_ref.hpp"
|
||||||
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <boost/utility/string_ref.hpp>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<boost::string_ref> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, boost::string_ref& v) const {
|
|
||||||
switch (o.type) {
|
|
||||||
case msgpack::type::BIN:
|
|
||||||
v = boost::string_ref(o.via.bin.ptr, o.via.bin.size);
|
|
||||||
break;
|
|
||||||
case msgpack::type::STR:
|
|
||||||
v = boost::string_ref(o.via.str.ptr, o.via.str.size);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw msgpack::type_error();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<boost::string_ref> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::string_ref& 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_ref> {
|
|
||||||
void operator()(msgpack::object& o, const boost::string_ref& 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_ref> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const boost::string_ref& 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_TYPE_BOOST_STRING_REF_HPP
|
#endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
||||||
|
15
include/msgpack/adaptor/boost/string_view.hpp
Normal file
15
include/msgpack/adaptor/boost/string_view.hpp
Normal 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
|
15
include/msgpack/adaptor/carray.hpp
Normal file
15
include/msgpack/adaptor/carray.hpp
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_CARRAY_HPP
|
||||||
|
#define MSGPACK_TYPE_CARRAY_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/carray.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_CARRAY_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
@@ -10,148 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_CHAR_PTR_HPP
|
#ifndef MSGPACK_TYPE_CHAR_PTR_HPP
|
||||||
#define MSGPACK_TYPE_CHAR_PTR_HPP
|
#define MSGPACK_TYPE_CHAR_PTR_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/char_ptr.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<const char*> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.pack_str(size);
|
|
||||||
o.pack_str_body(v, size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<const char*> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
|
||||||
o.via.str.ptr = ptr;
|
|
||||||
o.via.str.size = size;
|
|
||||||
std::memcpy(ptr, v, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<const char*> {
|
|
||||||
void operator()(msgpack::object& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
o.via.str.ptr = v;
|
|
||||||
o.via.str.size = size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<char*> {
|
|
||||||
template <typename Stream>
|
|
||||||
packer<Stream>& operator()(packer<Stream>& o, char* v) const {
|
|
||||||
return o << static_cast<const char*>(v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<char*> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, char* v) const {
|
|
||||||
o << static_cast<const char*>(v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<char*> {
|
|
||||||
void operator()(msgpack::object& o, char* v) const {
|
|
||||||
o << static_cast<const char*>(v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct pack<char[N]> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.pack_str(size);
|
|
||||||
o.pack_str_body(v, size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object_with_zone<char[N]> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
|
||||||
o.via.str.ptr = ptr;
|
|
||||||
o.via.str.size = size;
|
|
||||||
std::memcpy(ptr, v, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object<char[N]> {
|
|
||||||
void operator()(msgpack::object& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
o.via.str.ptr = v;
|
|
||||||
o.via.str.size = size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct pack<const char[N]> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.pack_str(size);
|
|
||||||
o.pack_str_body(v, size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object_with_zone<const char[N]> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
|
||||||
o.via.str.ptr = ptr;
|
|
||||||
o.via.str.size = size;
|
|
||||||
std::memcpy(ptr, v, size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object<const char[N]> {
|
|
||||||
void operator()(msgpack::object& o, const char* v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
o.via.str.ptr = v;
|
|
||||||
o.via.str.size = size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CHAR_PTR_HPP
|
#endif // MSGPACK_TYPE_CHAR_PTR_HPP
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2015-2016 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
|
||||||
@@ -10,58 +10,8 @@
|
|||||||
#ifndef MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
#ifndef MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
||||||
#define MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
#define MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/check_container_size_decl.hpp"
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
struct container_size_overflow : public std::runtime_error {
|
|
||||||
explicit container_size_overflow(const std::string& msg)
|
|
||||||
:std::runtime_error(msg) {}
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
explicit container_size_overflow(const char* msg):
|
|
||||||
std::runtime_error(msg) {}
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
inline void check_container_size(std::size_t size) {
|
|
||||||
if (size > 0xffffffff) throw container_size_overflow("container size overflow");
|
|
||||||
}
|
|
||||||
|
|
||||||
template <>
|
|
||||||
inline void check_container_size<4>(std::size_t /*size*/) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
inline void check_container_size_for_ext(std::size_t size) {
|
|
||||||
if (size > 0xffffffff) throw container_size_overflow("container size overflow");
|
|
||||||
}
|
|
||||||
|
|
||||||
template <>
|
|
||||||
inline void check_container_size_for_ext<4>(std::size_t size) {
|
|
||||||
if (size > 0xfffffffe) throw container_size_overflow("container size overflow");
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline uint32_t checked_get_container_size(T size) {
|
|
||||||
detail::check_container_size<sizeof(T)>(size);
|
|
||||||
return static_cast<uint32_t>(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
#endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
||||||
|
16
include/msgpack/adaptor/check_container_size_decl.hpp
Normal file
16
include/msgpack/adaptor/check_container_size_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_CHECK_CONTAINER_SIZE_DECL_HPP
|
||||||
|
#define MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/check_container_size_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/check_container_size_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP
|
@@ -1,138 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef MSGPACK_CPP11_ARRAY_HPP
|
#ifndef MSGPACK_TYPE_CPP11_ARRAY_HPP
|
||||||
#define MSGPACK_CPP11_ARRAY_HPP
|
#define MSGPACK_TYPE_CPP11_ARRAY_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/cpp11/array.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
#include "msgpack/meta.hpp"
|
|
||||||
|
|
||||||
#include <array>
|
#endif // MSGPACK_TYPE_CPP11_ARRAY_HPP
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
namespace array {
|
|
||||||
|
|
||||||
template<typename T, std::size_t N1, std::size_t... I1, std::size_t N2, std::size_t... I2>
|
|
||||||
inline std::array<T, N1+N2> concat(
|
|
||||||
std::array<T, N1>&& a1,
|
|
||||||
std::array<T, N2>&& a2,
|
|
||||||
msgpack::seq<I1...>,
|
|
||||||
msgpack::seq<I2...>) {
|
|
||||||
return {{ std::move(a1[I1])..., std::move(a2[I2])... }};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, std::size_t N1, std::size_t N2>
|
|
||||||
inline std::array<T, N1+N2> concat(std::array<T, N1>&& a1, std::array<T, N2>&& a2) {
|
|
||||||
return concat(std::move(a1), std::move(a2), msgpack::gen_seq<N1>(), msgpack::gen_seq<N2>());
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
struct as_impl {
|
|
||||||
static std::array<T, N> as(msgpack::object const& o) {
|
|
||||||
msgpack::object* p = o.via.array.ptr + N - 1;
|
|
||||||
return concat(as_impl<T, N-1>::as(o), std::array<T, 1>{{p->as<T>()}});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct as_impl<T, 1> {
|
|
||||||
static std::array<T, 1> as(msgpack::object const& o) {
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
return std::array<T, 1>{{p->as<T>()}};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct as_impl<T, 0> {
|
|
||||||
static std::array<T, 0> as(msgpack::object const&) {
|
|
||||||
return std::array<T, 0>();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace array
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
struct as<std::array<T, N>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::array<T, N> operator()(msgpack::object const& o) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if(o.via.array.size != N) { throw msgpack::type_error(); }
|
|
||||||
return detail::array::as_impl<T, N>::as(o);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
struct convert<std::array<T, N>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::array<T, N>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if(o.via.array.size != N) { throw msgpack::type_error(); }
|
|
||||||
if(o.via.array.size > 0) {
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
T* it = &v[0];
|
|
||||||
do {
|
|
||||||
p->convert(*it);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
struct pack<std::array<T, N>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<T, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for(auto const& e : v) o.pack(e);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
struct object_with_zone<std::array<T, N>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::array<T, N>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
o.via.array.size = size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
for (auto const& e : v) *p++ = msgpack::object(e, o.zone);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_ARRAY_HPP
|
|
||||||
|
@@ -1,89 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_TYPE_ARRAY_CHAR_HPP
|
|
||||||
#define MSGPACK_TYPE_ARRAY_CHAR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#ifndef MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#define MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <array>
|
#include "msgpack/v1/adaptor/cpp11/array_char.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
#endif // MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct convert<std::array<char, N>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::array<char, N>& v) const {
|
|
||||||
switch (o.type) {
|
|
||||||
case msgpack::type::BIN:
|
|
||||||
if(o.via.bin.size != N) { throw msgpack::type_error(); }
|
|
||||||
std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size);
|
|
||||||
break;
|
|
||||||
case msgpack::type::STR:
|
|
||||||
if(o.via.str.size != N) { throw msgpack::type_error(); }
|
|
||||||
std::memcpy(v.data(), o.via.str.ptr, N);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw msgpack::type_error();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct pack<std::array<char, N>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<char, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_bin(size);
|
|
||||||
o.pack_bin_body(v.data(), size);
|
|
||||||
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object<std::array<char, N>> {
|
|
||||||
void operator()(msgpack::object& o, const std::array<char, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.type = msgpack::type::BIN;
|
|
||||||
o.via.bin.ptr = v.data();
|
|
||||||
o.via.bin.size = size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object_with_zone<std::array<char, N>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::array<char, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.type = msgpack::type::BIN;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
|
||||||
o.via.bin.ptr = ptr;
|
|
||||||
o.via.bin.size = size;
|
|
||||||
std::memcpy(ptr, v.data(), size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_CHAR_HPP
|
|
||||||
|
@@ -1,89 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP
|
|
||||||
#define MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#ifndef MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#define MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <array>
|
#include "msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
#endif // MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct convert<std::array<unsigned char, N>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::array<unsigned char, N>& v) const {
|
|
||||||
switch (o.type) {
|
|
||||||
case msgpack::type::BIN:
|
|
||||||
if(o.via.bin.size != N) { throw msgpack::type_error(); }
|
|
||||||
std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size);
|
|
||||||
break;
|
|
||||||
case msgpack::type::STR:
|
|
||||||
if(o.via.str.size != N) { throw msgpack::type_error(); }
|
|
||||||
std::memcpy(v.data(), o.via.str.ptr, N);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw msgpack::type_error();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct pack<std::array<unsigned char, N>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<unsigned char, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_bin(size);
|
|
||||||
o.pack_bin_body(reinterpret_cast<char const*>(v.data()), size);
|
|
||||||
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object<std::array<unsigned char, N>> {
|
|
||||||
void operator()(msgpack::object& o, const std::array<unsigned char, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.type = msgpack::type::BIN;
|
|
||||||
o.via.bin.ptr = reinterpret_cast<char const*>(v.data());
|
|
||||||
o.via.bin.size = size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
struct object_with_zone<std::array<unsigned char, N>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::array<unsigned char, N>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.type = msgpack::type::BIN;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
|
||||||
o.via.bin.ptr = ptr;
|
|
||||||
o.via.bin.size = size;
|
|
||||||
std::memcpy(ptr, v.data(), size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP
|
|
||||||
|
@@ -1,94 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014 KONDO-2015 Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef MSGPACK_CPP11_FORWARD_LIST_HPP
|
#ifndef MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP
|
||||||
#define MSGPACK_CPP11_FORWARD_LIST_HPP
|
#define MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/cpp11/forward_list.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <forward_list>
|
#endif // MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct as<std::forward_list<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::forward_list<T, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
std::forward_list<T, Alloc> v;
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr;
|
|
||||||
while (p != pend) {
|
|
||||||
--p;
|
|
||||||
v.push_front(p->as<T>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct convert<std::forward_list<T, Alloc>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::forward_list<T, Alloc>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
v.resize(o.via.array.size);
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
for (auto &e : v) {
|
|
||||||
p->convert(e);
|
|
||||||
++p;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct pack<std::forward_list<T, Alloc>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::forward_list<T, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end()));
|
|
||||||
o.pack_array(size);
|
|
||||||
for(auto const& e : v) o.pack(e);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct object_with_zone<std::forward_list<T, Alloc>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::forward_list<T, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end()));
|
|
||||||
o.via.array.size = size;
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(
|
|
||||||
o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
for(auto const& e : v) *p++ = msgpack::object(e, o.zone);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_FORWARD_LIST_HPP
|
|
||||||
|
@@ -1,68 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef MSGPACK_CPP11_REFERENCE_WRAPPER_HPP
|
#ifndef MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP
|
||||||
#define MSGPACK_CPP11_REFERENCE_WRAPPER_HPP
|
#define MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/cpp11/reference_wrapper.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <memory>
|
#endif // MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<std::reference_wrapper<T>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::reference_wrapper<T>& v) const {
|
|
||||||
msgpack::adaptor::convert<T>()(o, v.get());
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct pack<std::reference_wrapper<T>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::reference_wrapper<T>& v) const {
|
|
||||||
o.pack(v.get());
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object<std::reference_wrapper<T> > {
|
|
||||||
void operator()(msgpack::object& o, const std::reference_wrapper<T>& v) const {
|
|
||||||
msgpack::adaptor::object<typename std::remove_const<T>::type>()(o, v.get());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object_with_zone<std::reference_wrapper<T>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::reference_wrapper<T>& v) const {
|
|
||||||
msgpack::adaptor::object_with_zone<typename std::remove_const<T>::type>()(o, v.get());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_REFERENCE_WRAPPER_HPP
|
|
||||||
|
@@ -1,82 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef MSGPACK_CPP11_SHARED_PTR_HPP
|
#ifndef MSGPACK_TYPE_CPP11_SHARED_PTR_HPP
|
||||||
#define MSGPACK_CPP11_SHARED_PTR_HPP
|
#define MSGPACK_TYPE_CPP11_SHARED_PTR_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/cpp11/shared_ptr.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <memory>
|
#endif // MSGPACK_TYPE_CPP11_SHARED_PTR_HPP
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct as<std::shared_ptr<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::shared_ptr<T> operator()(msgpack::object const& o) const {
|
|
||||||
if(o.is_nil()) return nullptr;
|
|
||||||
return std::make_shared<T>(o.as<T>());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<std::shared_ptr<T>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::shared_ptr<T>& v) const {
|
|
||||||
if(o.is_nil()) v.reset();
|
|
||||||
else {
|
|
||||||
v = std::make_shared<T>();
|
|
||||||
msgpack::adaptor::convert<T>()(o, *v);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct pack<std::shared_ptr<T>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::shared_ptr<T>& v) const {
|
|
||||||
if (v) o.pack(*v);
|
|
||||||
else o.pack_nil();
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object<std::shared_ptr<T> > {
|
|
||||||
void operator()(msgpack::object& o, const std::shared_ptr<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::shared_ptr<T>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::shared_ptr<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 // MSGPACK_CPP11_SHARED_PTR_HPP
|
|
||||||
|
@@ -1,176 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP11_TUPLE_HPP
|
|
||||||
#define MSGPACK_CPP11_TUPLE_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#ifndef MSGPACK_TYPE_CPP11_TUPLE_HPP
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#define MSGPACK_TYPE_CPP11_TUPLE_HPP
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
#include "msgpack/meta.hpp"
|
|
||||||
|
|
||||||
#include <tuple>
|
#include "msgpack/v1/adaptor/cpp11/tuple.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
#endif // MSGPACK_TYPE_CPP11_TUPLE_HPP
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
// --- Pack from tuple to packer stream ---
|
|
||||||
template <typename Stream, typename Tuple, std::size_t N>
|
|
||||||
struct StdTuplePacker {
|
|
||||||
static void pack(
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const Tuple& v) {
|
|
||||||
StdTuplePacker<Stream, Tuple, N-1>::pack(o, v);
|
|
||||||
o.pack(std::get<N-1>(v));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Stream, typename Tuple>
|
|
||||||
struct StdTuplePacker<Stream, Tuple, 0> {
|
|
||||||
static void pack (
|
|
||||||
msgpack::packer<Stream>&,
|
|
||||||
const Tuple&) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
struct pack<std::tuple<Args...>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const std::tuple<Args...>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(sizeof...(Args));
|
|
||||||
o.pack_array(size);
|
|
||||||
StdTuplePacker<Stream, decltype(v), sizeof...(Args)>::pack(o, v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
// --- Convert from tuple to object ---
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
struct StdTupleAs;
|
|
||||||
|
|
||||||
template <typename T, typename... Args>
|
|
||||||
struct StdTupleAsImpl {
|
|
||||||
static std::tuple<T, Args...> as(msgpack::object const& o) {
|
|
||||||
return std::tuple_cat(
|
|
||||||
std::make_tuple(o.via.array.ptr[o.via.array.size - sizeof...(Args) - 1].as<T>()),
|
|
||||||
StdTupleAs<Args...>::as(o));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
struct StdTupleAs {
|
|
||||||
static std::tuple<Args...> as(msgpack::object const& o) {
|
|
||||||
return StdTupleAsImpl<Args...>::as(o);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct StdTupleAs<> {
|
|
||||||
static std::tuple<> as (msgpack::object const&) {
|
|
||||||
return std::tuple<>();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Tuple, std::size_t N>
|
|
||||||
struct StdTupleConverter {
|
|
||||||
static void convert(
|
|
||||||
msgpack::object const& o,
|
|
||||||
Tuple& v) {
|
|
||||||
StdTupleConverter<Tuple, N-1>::convert(o, v);
|
|
||||||
o.via.array.ptr[N-1].convert<typename std::remove_reference<decltype(std::get<N-1>(v))>::type>(std::get<N-1>(v));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Tuple>
|
|
||||||
struct StdTupleConverter<Tuple, 0> {
|
|
||||||
static void convert (
|
|
||||||
msgpack::object const&,
|
|
||||||
Tuple&) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
struct as<std::tuple<Args...>, typename std::enable_if<msgpack::all_of<msgpack::has_as, Args...>::value>::type> {
|
|
||||||
std::tuple<Args...> operator()(
|
|
||||||
msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if (o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); }
|
|
||||||
return StdTupleAs<Args...>::as(o);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
struct convert<std::tuple<Args...>> {
|
|
||||||
msgpack::object const& operator()(
|
|
||||||
msgpack::object const& o,
|
|
||||||
std::tuple<Args...>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if(o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); }
|
|
||||||
StdTupleConverter<decltype(v), sizeof...(Args)>::convert(o, v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
// --- Convert from tuple to object with zone ---
|
|
||||||
template <typename Tuple, std::size_t N>
|
|
||||||
struct StdTupleToObjectWithZone {
|
|
||||||
static void convert(
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const Tuple& v) {
|
|
||||||
StdTupleToObjectWithZone<Tuple, N-1>::convert(o, v);
|
|
||||||
o.via.array.ptr[N-1] = msgpack::object(std::get<N-1>(v), o.zone);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Tuple>
|
|
||||||
struct StdTupleToObjectWithZone<Tuple, 0> {
|
|
||||||
static void convert (
|
|
||||||
msgpack::object::with_zone&,
|
|
||||||
const Tuple&) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
struct object_with_zone<std::tuple<Args...>> {
|
|
||||||
void operator()(
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
std::tuple<Args...> const& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(sizeof...(Args));
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
o.via.array.size = size;
|
|
||||||
StdTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_TUPLE_HPP
|
|
||||||
|
@@ -1,82 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef MSGPACK_CPP11_UNIQUE_PTR_HPP
|
#ifndef MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP
|
||||||
#define MSGPACK_CPP11_UNIQUE_PTR_HPP
|
#define MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/cpp11/unique_ptr.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <memory>
|
#endif // MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct as<std::unique_ptr<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::unique_ptr<T> operator()(msgpack::object const& o) const {
|
|
||||||
if(o.is_nil()) return nullptr;
|
|
||||||
return std::unique_ptr<T>(new T(o.as<T>()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert<std::unique_ptr<T>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::unique_ptr<T>& v) const {
|
|
||||||
if(o.is_nil()) v.reset();
|
|
||||||
else {
|
|
||||||
v.reset(new T);
|
|
||||||
msgpack::adaptor::convert<T>()(o, *v);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct pack<std::unique_ptr<T>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unique_ptr<T>& v) const {
|
|
||||||
if (v) o.pack(*v);
|
|
||||||
else o.pack_nil();
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct object<std::unique_ptr<T> > {
|
|
||||||
void operator()(msgpack::object& o, const std::unique_ptr<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::unique_ptr<T>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::unique_ptr<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 // MSGPACK_CPP11_UNIQUE_PTR_HPP
|
|
||||||
|
@@ -1,182 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_TYPE_UNORDERED_MAP_HPP
|
|
||||||
#define MSGPACK_TYPE_UNORDERED_MAP_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#ifndef MSGPACK_TYPE_CPP11_UNORDERED_MAP_HPP
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#define MSGPACK_TYPE_CPP11_UNORDERED_MAP_HPP
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <unordered_map>
|
#include "msgpack/v1/adaptor/cpp11/unordered_map.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
#endif // MSGPACK_TYPE_CPP11_UNORDERED_MAP_HPP
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct as<
|
|
||||||
std::unordered_map<K, V, Hash, Compare, Alloc>,
|
|
||||||
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
|
||||||
std::unordered_map<K, V, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::unordered_map<K, V, Hash, Compare, Alloc> v;
|
|
||||||
for (; p != pend; ++p) {
|
|
||||||
v.emplace(p->key.as<K>(), p->val.as<V>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::unordered_map<K, V, Hash, Compare, Alloc>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::unordered_map<K, V, Hash, Compare, Alloc>& v) const {
|
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::unordered_map<K, V, Hash, Compare, Alloc> tmp;
|
|
||||||
for(; p != pend; ++p) {
|
|
||||||
K key;
|
|
||||||
p->key.convert(key);
|
|
||||||
p->val.convert(tmp[std::move(key)]);
|
|
||||||
}
|
|
||||||
v = std::move(tmp);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::unordered_map<K, V, Hash, Compare, Alloc>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_map<K, V, Hash, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_map(size);
|
|
||||||
for(typename std::unordered_map<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(it->first);
|
|
||||||
o.pack(it->second);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::unordered_map<K, V, Hash, Compare, Alloc>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::unordered_map<K, V, Hash, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::MAP;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.map.ptr = nullptr;
|
|
||||||
o.via.map.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
|
||||||
msgpack::object_kv* const pend = p + size;
|
|
||||||
o.via.map.ptr = p;
|
|
||||||
o.via.map.size = size;
|
|
||||||
typename std::unordered_map<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct as<
|
|
||||||
std::unordered_multimap<K, V, Hash, Compare, Alloc>,
|
|
||||||
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
|
||||||
std::unordered_multimap<K, V, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::unordered_multimap<K, V, Hash, Compare, Alloc> v;
|
|
||||||
for (; p != pend; ++p) {
|
|
||||||
v.emplace(p->key.as<K>(), p->val.as<V>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::unordered_multimap<K, V, Hash, Compare, Alloc>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::unordered_multimap<K, V, Hash, Compare, Alloc>& v) const {
|
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::unordered_multimap<K, V, Hash, Compare, Alloc> tmp;
|
|
||||||
for(; p != pend; ++p) {
|
|
||||||
std::pair<K, V> value;
|
|
||||||
p->key.convert(value.first);
|
|
||||||
p->val.convert(value.second);
|
|
||||||
tmp.insert(std::move(value));
|
|
||||||
}
|
|
||||||
v = std::move(tmp);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::unordered_multimap<K, V, Hash, Compare, Alloc>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_multimap<K, V, Hash, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_map(size);
|
|
||||||
for(typename std::unordered_multimap<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(it->first);
|
|
||||||
o.pack(it->second);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::unordered_multimap<K, V, Hash, Compare, Alloc>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::unordered_multimap<K, V, Hash, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::MAP;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.map.ptr = nullptr;
|
|
||||||
o.via.map.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
|
||||||
msgpack::object_kv* const pend = p + size;
|
|
||||||
o.via.map.ptr = p;
|
|
||||||
o.via.map.size = size;
|
|
||||||
typename std::unordered_multimap<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_UNORDERED_MAP_HPP
|
|
||||||
|
@@ -1,172 +1,16 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2014-2015 KONDO Takatoshi
|
// Copyright (C) 2016 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
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_TYPE_UNORDERED_SET_HPP
|
|
||||||
#define MSGPACK_TYPE_UNORDERED_SET_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#ifndef MSGPACK_TYPE_CPP11_UNORDERED_SET_HPP
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
#define MSGPACK_TYPE_CPP11_UNORDERED_SET_HPP
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <unordered_set>
|
#include "msgpack/v1/adaptor/cpp11/unordered_set.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
#endif // MSGPACK_TYPE_CPP11_UNORDERED_SET_HPP
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct as<std::unordered_set<Key, Hash, Compare, Alloc>, typename std::enable_if<msgpack::has_as<Key>::value>::type> {
|
|
||||||
std::unordered_set<Key, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::unordered_set<Key, Hash, Compare, Alloc> v;
|
|
||||||
while (p > pbegin) {
|
|
||||||
--p;
|
|
||||||
v.insert(p->as<Key>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::unordered_set<Key, Hash, Compare, Alloc>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::unordered_set<Key, Hash, Compare, Alloc>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::unordered_set<Key, Hash, Compare, Alloc> tmp;
|
|
||||||
while(p > pbegin) {
|
|
||||||
--p;
|
|
||||||
tmp.insert(p->as<Key>());
|
|
||||||
}
|
|
||||||
v = std::move(tmp);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::unordered_set<Key, Hash, Compare, Alloc>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_set<Key, Hash, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for(typename std::unordered_set<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::unordered_set<Key, Hash, Compare, Alloc>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::unordered_set<Key, Hash, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::unordered_set<Key, Hash, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct as<std::unordered_multiset<Key, Hash, Compare, Alloc>, typename std::enable_if<msgpack::has_as<Key>::value>::type> {
|
|
||||||
std::unordered_multiset<Key, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::unordered_multiset<Key, Hash, Compare, Alloc> v;
|
|
||||||
while (p > pbegin) {
|
|
||||||
--p;
|
|
||||||
v.insert(p->as<Key>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::unordered_multiset<Key, Hash, Compare, Alloc>> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::unordered_multiset<Key, Hash, Compare, Alloc>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::unordered_multiset<Key, Hash, Compare, Alloc> tmp;
|
|
||||||
while(p > pbegin) {
|
|
||||||
--p;
|
|
||||||
tmp.insert(p->as<Key>());
|
|
||||||
}
|
|
||||||
v = std::move(tmp);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::unordered_multiset<Key, Hash, Compare, Alloc>> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_multiset<Key, Hash, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for(typename std::unordered_multiset<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::unordered_multiset<Key, Hash, Compare, Alloc>> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::unordered_multiset<Key, Hash, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::unordered_multiset<Key, Hash, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_UNORDERED_SET_HPP
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
// Copyright (C) 2008-2016 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
|
||||||
@@ -10,22 +10,8 @@
|
|||||||
#ifndef MSGPACK_DEFINE_HPP
|
#ifndef MSGPACK_DEFINE_HPP
|
||||||
#define MSGPACK_DEFINE_HPP
|
#define MSGPACK_DEFINE_HPP
|
||||||
|
|
||||||
#include "msgpack/cpp_config.hpp"
|
#include "msgpack/adaptor/define_decl.hpp"
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_CPP03)
|
#include "msgpack/v1/adaptor/define.hpp"
|
||||||
#include "detail/cpp03_define_array.hpp"
|
|
||||||
#include "detail/cpp03_define_map.hpp"
|
|
||||||
#else // MSGPACK_USE_CPP03
|
|
||||||
#include "detail/cpp11_define_array.hpp"
|
|
||||||
#include "detail/cpp11_define_map.hpp"
|
|
||||||
#endif // MSGPACK_USE_CPP03
|
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_DEFINE_MAP)
|
|
||||||
#define MSGPACK_DEFINE MSGPACK_DEFINE_MAP
|
|
||||||
#define MSGPACK_BASE MSGPACK_BASE_MAP
|
|
||||||
#else // defined(MSGPACK_USE_DEFINE_MAP)
|
|
||||||
#define MSGPACK_DEFINE MSGPACK_DEFINE_ARRAY
|
|
||||||
#define MSGPACK_BASE MSGPACK_BASE_ARRAY
|
|
||||||
#endif // defined(MSGPACK_USE_DEFINE_MAP)
|
|
||||||
|
|
||||||
#endif // MSGPACK_DEFINE_HPP
|
#endif // MSGPACK_DEFINE_HPP
|
||||||
|
143
include/msgpack/adaptor/define_decl.hpp
Normal file
143
include/msgpack/adaptor/define_decl.hpp
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_DEFINE_DECL_HPP
|
||||||
|
#define MSGPACK_DEFINE_DECL_HPP
|
||||||
|
|
||||||
|
// BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp
|
||||||
|
// http://www.boost.org/libs/preprocessor/doc/ref/variadics.html
|
||||||
|
// However, supporting compiler detection is not complete. msgpack-c requires
|
||||||
|
// variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly.
|
||||||
|
#if !defined(MSGPACK_PP_VARIADICS)
|
||||||
|
#define MSGPACK_PP_VARIADICS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <msgpack/preprocessor.hpp>
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
|
||||||
|
// for MSGPACK_ADD_ENUM
|
||||||
|
#include "msgpack/adaptor/int.hpp"
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_ARRAY(...) \
|
||||||
|
template <typename Packer> \
|
||||||
|
void msgpack_pack(Packer& pk) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
|
||||||
|
} \
|
||||||
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
|
||||||
|
}\
|
||||||
|
template <typename MSGPACK_OBJECT> \
|
||||||
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this)))
|
||||||
|
#define MSGPACK_NVP(name, value) (name) (value)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \
|
||||||
|
MSGPACK_PP_IF( \
|
||||||
|
MSGPACK_PP_IS_BEGIN_PARENS(elem), \
|
||||||
|
elem, \
|
||||||
|
(MSGPACK_PP_STRINGIZE(elem))(elem) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP_IMPL(...) \
|
||||||
|
MSGPACK_PP_SEQ_TO_TUPLE( \
|
||||||
|
MSGPACK_PP_SEQ_FOR_EACH( \
|
||||||
|
MSGPACK_DEFINE_MAP_EACH_PROC, \
|
||||||
|
0, \
|
||||||
|
MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP(...) \
|
||||||
|
template <typename Packer> \
|
||||||
|
void msgpack_pack(Packer& pk) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_pack(pk); \
|
||||||
|
} \
|
||||||
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_unpack(o); \
|
||||||
|
}\
|
||||||
|
template <typename MSGPACK_OBJECT> \
|
||||||
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_object(o, z); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MSGPACK_BASE_MAP(base) \
|
||||||
|
(MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this)))
|
||||||
|
|
||||||
|
// MSGPACK_ADD_ENUM must be used in the global namespace.
|
||||||
|
#define MSGPACK_ADD_ENUM(enum_name) \
|
||||||
|
namespace msgpack { \
|
||||||
|
/** @cond */ \
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { \
|
||||||
|
/** @endcond */ \
|
||||||
|
namespace adaptor { \
|
||||||
|
template<> \
|
||||||
|
struct convert<enum_name> { \
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const { \
|
||||||
|
msgpack::underlying_type<enum_name>::type tmp; \
|
||||||
|
msgpack::operator>>(o, tmp); \
|
||||||
|
v = static_cast<enum_name>(tmp); \
|
||||||
|
return o; \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
template<> \
|
||||||
|
struct object<enum_name> { \
|
||||||
|
void operator()(msgpack::object& o, const enum_name& v) const { \
|
||||||
|
msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(v); \
|
||||||
|
msgpack::operator<<(o, tmp); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
template<> \
|
||||||
|
struct object_with_zone<enum_name> { \
|
||||||
|
void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \
|
||||||
|
msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(v); \
|
||||||
|
msgpack::operator<<(o, tmp); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
template <> \
|
||||||
|
struct pack<enum_name> { \
|
||||||
|
template <typename Stream> \
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \
|
||||||
|
return msgpack::operator<<(o, static_cast<msgpack::underlying_type<enum_name>::type>(v)); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
} \
|
||||||
|
/** @cond */ \
|
||||||
|
} \
|
||||||
|
/** @endcond */ \
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(MSGPACK_USE_DEFINE_MAP)
|
||||||
|
#define MSGPACK_DEFINE MSGPACK_DEFINE_MAP
|
||||||
|
#define MSGPACK_BASE MSGPACK_BASE_MAP
|
||||||
|
#else // defined(MSGPACK_USE_DEFINE_MAP)
|
||||||
|
#define MSGPACK_DEFINE MSGPACK_DEFINE_ARRAY
|
||||||
|
#define MSGPACK_BASE MSGPACK_BASE_ARRAY
|
||||||
|
#endif // defined(MSGPACK_USE_DEFINE_MAP)
|
||||||
|
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/define_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/define_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_DEFINE_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2015 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,99 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_DEQUE_HPP
|
#ifndef MSGPACK_TYPE_DEQUE_HPP
|
||||||
#define MSGPACK_TYPE_DEQUE_HPP
|
#define MSGPACK_TYPE_DEQUE_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/deque.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <deque>
|
#endif // MSGPACK_TYPE_DEQUE_HPP
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct as<std::deque<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::deque<T, Alloc> operator()(const msgpack::object& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
std::deque<T, Alloc> v;
|
|
||||||
if (o.via.array.size > 0) {
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
do {
|
|
||||||
v.push_back(p->as<T>());
|
|
||||||
++p;
|
|
||||||
} while (p < pend);
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct convert<std::deque<T, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::deque<T, Alloc>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
v.resize(o.via.array.size);
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
typename std::deque<T, Alloc>::iterator it = v.begin();
|
|
||||||
for(; p < pend; ++p, ++it) {
|
|
||||||
p->convert(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct pack<std::deque<T, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::deque<T, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for(typename std::deque<T, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct object_with_zone<std::deque<T, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::deque<T, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::deque<T, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif /* msgpack/type/deque.hpp */
|
|
||||||
|
@@ -10,228 +10,8 @@
|
|||||||
#ifndef MSGPACK_TYPE_EXT_HPP
|
#ifndef MSGPACK_TYPE_EXT_HPP
|
||||||
#define MSGPACK_TYPE_EXT_HPP
|
#define MSGPACK_TYPE_EXT_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/ext_decl.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include <cstring>
|
|
||||||
#include <string>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/ext.hpp"
|
||||||
|
|
||||||
/// @cond
|
#endif // MSGPACK_TYPE_EXT_HPP
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
class ext_ref;
|
|
||||||
|
|
||||||
class ext {
|
|
||||||
public:
|
|
||||||
ext() : m_data(1, 0) {}
|
|
||||||
ext(int8_t t, const char* p, uint32_t s) {
|
|
||||||
detail::check_container_size_for_ext<sizeof(std::size_t)>(s);
|
|
||||||
m_data.reserve(static_cast<std::size_t>(s) + 1);
|
|
||||||
m_data.push_back(static_cast<char>(t));
|
|
||||||
m_data.insert(m_data.end(), p, p + s);
|
|
||||||
}
|
|
||||||
ext(int8_t t, uint32_t s) {
|
|
||||||
detail::check_container_size_for_ext<sizeof(std::size_t)>(s);
|
|
||||||
m_data.resize(static_cast<std::size_t>(s) + 1);
|
|
||||||
m_data[0] = static_cast<char>(t);
|
|
||||||
}
|
|
||||||
ext(ext_ref const&);
|
|
||||||
int8_t type() const {
|
|
||||||
return static_cast<int8_t>(m_data[0]);
|
|
||||||
}
|
|
||||||
const char* data() const {
|
|
||||||
return &m_data[1];
|
|
||||||
}
|
|
||||||
char* data() {
|
|
||||||
return &m_data[1];
|
|
||||||
}
|
|
||||||
uint32_t size() const {
|
|
||||||
return static_cast<uint32_t>(m_data.size()) - 1;
|
|
||||||
}
|
|
||||||
bool operator== (const ext& x) const {
|
|
||||||
return m_data == x.m_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!= (const ext& x) const {
|
|
||||||
return !(*this == x);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator< (const ext& x) const {
|
|
||||||
return m_data < x.m_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator> (const ext& x) const {
|
|
||||||
return m_data > x.m_data;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
std::vector<char> m_data;
|
|
||||||
friend class ext_ref;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<msgpack::type::ext> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::ext& v) const {
|
|
||||||
if(o.type != msgpack::type::EXT) {
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
v = msgpack::type::ext(o.via.ext.type(), o.via.ext.data(), o.via.ext.size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<msgpack::type::ext> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::ext& v) const {
|
|
||||||
// size limit has already been checked at ext's constructor
|
|
||||||
uint32_t size = v.size();
|
|
||||||
o.pack_ext(size, v.type());
|
|
||||||
o.pack_ext_body(v.data(), size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<msgpack::type::ext> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const msgpack::type::ext& v) const {
|
|
||||||
// size limit has already been checked at ext's constructor
|
|
||||||
uint32_t size = v.size();
|
|
||||||
o.type = msgpack::type::EXT;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size + 1));
|
|
||||||
o.via.ext.ptr = ptr;
|
|
||||||
o.via.ext.size = size;
|
|
||||||
ptr[0] = static_cast<char>(v.type());
|
|
||||||
std::memcpy(ptr + 1, v.data(), size);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
class ext_ref {
|
|
||||||
public:
|
|
||||||
// ext_ref should be default constructible to support 'convert'.
|
|
||||||
// A default constructed ext_ref object::m_ptr doesn't have the buffer to point to.
|
|
||||||
// In order to avoid nullptr checking branches, m_ptr points to m_size.
|
|
||||||
// So type() returns unspecified but valid value. It might be a zero because m_size
|
|
||||||
// is initialized as zero, but shouldn't assume that.
|
|
||||||
ext_ref() : m_ptr(static_cast<char*>(static_cast<void*>(&m_size))), m_size(0) {}
|
|
||||||
ext_ref(const char* p, uint32_t s) :
|
|
||||||
m_ptr(s == 0 ? static_cast<char*>(static_cast<void*>(&m_size)) : p),
|
|
||||||
m_size(s == 0 ? 0 : s - 1) {
|
|
||||||
detail::check_container_size_for_ext<sizeof(std::size_t)>(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
// size limit has already been checked at ext's constructor
|
|
||||||
ext_ref(ext const& x) : m_ptr(&x.m_data[0]), m_size(x.size()) {}
|
|
||||||
|
|
||||||
const char* data() const {
|
|
||||||
return m_ptr + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t size() const {
|
|
||||||
return m_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
int8_t type() const {
|
|
||||||
return static_cast<int8_t>(m_ptr[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string str() const {
|
|
||||||
return std::string(m_ptr + 1, m_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator== (const ext_ref& x) const {
|
|
||||||
return m_size == x.m_size && std::memcmp(m_ptr, x.m_ptr, m_size) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!= (const ext_ref& x) const {
|
|
||||||
return !(*this == x);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator< (const ext_ref& x) const {
|
|
||||||
if (m_size < x.m_size) return true;
|
|
||||||
if (m_size > x.m_size) return false;
|
|
||||||
return std::memcmp(m_ptr, x.m_ptr, m_size) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator> (const ext_ref& x) const {
|
|
||||||
if (m_size > x.m_size) return true;
|
|
||||||
if (m_size < x.m_size) return false;
|
|
||||||
return std::memcmp(m_ptr, x.m_ptr, m_size) > 0;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
const char* m_ptr;
|
|
||||||
uint32_t m_size;
|
|
||||||
friend struct msgpack::adaptor::object<msgpack::type::ext_ref>;
|
|
||||||
};
|
|
||||||
|
|
||||||
inline ext::ext(ext_ref const& x) {
|
|
||||||
// size limit has already been checked at ext_ref's constructor
|
|
||||||
m_data.reserve(x.size() + 1);
|
|
||||||
|
|
||||||
m_data.push_back(x.type());
|
|
||||||
m_data.insert(m_data.end(), x.data(), x.data() + x.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<msgpack::type::ext_ref> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::ext_ref& v) const {
|
|
||||||
if(o.type != msgpack::type::EXT) { throw msgpack::type_error(); }
|
|
||||||
v = msgpack::type::ext_ref(o.via.ext.ptr, o.via.ext.size + 1);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<msgpack::type::ext_ref> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::ext_ref& v) const {
|
|
||||||
// size limit has already been checked at ext_ref's constructor
|
|
||||||
uint32_t size = v.size();
|
|
||||||
o.pack_ext(size, v.type());
|
|
||||||
o.pack_ext_body(v.data(), size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<msgpack::type::ext_ref> {
|
|
||||||
void operator()(msgpack::object& o, const msgpack::type::ext_ref& v) const {
|
|
||||||
// size limit has already been checked at ext_ref's constructor
|
|
||||||
uint32_t size = v.size();
|
|
||||||
o.type = msgpack::type::EXT;
|
|
||||||
o.via.ext.ptr = v.m_ptr;
|
|
||||||
o.via.ext.size = size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<msgpack::type::ext_ref> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const msgpack::type::ext_ref& v) const {
|
|
||||||
static_cast<msgpack::object&>(o) << v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_EXT_HPP
|
|
||||||
|
16
include/msgpack/adaptor/ext_decl.hpp
Normal file
16
include/msgpack/adaptor/ext_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_EXT_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_EXT_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/ext_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/ext_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_EXT_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2020 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,289 +10,8 @@
|
|||||||
#ifndef MSGPACK_TYPE_FIXINT_HPP
|
#ifndef MSGPACK_TYPE_FIXINT_HPP
|
||||||
#define MSGPACK_TYPE_FIXINT_HPP
|
#define MSGPACK_TYPE_FIXINT_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/fixint_decl.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/int.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/fixint.hpp"
|
||||||
|
|
||||||
/// @cond
|
#endif // MSGPACK_TYPE_FIXINT_HPP
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct fix_int {
|
|
||||||
fix_int() : value(0) { }
|
|
||||||
fix_int(T value) : value(value) { }
|
|
||||||
|
|
||||||
operator T() const { return value; }
|
|
||||||
|
|
||||||
T get() const { return value; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
T value;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
typedef fix_int<uint8_t> fix_uint8;
|
|
||||||
typedef fix_int<uint16_t> fix_uint16;
|
|
||||||
typedef fix_int<uint32_t> fix_uint32;
|
|
||||||
typedef fix_int<uint64_t> fix_uint64;
|
|
||||||
|
|
||||||
typedef fix_int<int8_t> fix_int8;
|
|
||||||
typedef fix_int<int16_t> fix_int16;
|
|
||||||
typedef fix_int<int32_t> fix_int32;
|
|
||||||
typedef fix_int<int64_t> fix_int64;
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_int8> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_int8& v) const
|
|
||||||
{ v = type::detail::convert_integer<int8_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_int16> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_int16& v) const
|
|
||||||
{ v = type::detail::convert_integer<int16_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_int32> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_int32& v) const
|
|
||||||
{ v = type::detail::convert_integer<int32_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_int64> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_int64& v) const
|
|
||||||
{ v = type::detail::convert_integer<int64_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_uint8> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint8& v) const
|
|
||||||
{ v = type::detail::convert_integer<uint8_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_uint16> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint16& v) const
|
|
||||||
{ v = type::detail::convert_integer<uint16_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_uint32> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint32& v) const
|
|
||||||
{ v = type::detail::convert_integer<uint32_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::fix_uint64> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint64& v) const
|
|
||||||
{ v = type::detail::convert_integer<uint64_t>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_int8> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int8& v) const
|
|
||||||
{ o.pack_fix_int8(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_int16> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int16& v) const
|
|
||||||
{ o.pack_fix_int16(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_int32> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int32& v) const
|
|
||||||
{ o.pack_fix_int32(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_int64> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int64& v) const
|
|
||||||
{ o.pack_fix_int64(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_uint8> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint8& v) const
|
|
||||||
{ o.pack_fix_uint8(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_uint16> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint16& v) const
|
|
||||||
{ o.pack_fix_uint16(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_uint32> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint32& v) const
|
|
||||||
{ o.pack_fix_uint32(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::fix_uint64> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint64& v) const
|
|
||||||
{ o.pack_fix_uint64(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_int8> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_int8 v) const {
|
|
||||||
if (v.get() < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v.get();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_int16> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_int16 v) const {
|
|
||||||
if(v.get() < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v.get();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_int32> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_int32 v) const {
|
|
||||||
if (v.get() < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v.get();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_int64> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_int64 v) const {
|
|
||||||
if (v.get() < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v.get();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_uint8> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_uint8 v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_uint16> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_uint16 v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_uint32> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_uint32 v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::fix_uint64> {
|
|
||||||
void operator()(msgpack::object& o, type::fix_uint64 v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_int8> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_int8 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_int16> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_int16 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_int32> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_int32 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_int64> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_int64 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_uint8> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_uint8 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_uint16> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_uint16 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_uint32> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_uint32 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::fix_uint64> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::fix_uint64 v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif /* msgpack/type/fixint.hpp */
|
|
||||||
|
16
include/msgpack/adaptor/fixint_decl.hpp
Normal file
16
include/msgpack/adaptor/fixint_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 FURUHASHI Sadayuki and 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_FIXINT_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_FIXINT_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/fixint_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/fixint_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_FIXINT_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,114 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_FLOAT_HPP
|
#ifndef MSGPACK_TYPE_FLOAT_HPP
|
||||||
#define MSGPACK_TYPE_FLOAT_HPP
|
#define MSGPACK_TYPE_FLOAT_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/float.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
// FIXME check overflow, underflow
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<float> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, float& v) const {
|
|
||||||
if(o.type == msgpack::type::FLOAT) {
|
|
||||||
v = static_cast<float>(o.via.f64);
|
|
||||||
}
|
|
||||||
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
|
|
||||||
v = static_cast<float>(o.via.u64);
|
|
||||||
}
|
|
||||||
else if (o.type == msgpack::type::NEGATIVE_INTEGER) {
|
|
||||||
v = static_cast<float>(o.via.i64);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<float> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const float& v) const {
|
|
||||||
o.pack_float(v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<double> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, double& v) const {
|
|
||||||
if(o.type == msgpack::type::FLOAT) {
|
|
||||||
v = o.via.f64;
|
|
||||||
}
|
|
||||||
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
|
|
||||||
v = static_cast<double>(o.via.u64);
|
|
||||||
}
|
|
||||||
else if (o.type == msgpack::type::NEGATIVE_INTEGER) {
|
|
||||||
v = static_cast<double>(o.via.i64);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<double> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const double& v) const {
|
|
||||||
o.pack_double(v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<float> {
|
|
||||||
void operator()(msgpack::object& o, float v) const {
|
|
||||||
o.type = msgpack::type::FLOAT;
|
|
||||||
o.via.f64 = static_cast<double>(v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<double> {
|
|
||||||
void operator()(msgpack::object& o, double v) const {
|
|
||||||
o.type = msgpack::type::FLOAT;
|
|
||||||
o.via.f64 = v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<float> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, float v) const {
|
|
||||||
static_cast<msgpack::object&>(o) << v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<double> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, double v) const {
|
|
||||||
static_cast<msgpack::object&>(o) << v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_FLOAT_HPP
|
#endif // MSGPACK_TYPE_FLOAT_HPP
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,421 +10,8 @@
|
|||||||
#ifndef MSGPACK_TYPE_INT_HPP
|
#ifndef MSGPACK_TYPE_INT_HPP
|
||||||
#define MSGPACK_TYPE_INT_HPP
|
#define MSGPACK_TYPE_INT_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/int_decl.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/int.hpp"
|
||||||
|
|
||||||
/// @cond
|
#endif // MSGPACK_TYPE_INT_HPP
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1){
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
namespace detail {
|
|
||||||
template <typename T, bool Signed>
|
|
||||||
struct convert_integer_sign;
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert_integer_sign<T, true> {
|
|
||||||
static T convert(msgpack::object const& o) {
|
|
||||||
if(o.type == msgpack::type::POSITIVE_INTEGER) {
|
|
||||||
if(o.via.u64 > static_cast<uint64_t>(std::numeric_limits<T>::max()))
|
|
||||||
{ throw msgpack::type_error(); }
|
|
||||||
return static_cast<T>(o.via.u64);
|
|
||||||
} else if(o.type == msgpack::type::NEGATIVE_INTEGER) {
|
|
||||||
if(o.via.i64 < static_cast<int64_t>(std::numeric_limits<T>::min()))
|
|
||||||
{ throw msgpack::type_error(); }
|
|
||||||
return static_cast<T>(o.via.i64);
|
|
||||||
}
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct convert_integer_sign<T, false> {
|
|
||||||
static T convert(msgpack::object const& o) {
|
|
||||||
if(o.type == msgpack::type::POSITIVE_INTEGER) {
|
|
||||||
if(o.via.u64 > static_cast<uint64_t>(std::numeric_limits<T>::max()))
|
|
||||||
{ throw msgpack::type_error(); }
|
|
||||||
return static_cast<T>(o.via.u64);
|
|
||||||
}
|
|
||||||
throw msgpack::type_error();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct is_signed {
|
|
||||||
static const bool value = std::numeric_limits<T>::is_signed;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
static inline T convert_integer(msgpack::object const& o)
|
|
||||||
{
|
|
||||||
return detail::convert_integer_sign<T, is_signed<T>::value>::convert(o);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <bool Signed>
|
|
||||||
struct object_char_sign;
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_char_sign<true> {
|
|
||||||
template <typename T>
|
|
||||||
static typename msgpack::enable_if<msgpack::is_same<T, char>::value>::type
|
|
||||||
make(msgpack::object& o, T v) {
|
|
||||||
if (v < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_char_sign<false> {
|
|
||||||
static void make(msgpack::object& o, char v) {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline void object_char(msgpack::object& o, char v) {
|
|
||||||
return object_char_sign<is_signed<char>::value>::make(o, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<char> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, char& v) const
|
|
||||||
{ v = type::detail::convert_integer<char>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<signed char> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, signed char& v) const
|
|
||||||
{ v = type::detail::convert_integer<signed char>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<signed short> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, signed short& v) const
|
|
||||||
{ v = type::detail::convert_integer<signed short>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<signed int> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, signed int& v) const
|
|
||||||
{ v = type::detail::convert_integer<signed int>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<signed long> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, signed long& v) const
|
|
||||||
{ v = type::detail::convert_integer<signed long>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<signed long long> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, signed long long& v) const
|
|
||||||
{ v = type::detail::convert_integer<signed long long>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<unsigned char> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, unsigned char& v) const
|
|
||||||
{ v = type::detail::convert_integer<unsigned char>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<unsigned short> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, unsigned short& v) const
|
|
||||||
{ v = type::detail::convert_integer<unsigned short>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<unsigned int> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, unsigned int& v) const
|
|
||||||
{ v = type::detail::convert_integer<unsigned int>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<unsigned long> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, unsigned long& v) const
|
|
||||||
{ v = type::detail::convert_integer<unsigned long>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<unsigned long long> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, unsigned long long& v) const
|
|
||||||
{ v = type::detail::convert_integer<unsigned long long>(o); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<char> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, char v) const
|
|
||||||
{ o.pack_char(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<signed char> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed char v) const
|
|
||||||
{ o.pack_signed_char(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<signed short> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed short v) const
|
|
||||||
{ o.pack_short(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<signed int> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed int v) const
|
|
||||||
{ o.pack_int(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<signed long> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed long v) const
|
|
||||||
{ o.pack_long(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<signed long long> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed long long v) const
|
|
||||||
{ o.pack_long_long(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<unsigned char> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned char v) const
|
|
||||||
{ o.pack_unsigned_char(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<unsigned short> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned short v) const
|
|
||||||
{ o.pack_unsigned_short(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<unsigned int> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned int v) const
|
|
||||||
{ o.pack_unsigned_int(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<unsigned long> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned long v) const
|
|
||||||
{ o.pack_unsigned_long(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<unsigned long long> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned long long v) const
|
|
||||||
{ o.pack_unsigned_long_long(v); return o; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<char> {
|
|
||||||
void operator()(msgpack::object& o, char v) const
|
|
||||||
{ type::detail::object_char(o, v); }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<signed char> {
|
|
||||||
void operator()(msgpack::object& o, signed char v) const {
|
|
||||||
if (v < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<signed short> {
|
|
||||||
void operator()(msgpack::object& o, signed short v) const {
|
|
||||||
if (v < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<signed int> {
|
|
||||||
void operator()(msgpack::object& o, signed int v) const {
|
|
||||||
if (v < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<signed long> {
|
|
||||||
void operator()(msgpack::object& o, signed long v) const {
|
|
||||||
if (v < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<signed long long> {
|
|
||||||
void operator()(msgpack::object& o, signed long long v) const {
|
|
||||||
if (v < 0) {
|
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<unsigned char> {
|
|
||||||
void operator()(msgpack::object& o, unsigned char v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<unsigned short> {
|
|
||||||
void operator()(msgpack::object& o, unsigned short v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<unsigned int> {
|
|
||||||
void operator()(msgpack::object& o, unsigned int v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<unsigned long> {
|
|
||||||
void operator()(msgpack::object& o, unsigned long v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<unsigned long long> {
|
|
||||||
void operator()(msgpack::object& o, unsigned long long v) const
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<char> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, char v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<signed char> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, signed char v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<signed short> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, signed short v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<signed int> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, signed int v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<signed long> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, signed long v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<signed long long> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const signed long long& v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<unsigned char> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, unsigned char v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<unsigned short> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, unsigned short v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<unsigned int> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, unsigned int v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<unsigned long> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, unsigned long v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<unsigned long long> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const unsigned long long& v) const
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif /* msgpack/type/int.hpp */
|
|
||||||
|
16
include/msgpack/adaptor/int_decl.hpp
Normal file
16
include/msgpack/adaptor/int_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_INT_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_INT_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/int_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/int_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_INT_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2015 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,97 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_LIST_HPP
|
#ifndef MSGPACK_TYPE_LIST_HPP
|
||||||
#define MSGPACK_TYPE_LIST_HPP
|
#define MSGPACK_TYPE_LIST_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/list.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct as<std::list<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::list<T, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
std::list<T, Alloc> v;
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
for (; p < pend; ++p) {
|
|
||||||
v.push_back(p->as<T>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct convert<std::list<T, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::list<T, Alloc>& v) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
v.resize(o.via.array.size);
|
|
||||||
msgpack::object* p = o.via.array.ptr;
|
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
|
||||||
typename std::list<T, Alloc>::iterator it = v.begin();
|
|
||||||
for (; p < pend; ++p, ++it) {
|
|
||||||
p->convert(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct pack<std::list<T, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::list<T, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for (typename std::list<T, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Alloc>
|
|
||||||
struct object_with_zone<std::list<T, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::list<T, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if (v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::list<T, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_LIST_HPP
|
#endif // MSGPACK_TYPE_LIST_HPP
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2015 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
@@ -10,297 +10,9 @@
|
|||||||
#ifndef MSGPACK_TYPE_MAP_HPP
|
#ifndef MSGPACK_TYPE_MAP_HPP
|
||||||
#define MSGPACK_TYPE_MAP_HPP
|
#define MSGPACK_TYPE_MAP_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/map_decl.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <map>
|
#include "msgpack/v1/adaptor/map.hpp"
|
||||||
#include <vector>
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare = std::less<K>, typename Alloc = std::allocator<std::pair<K, V> > >
|
|
||||||
class assoc_vector : public std::vector< std::pair<K, V>, Alloc > {
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
using std::vector<std::pair<K, V>, Alloc>::vector;
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct pair_first_less {
|
|
||||||
bool operator() (const std::pair<K, V>& x, const std::pair<K, V>& y) const
|
|
||||||
{ return Compare()(x.first, y.first); }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
} //namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct as<
|
|
||||||
type::assoc_vector<K, V, Compare, Alloc>,
|
|
||||||
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
|
||||||
type::assoc_vector<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
type::assoc_vector<K, V, Compare, Alloc> v;
|
|
||||||
v.reserve(o.via.map.size);
|
|
||||||
msgpack::object_kv* p = o.via.map.ptr;
|
|
||||||
msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size;
|
|
||||||
for (; p < pend; ++p) {
|
|
||||||
v.emplace_back(p->key.as<K>(), p->val.as<V>());
|
|
||||||
}
|
|
||||||
std::sort(v.begin(), v.end(), type::detail::pair_first_less<K, V, Compare, Alloc>());
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct convert<type::assoc_vector<K, V, Compare, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::assoc_vector<K, V, Compare, Alloc>& v) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
v.resize(o.via.map.size);
|
|
||||||
msgpack::object_kv* p = o.via.map.ptr;
|
|
||||||
msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size;
|
|
||||||
std::pair<K, V>* it(&v.front());
|
|
||||||
for (; p < pend; ++p, ++it) {
|
|
||||||
p->key.convert(it->first);
|
|
||||||
p->val.convert(it->second);
|
|
||||||
}
|
|
||||||
std::sort(v.begin(), v.end(), type::detail::pair_first_less<K, V, Compare, Alloc>());
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct pack<type::assoc_vector<K, V, Compare, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::assoc_vector<K, V, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_map(size);
|
|
||||||
for (typename type::assoc_vector<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(it->first);
|
|
||||||
o.pack(it->second);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<type::assoc_vector<K, V, Compare, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const type::assoc_vector<K, V, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::MAP;
|
|
||||||
if (v.empty()) {
|
|
||||||
o.via.map.ptr = nullptr;
|
|
||||||
o.via.map.size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
|
||||||
msgpack::object_kv* const pend = p + size;
|
|
||||||
o.via.map.ptr = p;
|
|
||||||
o.via.map.size = size;
|
|
||||||
typename type::assoc_vector<K, V, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct as<
|
|
||||||
std::map<K, V, Compare, Alloc>,
|
|
||||||
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
|
||||||
std::map<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::map<K, V, Compare, Alloc> v;
|
|
||||||
for (; p != pend; ++p) {
|
|
||||||
v.emplace(p->key.as<K>(), p->val.as<V>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::map<K, V, Compare, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::map<K, V, Compare, Alloc>& v) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::map<K, V, Compare, Alloc> tmp;
|
|
||||||
for (; p != pend; ++p) {
|
|
||||||
K key;
|
|
||||||
p->key.convert(key);
|
|
||||||
#if __cplusplus >= 201103L
|
|
||||||
p->val.convert(tmp[std::move(key)]);
|
|
||||||
#else
|
|
||||||
p->val.convert(tmp[key]);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#if __cplusplus >= 201103L
|
|
||||||
v = std::move(tmp);
|
|
||||||
#else
|
|
||||||
tmp.swap(v);
|
|
||||||
#endif
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::map<K, V, Compare, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::map<K, V, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_map(size);
|
|
||||||
for (typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(it->first);
|
|
||||||
o.pack(it->second);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::map<K, V, Compare, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::map<K, V, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::MAP;
|
|
||||||
if (v.empty()) {
|
|
||||||
o.via.map.ptr = nullptr;
|
|
||||||
o.via.map.size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
|
||||||
msgpack::object_kv* const pend = p + size;
|
|
||||||
o.via.map.ptr = p;
|
|
||||||
o.via.map.size = size;
|
|
||||||
typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct as<
|
|
||||||
std::multimap<K, V, Compare, Alloc>,
|
|
||||||
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
|
||||||
std::multimap<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::multimap<K, V, Compare, Alloc> v;
|
|
||||||
for (; p != pend; ++p) {
|
|
||||||
v.emplace(p->key.as<K>(), p->val.as<V>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::multimap<K, V, Compare, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::multimap<K, V, Compare, Alloc>& v) const {
|
|
||||||
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::multimap<K, V, Compare, Alloc> tmp;
|
|
||||||
for (; p != pend; ++p) {
|
|
||||||
std::pair<K, V> value;
|
|
||||||
p->key.convert(value.first);
|
|
||||||
p->val.convert(value.second);
|
|
||||||
#if __cplusplus >= 201103L
|
|
||||||
tmp.insert(std::move(value));
|
|
||||||
#else
|
|
||||||
tmp.insert(value);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#if __cplusplus >= 201103L
|
|
||||||
v = std::move(tmp);
|
|
||||||
#else
|
|
||||||
tmp.swap(v);
|
|
||||||
#endif
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::multimap<K, V, Compare, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::multimap<K, V, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_map(size);
|
|
||||||
for (typename std::multimap<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(it->first);
|
|
||||||
o.pack(it->second);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename K, typename V, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::multimap<K, V, Compare, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::multimap<K, V, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::MAP;
|
|
||||||
if (v.empty()) {
|
|
||||||
o.via.map.ptr = nullptr;
|
|
||||||
o.via.map.size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
|
||||||
msgpack::object_kv* const pend = p + size;
|
|
||||||
o.via.map.ptr = p;
|
|
||||||
o.via.map.size = size;
|
|
||||||
typename std::multimap<K, V, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_MAP_HPP
|
#endif // MSGPACK_TYPE_MAP_HPP
|
||||||
|
16
include/msgpack/adaptor/map_decl.hpp
Normal file
16
include/msgpack/adaptor/map_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2008-2016 FURUHASHI Sadayuki and 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_MAP_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_MAP_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/map_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/map_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_MAP_DECL_HPP
|
@@ -10,12 +10,8 @@
|
|||||||
#ifndef MSGPACK_MSGPACK_TUPLE_HPP
|
#ifndef MSGPACK_MSGPACK_TUPLE_HPP
|
||||||
#define MSGPACK_MSGPACK_TUPLE_HPP
|
#define MSGPACK_MSGPACK_TUPLE_HPP
|
||||||
|
|
||||||
#include "msgpack/cpp_config.hpp"
|
#include "msgpack/adaptor/msgpack_tuple_decl.hpp"
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_CPP03)
|
#include "msgpack/v1/adaptor/msgpack_tuple.hpp"
|
||||||
#include "detail/cpp03_msgpack_tuple.hpp"
|
|
||||||
#else // MSGPACK_USE_CPP03
|
|
||||||
#include "detail/cpp11_msgpack_tuple.hpp"
|
|
||||||
#endif // MSGPACK_USE_CPP03
|
|
||||||
|
|
||||||
#endif // MSGPACK_MSGPACK_TUPLE_HPP
|
#endif // MSGPACK_MSGPACK_TUPLE_HPP
|
||||||
|
16
include/msgpack/adaptor/msgpack_tuple_decl.hpp
Normal file
16
include/msgpack/adaptor/msgpack_tuple_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_MSGPACK_TUPLE_DECL_HPP
|
||||||
|
#define MSGPACK_MSGPACK_TUPLE_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/msgpack_tuple_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_MSGPACK_TUPLE_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
@@ -10,81 +10,8 @@
|
|||||||
#ifndef MSGPACK_TYPE_NIL_HPP
|
#ifndef MSGPACK_TYPE_NIL_HPP
|
||||||
#define MSGPACK_TYPE_NIL_HPP
|
#define MSGPACK_TYPE_NIL_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/nil_decl.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/nil.hpp"
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
struct nil_t { };
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_DISABLE_LEGACY_NIL)
|
|
||||||
|
|
||||||
typedef nil_t nil;
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_DISABLE_LEGACY_NIL)
|
|
||||||
|
|
||||||
inline bool operator<(nil_t const& lhs, nil_t const& rhs) {
|
|
||||||
return &lhs < &rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator==(nil_t const& lhs, nil_t const& rhs) {
|
|
||||||
return &lhs == &rhs;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::nil_t> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, type::nil_t&) const {
|
|
||||||
if(o.type != msgpack::type::NIL) { throw msgpack::type_error(); }
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::nil_t> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::nil_t&) const {
|
|
||||||
o.pack_nil();
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<type::nil_t> {
|
|
||||||
void operator()(msgpack::object& o, type::nil_t) const {
|
|
||||||
o.type = msgpack::type::NIL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::nil_t> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, type::nil_t v) const {
|
|
||||||
static_cast<msgpack::object&>(o) << v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
template <>
|
|
||||||
inline void msgpack::object::as<void>() const
|
|
||||||
{
|
|
||||||
msgpack::type::nil_t v;
|
|
||||||
convert(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_NIL_HPP
|
#endif // MSGPACK_TYPE_NIL_HPP
|
||||||
|
16
include/msgpack/adaptor/nil_decl.hpp
Normal file
16
include/msgpack/adaptor/nil_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_NIL_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_NIL_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/nil_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/nil_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_NIL_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,74 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_PAIR_HPP
|
#ifndef MSGPACK_TYPE_PAIR_HPP
|
||||||
#define MSGPACK_TYPE_PAIR_HPP
|
#define MSGPACK_TYPE_PAIR_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/pair.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/meta.hpp"
|
|
||||||
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
struct as<std::pair<T1, T2>,
|
|
||||||
typename std::enable_if<msgpack::all_of<msgpack::has_as, T1, T2>::value>::type> {
|
|
||||||
std::pair<T1, T2> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if (o.via.array.size != 2) { throw msgpack::type_error(); }
|
|
||||||
return std::make_pair(o.via.array.ptr[0].as<T1>(), o.via.array.ptr[1].as<T2>());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
struct convert<std::pair<T1, T2> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::pair<T1, T2>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
if(o.via.array.size != 2) { throw msgpack::type_error(); }
|
|
||||||
o.via.array.ptr[0].convert(v.first);
|
|
||||||
o.via.array.ptr[1].convert(v.second);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
struct pack<std::pair<T1, T2> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::pair<T1, T2>& v) const {
|
|
||||||
o.pack_array(2);
|
|
||||||
o.pack(v.first);
|
|
||||||
o.pack(v.second);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
struct object_with_zone<std::pair<T1, T2> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::pair<T1, T2>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2));
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = 2;
|
|
||||||
p[0] = msgpack::object(v.first, o.zone);
|
|
||||||
p[1] = msgpack::object(v.second, o.zone);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_PAIR_HPP
|
#endif // MSGPACK_TYPE_PAIR_HPP
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
// Copyright (C) 2008-2016 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
|
||||||
@@ -10,97 +10,8 @@
|
|||||||
#ifndef MSGPACK_TYPE_RAW_HPP
|
#ifndef MSGPACK_TYPE_RAW_HPP
|
||||||
#define MSGPACK_TYPE_RAW_HPP
|
#define MSGPACK_TYPE_RAW_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/adaptor/raw_decl.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include <cstring>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace msgpack {
|
#include "msgpack/v1/adaptor/raw.hpp"
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
struct raw_ref {
|
|
||||||
raw_ref() : size(0), ptr(nullptr) {}
|
|
||||||
raw_ref(const char* p, uint32_t s) : size(s), ptr(p) {}
|
|
||||||
|
|
||||||
uint32_t size;
|
|
||||||
const char* ptr;
|
|
||||||
|
|
||||||
std::string str() const { return std::string(ptr, size); }
|
|
||||||
|
|
||||||
bool operator== (const raw_ref& x) const
|
|
||||||
{
|
|
||||||
return size == x.size && std::memcmp(ptr, x.ptr, size) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!= (const raw_ref& x) const
|
|
||||||
{
|
|
||||||
return !(*this == x);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator< (const raw_ref& x) const
|
|
||||||
{
|
|
||||||
if(size == x.size) { return std::memcmp(ptr, x.ptr, size) < 0; }
|
|
||||||
else { return size < x.size; }
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator> (const raw_ref& x) const
|
|
||||||
{
|
|
||||||
if(size == x.size) { return std::memcmp(ptr, x.ptr, size) > 0; }
|
|
||||||
else { return size > x.size; }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<msgpack::type::raw_ref> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::raw_ref& v) const {
|
|
||||||
if(o.type != msgpack::type::BIN) { throw msgpack::type_error(); }
|
|
||||||
v.ptr = o.via.bin.ptr;
|
|
||||||
v.size = o.via.bin.size;
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<msgpack::type::raw_ref> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::raw_ref& v) const {
|
|
||||||
o.pack_bin(v.size);
|
|
||||||
o.pack_bin_body(v.ptr, v.size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object<msgpack::type::raw_ref> {
|
|
||||||
void operator()(msgpack::object& o, const msgpack::type::raw_ref& v) const {
|
|
||||||
o.type = msgpack::type::BIN;
|
|
||||||
o.via.bin.ptr = v.ptr;
|
|
||||||
o.via.bin.size = v.size;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<msgpack::type::raw_ref> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const msgpack::type::raw_ref& v) const {
|
|
||||||
static_cast<msgpack::object&>(o) << v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_RAW_HPP
|
#endif // MSGPACK_TYPE_RAW_HPP
|
||||||
|
16
include/msgpack/adaptor/raw_decl.hpp
Normal file
16
include/msgpack/adaptor/raw_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_RAW_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_RAW_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/raw_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/raw_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_RAW_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2015 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,179 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_SET_HPP
|
#ifndef MSGPACK_TYPE_SET_HPP
|
||||||
#define MSGPACK_TYPE_SET_HPP
|
#define MSGPACK_TYPE_SET_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/set.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct as<std::set<T, Compare, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::set<T, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::set<T, Compare, Alloc> v;
|
|
||||||
while (p > pbegin) {
|
|
||||||
--p;
|
|
||||||
v.insert(p->as<T>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::set<T, Compare, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::set<T, Compare, Alloc>& v) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::set<T, Compare, Alloc> tmp;
|
|
||||||
while (p > pbegin) {
|
|
||||||
--p;
|
|
||||||
tmp.insert(p->as<T>());
|
|
||||||
}
|
|
||||||
#if __cplusplus >= 201103L
|
|
||||||
v = std::move(tmp);
|
|
||||||
#else
|
|
||||||
tmp.swap(v);
|
|
||||||
#endif
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::set<T, Compare, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::set<T, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for (typename std::set<T, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::set<T, Compare, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::set<T, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if (v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::set<T, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#if !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct as<std::multiset<T, Compare, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
|
||||||
std::multiset<T, Compare, Alloc> operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::multiset<T, Compare, Alloc> v;
|
|
||||||
while (p > pbegin) {
|
|
||||||
--p;
|
|
||||||
v.insert(p->as<T>());
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // !defined(MSGPACK_USE_CPP03)
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct convert<std::multiset<T, Compare, Alloc> > {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::multiset<T, Compare, Alloc>& v) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
|
||||||
std::multiset<T, Compare, Alloc> tmp;
|
|
||||||
while (p > pbegin) {
|
|
||||||
--p;
|
|
||||||
tmp.insert(p->as<T>());
|
|
||||||
}
|
|
||||||
#if __cplusplus >= 201103L
|
|
||||||
v = std::move(tmp);
|
|
||||||
#else
|
|
||||||
tmp.swap(v);
|
|
||||||
#endif
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct pack<std::multiset<T, Compare, Alloc> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::multiset<T, Compare, Alloc>& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for (typename std::multiset<T, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
|
||||||
o.pack(*it);
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename Compare, typename Alloc>
|
|
||||||
struct object_with_zone<std::multiset<T, Compare, Alloc> > {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::multiset<T, Compare, Alloc>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
if (v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
|
||||||
msgpack::object* const pend = p + size;
|
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::multiset<T, Compare, Alloc>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_SET_HPP
|
#endif // MSGPACK_TYPE_SET_HPP
|
||||||
|
17
include/msgpack/adaptor/size_equal_only.hpp
Normal file
17
include/msgpack/adaptor/size_equal_only.hpp
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_SIZE_EQUAL_ONLY_HPP
|
||||||
|
#define MSGPACK_TYPE_SIZE_EQUAL_ONLY_HPP
|
||||||
|
|
||||||
|
#include "msgpack/adaptor/size_equal_only_decl.hpp"
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/size_equal_only.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_SIZE_EQUAL_ONLYL_HPP
|
16
include/msgpack/adaptor/size_equal_only_decl.hpp
Normal file
16
include/msgpack/adaptor/size_equal_only_decl.hpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 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_SIZE_EQUAL_ONLY_DECL_HPP
|
||||||
|
#define MSGPACK_TYPE_SIZE_EQUAL_ONLY_DECL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/v1/adaptor/size_equal_only_decl.hpp"
|
||||||
|
#include "msgpack/v2/adaptor/size_equal_only_decl.hpp"
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_SIZE_EQUAL_ONLY_DECL_HPP
|
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2015 FURUHASHI Sadayuki
|
// Copyright (C) 2016 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
|
||||||
@@ -10,77 +10,6 @@
|
|||||||
#ifndef MSGPACK_TYPE_STRING_HPP
|
#ifndef MSGPACK_TYPE_STRING_HPP
|
||||||
#define MSGPACK_TYPE_STRING_HPP
|
#define MSGPACK_TYPE_STRING_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/v1/adaptor/string.hpp"
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<std::string> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, std::string& v) const {
|
|
||||||
switch (o.type) {
|
|
||||||
case msgpack::type::BIN:
|
|
||||||
v.assign(o.via.bin.ptr, o.via.bin.size);
|
|
||||||
break;
|
|
||||||
case msgpack::type::STR:
|
|
||||||
v.assign(o.via.str.ptr, o.via.str.size);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw msgpack::type_error();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<std::string> {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::string& 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> {
|
|
||||||
void operator()(msgpack::object& o, const std::string& 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> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, const std::string& v) const {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.type = msgpack::type::STR;
|
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
|
||||||
o.via.str.ptr = ptr;
|
|
||||||
o.via.str.size = size;
|
|
||||||
std::memcpy(ptr, v.data(), v.size());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_STRING_HPP
|
#endif // MSGPACK_TYPE_STRING_HPP
|
||||||
|
@@ -80,7 +80,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>
|
|||||||
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>& v) const {
|
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_map<K, V, Hash, Pred, Alloc>& v) const {
|
||||||
o.type = msgpack::type::MAP;
|
o.type = msgpack::type::MAP;
|
||||||
if(v.empty()) {
|
if(v.empty()) {
|
||||||
o.via.map.ptr = nullptr;
|
o.via.map.ptr = MSGPACK_NULLPTR;
|
||||||
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());
|
||||||
@@ -137,7 +137,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_multimap<K, V, Hash, Pred, Al
|
|||||||
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap<K, V, Hash, Pred, Alloc>& v) const {
|
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap<K, V, Hash, Pred, Alloc>& v) const {
|
||||||
o.type = msgpack::type::MAP;
|
o.type = msgpack::type::MAP;
|
||||||
if(v.empty()) {
|
if(v.empty()) {
|
||||||
o.via.map.ptr = nullptr;
|
o.via.map.ptr = MSGPACK_NULLPTR;
|
||||||
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());
|
||||||
|
@@ -78,7 +78,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>
|
|||||||
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>& v) const {
|
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_set<T, Hash, Compare, Alloc>& v) const {
|
||||||
o.type = msgpack::type::ARRAY;
|
o.type = msgpack::type::ARRAY;
|
||||||
if(v.empty()) {
|
if(v.empty()) {
|
||||||
o.via.array.ptr = nullptr;
|
o.via.array.ptr = MSGPACK_NULLPTR;
|
||||||
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());
|
||||||
@@ -132,7 +132,7 @@ struct object_with_zone<MSGPACK_STD_TR1::unordered_multiset<T, Hash, Compare, Al
|
|||||||
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset<T, Hash, Compare, Alloc>& v) const {
|
void operator()(msgpack::object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset<T, Hash, Compare, Alloc>& v) const {
|
||||||
o.type = msgpack::type::ARRAY;
|
o.type = msgpack::type::ARRAY;
|
||||||
if(v.empty()) {
|
if(v.empty()) {
|
||||||
o.via.array.ptr = nullptr;
|
o.via.array.ptr = MSGPACK_NULLPTR;
|
||||||
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());
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user