mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-20 22:31:33 +02:00
Compare commits
87 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
551308ae10 | ||
![]() |
f2c446799c | ||
![]() |
c2430635f9 | ||
![]() |
bffd3f2091 | ||
![]() |
076b5ed7fd | ||
![]() |
52fa74804c | ||
![]() |
5ae6077234 | ||
![]() |
43de525dc7 | ||
![]() |
f7961b798b | ||
![]() |
5cada9eb27 | ||
![]() |
ce42436f20 | ||
![]() |
c3df1bb26e | ||
![]() |
63d3b093f0 | ||
![]() |
8b57d2caf9 | ||
![]() |
a9a48cea3a | ||
![]() |
e96853a946 | ||
![]() |
2ebe884c0e | ||
![]() |
823caa8d8c | ||
![]() |
9c5654ed44 | ||
![]() |
5d30e42c01 | ||
![]() |
6b4a7b3b16 | ||
![]() |
0f1d0ed78c | ||
![]() |
825017ac50 | ||
![]() |
4bc64de0ec | ||
![]() |
08a42a347c | ||
![]() |
734e47c067 | ||
![]() |
fa7bb8ec77 | ||
![]() |
dc51f5d236 | ||
![]() |
f06b46d412 | ||
![]() |
1c97e051ad | ||
![]() |
4f59b98185 | ||
![]() |
208ec65034 | ||
![]() |
3bd0172a9a | ||
![]() |
3bb121fb8f | ||
![]() |
fd9e377bac | ||
![]() |
82ddfc1170 | ||
![]() |
6b195acba0 | ||
![]() |
ea1435784d | ||
![]() |
9eba7c482c | ||
![]() |
9c6857c425 | ||
![]() |
111b91a3e2 | ||
![]() |
ee546036a1 | ||
![]() |
6e7deb8091 | ||
![]() |
66fa561256 | ||
![]() |
243fb27c3c | ||
![]() |
746e983bf3 | ||
![]() |
766afb90ed | ||
![]() |
403567c1c5 | ||
![]() |
f3fe1b801e | ||
![]() |
4fdbc7518f | ||
![]() |
0dbdb3d974 | ||
![]() |
d7d5be414f | ||
![]() |
4d36456799 | ||
![]() |
b1725d4007 | ||
![]() |
102dba8e24 | ||
![]() |
1a372058a6 | ||
![]() |
f8b691f622 | ||
![]() |
7893d4d8c9 | ||
![]() |
9a3cd0c951 | ||
![]() |
46684265d5 | ||
![]() |
9e0d87b725 | ||
![]() |
bbc03b2b0a | ||
![]() |
b4d28c3d9d | ||
![]() |
cc1098998f | ||
![]() |
d9c5978958 | ||
![]() |
d05daa1df6 | ||
![]() |
534466894e | ||
![]() |
d04520044f | ||
![]() |
c0fb6b3b8c | ||
![]() |
19df3314f4 | ||
![]() |
b530b7f21a | ||
![]() |
ed49ea3c95 | ||
![]() |
7918c19f8f | ||
![]() |
0d7caecdb5 | ||
![]() |
f8b0ad1766 | ||
![]() |
7ed7af90b6 | ||
![]() |
4a94f836a7 | ||
![]() |
b36e548db2 | ||
![]() |
e6c276edf3 | ||
![]() |
befc3cdd0c | ||
![]() |
2e2e93ba2e | ||
![]() |
3b2bb56243 | ||
![]() |
9c4562382b | ||
![]() |
08b0c88c21 | ||
![]() |
d105f97ea0 | ||
![]() |
bd0665bed3 | ||
![]() |
8dc865d92d |
53
.github/workflows/coverage.yml
vendored
Normal file
53
.github/workflows/coverage.yml
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
name: coverage
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize]
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- c_master
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
codecov:
|
||||||
|
timeout-minutes: 30
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: install depends
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install g++-multilib lcov
|
||||||
|
- name: Compile tests
|
||||||
|
run: |
|
||||||
|
# install gtest
|
||||||
|
BASE=`pwd`
|
||||||
|
wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
|
||||||
|
unzip -q googletest-release-1.7.0.zip
|
||||||
|
cd googletest-release-1.7.0
|
||||||
|
g++ -m64 src/gtest-all.cc -I. -Iinclude -c -fPIC
|
||||||
|
g++ -m64 src/gtest_main.cc -I. -Iinclude -c -fPIC
|
||||||
|
ar -rv libgtest.a gtest-all.o
|
||||||
|
ar -rv libgtest_main.a gtest_main.o
|
||||||
|
mkdir -p ${BASE}/usr/include
|
||||||
|
cp -r include/gtest ${BASE}/usr/include
|
||||||
|
mkdir -p ${BASE}/usr/lib
|
||||||
|
mv *.a ${BASE}/usr/lib
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
mkdir build && cd build
|
||||||
|
CMAKE_LIBRARY_PATH="${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/gcc/lib64/cmake" cmake -DMSGPACK_32BIT=OFF -DBUILD_SHARED_LIBS=ON -DMSGPACK_CHAR_SIGN=signed -DMSGPACK_BUILD_EXAMPLES=ON -DMSGPACK_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DMSGPACK_GEN_COVERAGE=ON ..
|
||||||
|
make -j4
|
||||||
|
make test
|
||||||
|
- name: Upload coverage to Codecov
|
||||||
|
working-directory: build
|
||||||
|
run: |
|
||||||
|
# Create lcov report
|
||||||
|
lcov --capture --directory . --output-file coverage.info
|
||||||
|
lcov --remove coverage.info '/usr/*' --output-file coverage.info # filter system-files
|
||||||
|
lcov --list coverage.info # debug info
|
||||||
|
# Uploading report to CodeCov
|
||||||
|
bash <(curl -s https://codecov.io/bash) -f coverage.info || echo "Codecov did not collect coverage reports"
|
233
.github/workflows/gha.yml
vendored
Normal file
233
.github/workflows/gha.yml
vendored
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize]
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- c_master
|
||||||
|
tags:
|
||||||
|
- '*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
macos:
|
||||||
|
runs-on: macos-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
pattern: [0, 1, 2, 3]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: build and test
|
||||||
|
env:
|
||||||
|
CC: clang
|
||||||
|
CXX: clang++
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
BASE=`pwd`;
|
||||||
|
|
||||||
|
# matrix config
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="64"
|
||||||
|
if [ ${{ matrix.pattern }} == 0 ]; then
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="unsigned"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 1 ]; then
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="signed"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 2 ]; then
|
||||||
|
export SHARED="OFF"
|
||||||
|
export CHAR_SIGN="signed"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 3 ]; then
|
||||||
|
export SHARED="OFF"
|
||||||
|
export CHAR_SIGN="unsigned"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install gtest
|
||||||
|
wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
|
||||||
|
unzip -q googletest-release-1.7.0.zip
|
||||||
|
cd googletest-release-1.7.0
|
||||||
|
$CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c
|
||||||
|
$CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c
|
||||||
|
ar -rv libgtest.a gtest-all.o
|
||||||
|
ar -rv libgtest_main.a gtest_main.o
|
||||||
|
mkdir -p ${BASE}/usr/include
|
||||||
|
cp -r include/gtest ${BASE}/usr/include
|
||||||
|
mkdir -p ${BASE}/usr/lib
|
||||||
|
mv *.a ${BASE}/usr/lib
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# build and test
|
||||||
|
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" GTEST_ROOT="${BASE}/usr" CFLAGS="-Werror -g -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION}
|
||||||
|
|
||||||
|
linux:
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
pattern: [0, 1, 2, 3, 4, 5, 6, 7, 8]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: install build depends
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install g++-multilib clang-8 valgrind
|
||||||
|
- name: build and test
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
BASE=`pwd`;
|
||||||
|
|
||||||
|
# matrix config
|
||||||
|
if [ ${{ matrix.pattern }} == 0 ]; then
|
||||||
|
export CC=clang
|
||||||
|
export CXX=clang++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="64"
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="unsigned"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 1 ]; then
|
||||||
|
export CC=clang
|
||||||
|
export CXX=clang++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="32"
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="signed"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 2 ]; then
|
||||||
|
export CC=clang
|
||||||
|
export CXX=clang++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="64"
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="signed"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 3 ]; then
|
||||||
|
export CC=clang
|
||||||
|
export CXX=clang++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="32"
|
||||||
|
export SHARED="OFF"
|
||||||
|
export CHAR_SIGN="unsigned"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 4 ]; then
|
||||||
|
export CC=gcc
|
||||||
|
export CXX=g++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="64"
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="signed"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 5 ]; then
|
||||||
|
export CC=gcc
|
||||||
|
export CXX=g++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="32"
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="unsigned"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 6 ]; then
|
||||||
|
export CC=gcc
|
||||||
|
export CXX=g++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="64"
|
||||||
|
export SHARED="ON"
|
||||||
|
export SAN="-fsanitize=address -fno-omit-frame-pointer"
|
||||||
|
export CHAR_SIGN="unsigned"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 7 ]; then
|
||||||
|
export CC=gcc
|
||||||
|
export CXX=g++
|
||||||
|
ACTION="ci/build_cmake.sh"
|
||||||
|
export ARCH="32"
|
||||||
|
export SHARED="OFF"
|
||||||
|
export CHAR_SIGN="signed"
|
||||||
|
fi
|
||||||
|
if [ ${{ matrix.pattern }} == 8 ]; then
|
||||||
|
export CC=gcc
|
||||||
|
export CXX=g++
|
||||||
|
ACTION="ci/build_cmake_embedded.sh"
|
||||||
|
export ARCH="64"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install gtest
|
||||||
|
wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
|
||||||
|
unzip -q googletest-release-1.7.0.zip
|
||||||
|
cd googletest-release-1.7.0
|
||||||
|
$CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c -fPIC
|
||||||
|
$CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c -fPIC
|
||||||
|
ar -rv libgtest.a gtest-all.o
|
||||||
|
ar -rv libgtest_main.a gtest_main.o
|
||||||
|
mkdir -p ${BASE}/usr/include
|
||||||
|
cp -r include/gtest ${BASE}/usr/include
|
||||||
|
mkdir -p ${BASE}/usr/lib
|
||||||
|
mv *.a ${BASE}/usr/lib
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [ ${ARCH} == 32 ]; then
|
||||||
|
sudo apt-get install lib32z1-dev
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build and test
|
||||||
|
CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" GTEST_ROOT="${BASE}/usr" CFLAGS="-Werror -g -fsanitize=undefined -fno-sanitize-recover=all" CXXFLAGS="-Werror -g -ggdb3 -fsanitize=undefined -fno-sanitize-recover=all" ${ACTION}
|
||||||
|
|
||||||
|
windows:
|
||||||
|
runs-on: windows-2019
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
pattern: [0, 1, 2, 3]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2.0.0
|
||||||
|
- name: Cache vcpkg
|
||||||
|
id: cache-vcpkg
|
||||||
|
uses: actions/cache@v1.1.2
|
||||||
|
with:
|
||||||
|
path: C:/vcpkg/installed
|
||||||
|
key: windows-2019-vcpkg-v2
|
||||||
|
- name: Build dependencies
|
||||||
|
if: steps.cache-vcpkg.outputs.cache-hit != 'true'
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
vcpkg install gtest:x64-windows gtest:x86-windows
|
||||||
|
vcpkg install zlib:x64-windows zlib:x86-windows
|
||||||
|
- name: Build and test
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
if (${{ matrix.pattern }} -eq 0) {
|
||||||
|
$ARCH="x64"
|
||||||
|
$SHARED="ON"
|
||||||
|
}
|
||||||
|
elseif (${{ matrix.pattern }} -eq 1) {
|
||||||
|
$ARCH="x64"
|
||||||
|
$SHARED="OFF"
|
||||||
|
}
|
||||||
|
elseif (${{ matrix.pattern }} -eq 2) {
|
||||||
|
$ARCH="Win32"
|
||||||
|
$SHARED="ON"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$ARCH="Win32"
|
||||||
|
$SHARED="OFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
$CUR=(Get-Location).Path
|
||||||
|
md build
|
||||||
|
cd build
|
||||||
|
cmake -A $ARCH -DBUILD_SHARED_LIBS=$SHARED -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_CXX_FLAGS=/D_VARIADIC_MAX=10 /EHsc /D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" ..
|
||||||
|
cmake --build . --config Release
|
||||||
|
$pathbak="$env:PATH"
|
||||||
|
$env:PATH="C:\vcpkg\installed\x64-windows\bin;$CUR\build\Release;$pathbak"
|
||||||
|
ctest -V
|
||||||
|
$env:PATH=$pathbak
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,6 +0,0 @@
|
|||||||
[submodule "external/boost/predef"]
|
|
||||||
path = external/boost/predef
|
|
||||||
url = https://github.com/boostorg/predef.git
|
|
||||||
[submodule "external/boost/preprocessor"]
|
|
||||||
path = external/boost/preprocessor
|
|
||||||
url = https://github.com/boostorg/preprocessor.git
|
|
258
.travis.yml
258
.travis.yml
@@ -1,258 +0,0 @@
|
|||||||
language: cpp
|
|
||||||
sudo: false
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
install:
|
|
||||||
- export BASE=`pwd`
|
|
||||||
- mkdir ${BASE}/usr
|
|
||||||
- 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 chmod a+x cmake-3.7.1-Linux-x86_64.sh; 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 export PATH="${BASE}/usr/bin:$PATH"; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi
|
|
||||||
- if [ "$CXX" == "g++" ]; then export CXX="g++-7" CC="gcc-7"; fi
|
|
||||||
- if [ "$CXX" == "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-5.0" CC="clang-5.0"; fi
|
|
||||||
- if [ "$CXX" == "g++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then cd /usr/include/c++/$(g++ -v 2>&1 | grep version | awk '{print $3}')/bits; ln -s ../ext/atomicity.h .; cd ${BASE}/usr; fi
|
|
||||||
#gtest
|
|
||||||
- wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip
|
|
||||||
- unzip -q googletest-release-1.7.0.zip
|
|
||||||
- cd googletest-release-1.7.0
|
|
||||||
- $CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c
|
|
||||||
- $CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c
|
|
||||||
- ar -rv libgtest.a gtest-all.o
|
|
||||||
- ar -rv libgtest_main.a gtest_main.o
|
|
||||||
- mkdir -p ${BASE}/usr/include
|
|
||||||
- cp -r include/gtest ${BASE}/usr/include
|
|
||||||
- mkdir -p ${BASE}/usr/lib
|
|
||||||
- mv *.a ${BASE}/usr/lib
|
|
||||||
- cd ..
|
|
||||||
# valgrind
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$MSGPACK_FUZZ_REGRESSION" != "ON" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi
|
|
||||||
# boost
|
|
||||||
- if [ "$BOOST" == "ON" ] && [ "MSGPACK_FUZZ_REGRESSION" != "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.67.0/boost_1_67_0.zip && unzip -q boost_1_67_0.zip && cd boost_1_67_0 && ./bootstrap.sh && ./b2 -j3 --prefix=${BASE}/usr --with-chrono --with-context --with-system --with-timer address-model=${ARCH} install > /dev/null && cd ..; fi
|
|
||||||
- if [ "$MSGPACK_FUZZ_REGRESSION" == "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.67.0/boost_1_67_0.zip && unzip -q boost_1_67_0.zip && cd boost_1_67_0 && ./bootstrap.sh --with-toolset=clang && ./b2 clean && ./b2 -j$(nproc) --prefix=${BASE}/usr --with-system --with-filesystem address-model=${ARCH} install > /dev/null && cd ..; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/include; fi
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: osx
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="1"
|
|
||||||
- os: osx
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="3"
|
|
||||||
- os: osx
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
|
|
||||||
- os: osx
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_cmake.sh" ARCH="64" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="2"
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
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-trusty-5.0
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- bzip2
|
|
||||||
- clang-5.0
|
|
||||||
- libc6-dbg
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
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-trusty-5.0
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- lib32stdc++6-6-dbg
|
|
||||||
- lib32gcc1
|
|
||||||
- libc6-i386
|
|
||||||
- lib32z1-dev
|
|
||||||
- zlib1g-dev
|
|
||||||
- bzip2
|
|
||||||
- clang-5.0
|
|
||||||
- libc6-dbg
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" BOOST="ON" SHARED="ON" CHAR_SIGN="signed" API_VERSION="3" X3_PARSE="ON"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- llvm-toolchain-trusty-5.0
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- bzip2
|
|
||||||
- clang-5.0
|
|
||||||
- libc6-dbg
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="32" SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- llvm-toolchain-trusty-5.0
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- lib32stdc++6-6-dbg
|
|
||||||
- lib32gcc1
|
|
||||||
- libc6-i386
|
|
||||||
- lib32z1-dev
|
|
||||||
- zlib1g-dev
|
|
||||||
- bzip2
|
|
||||||
- clang-5.0
|
|
||||||
- libc6-dbg
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="64" SHARED="ON" CHAR_SIGN="signed" API_VERSION="2"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- bzip2
|
|
||||||
- libc6-dbg
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_cmake.sh" CXX17="ON" ARCH="32" BOOST="ON" SHARED="ON" CHAR_SIGN="unsigned" API_VERSION="3" X3_PARSE="ON"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- lib32stdc++6-6-dbg
|
|
||||||
- lib32gcc1
|
|
||||||
- libc6-i386
|
|
||||||
- lib32z1-dev
|
|
||||||
- zlib1g-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-7-multilib
|
|
||||||
- g++-7-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-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- lib32stdc++6-6-dbg
|
|
||||||
- lib32gcc1
|
|
||||||
- libc6-i386
|
|
||||||
- lib32z1-dev
|
|
||||||
- zlib1g-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-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- lib32stdc++6-6-dbg
|
|
||||||
- lib32gcc1
|
|
||||||
- libc6-i386
|
|
||||||
- lib32z1-dev
|
|
||||||
- zlib1g-dev
|
|
||||||
- bzip2
|
|
||||||
- libc6-dbg
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_regression.sh" ARCH="64" SAN="UBSAN" MSGPACK_FUZZ_REGRESSION="ON"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- llvm-toolchain-trusty-5.0
|
|
||||||
packages:
|
|
||||||
- bzip2
|
|
||||||
- clang-5.0
|
|
||||||
script:
|
|
||||||
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}" GTEST_ROOT="${BASE}/gtest" BOOST_ROOT="${BASE}/boost" CTEST_OUTPUT_ON_FAILURE=1 MSGPACK_SAN="${SAN}" ci/build_regression.sh
|
|
||||||
- os: linux
|
|
||||||
compiler: clang
|
|
||||||
env: ACTION="ci/build_regression.sh" ARCH="64" SAN="ASAN" MSGPACK_FUZZ_REGRESSION="ON"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- llvm-toolchain-trusty-5.0
|
|
||||||
packages:
|
|
||||||
- bzip2
|
|
||||||
- clang-5.0
|
|
||||||
script:
|
|
||||||
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}" GTEST_ROOT="${BASE}/gtest" BOOST_ROOT="${BASE}/boost" CTEST_OUTPUT_ON_FAILURE=1 MSGPACK_SAN="${SAN}" ci/build_regression.sh
|
|
||||||
- os: linux
|
|
||||||
compiler: gcc
|
|
||||||
env: ACTION="ci/build_cmake_embedded.sh" ARCH="64"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- g++-multilib
|
|
||||||
- gcc-multilib
|
|
||||||
- gcc-7-multilib
|
|
||||||
- g++-7-multilib
|
|
||||||
- lib32stdc++6-6-dbg
|
|
||||||
- lib32gcc1
|
|
||||||
- libc6-i386
|
|
||||||
- lib32z1-dev
|
|
||||||
- zlib1g-dev
|
|
||||||
- bzip2
|
|
||||||
- libc6-dbg
|
|
||||||
|
|
||||||
|
|
||||||
script:
|
|
||||||
- CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" BOOST_ROOT="${BASE}/usr" CFLAGS="-Werror -g" CXXFLAGS="-Werror -g" ${ACTION}
|
|
||||||
- cat Files.cmake| grep ".*\.[h|hpp]" | perl -pe 's/ //g' | sort > tmp1 && find include -name "*.h" -o -name "*.hpp" | sort > tmp2 && diff tmp1 tmp2
|
|
28
CHANGELOG.md
28
CHANGELOG.md
@@ -1,3 +1,31 @@
|
|||||||
|
# 2023-01-10 version 5.0.0
|
||||||
|
* Add additional address sanitizer for CI. (#1023)
|
||||||
|
## << breaking changes >>
|
||||||
|
* Change CMake package name of C library to msgpackc (#1044, #1049)
|
||||||
|
|
||||||
|
# 2021-08-01 version 4.0.0
|
||||||
|
* Fix and improve alignment logic (#962)
|
||||||
|
* Fix iovec name conflict (#953)
|
||||||
|
* Fix empty string print (#942)
|
||||||
|
* Fix buffer ptr size (#899)
|
||||||
|
* Fix UB. Check null pointer before using memcpy() (#890)
|
||||||
|
* Improve CI environment (#885, #899)
|
||||||
|
|
||||||
|
## << breaking changes >>
|
||||||
|
* Separate C part of the msgpack-c from C/C++ mixed msgpack-c (#876, #878)
|
||||||
|
|
||||||
|
|
||||||
|
# 2020-06-05 version 3.3.0
|
||||||
|
* Add json example for C (#870)
|
||||||
|
* Add both header and body packing functions for C (#870)
|
||||||
|
* Set default ref_size and chunk_size to vrefbuffer (#865)
|
||||||
|
* Add examples (#861)
|
||||||
|
* Improve build system (#839, #842)
|
||||||
|
* Improve tests (#829)
|
||||||
|
* Improve documents (#828)
|
||||||
|
* Remove some warnings (#827, #851, #871)
|
||||||
|
* Improve CI environment (#824, #831, #833, #834, #846, #860, 874)
|
||||||
|
|
||||||
# 2019-12-10 version 3.2.1
|
# 2019-12-10 version 3.2.1
|
||||||
* Fix snprintf return value checking (#821)
|
* Fix snprintf return value checking (#821)
|
||||||
* Remove some warnings (#819)
|
* Remove some warnings (#819)
|
||||||
|
264
CMakeLists.txt
264
CMakeLists.txt
@@ -5,7 +5,7 @@ IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR
|
|||||||
CMAKE_POLICY(SET CMP0054 NEW)
|
CMAKE_POLICY(SET CMP0054 NEW)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
PROJECT (msgpack)
|
PROJECT (msgpackc)
|
||||||
|
|
||||||
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents)
|
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents)
|
||||||
STRING (REGEX MATCH "#define MSGPACK_VERSION_MAJOR *([0-9a-zA-Z_]*)" NULL_OUT ${contents})
|
STRING (REGEX MATCH "#define MSGPACK_VERSION_MAJOR *([0-9a-zA-Z_]*)" NULL_OUT ${contents})
|
||||||
@@ -16,15 +16,35 @@ STRING (REGEX MATCH "#define MSGPACK_VERSION_REVISION *([0-9a-zA-Z_]*)" NULL_OUT
|
|||||||
SET (VERSION_REVISION ${CMAKE_MATCH_1})
|
SET (VERSION_REVISION ${CMAKE_MATCH_1})
|
||||||
SET (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION})
|
SET (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION})
|
||||||
|
|
||||||
|
LIST (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
|
||||||
SET (prefix ${CMAKE_INSTALL_PREFIX})
|
SET (prefix ${CMAKE_INSTALL_PREFIX})
|
||||||
SET (exec_prefix "\${prefix}")
|
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")
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
INCLUDE(TestBigEndian)
|
||||||
|
TEST_BIG_ENDIAN(BIGENDIAN)
|
||||||
|
IF (BIGENDIAN)
|
||||||
|
SET(MSGPACK_ENDIAN_BIG_BYTE 1)
|
||||||
|
SET(MSGPACK_ENDIAN_LITTLE_BYTE 0)
|
||||||
|
ELSE ()
|
||||||
|
SET(MSGPACK_ENDIAN_BIG_BYTE 0)
|
||||||
|
SET(MSGPACK_ENDIAN_LITTLE_BYTE 1)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
CONFIGURE_FILE (
|
||||||
|
cmake/sysdep.h.in
|
||||||
|
include/msgpack/sysdep.h
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
|
||||||
|
CONFIGURE_FILE (
|
||||||
|
cmake/pack_template.h.in
|
||||||
|
include/msgpack/pack_template.h
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
|
||||||
IF (APPLE)
|
IF (APPLE)
|
||||||
SET(CMAKE_MACOSX_RPATH ON)
|
SET(CMAKE_MACOSX_RPATH ON)
|
||||||
@@ -38,59 +58,11 @@ IF (APPLE)
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_USE_X3_PARSE)
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}")
|
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}")
|
|
||||||
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)
|
|
||||||
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++14.")
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
ELSE ()
|
|
||||||
IF (MSGPACK_CXX17)
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}")
|
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
||||||
SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}")
|
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
||||||
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++17.")
|
|
||||||
ENDIF ()
|
|
||||||
ELSEIF (MSGPACK_CXX11)
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
||||||
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 ()
|
|
||||||
ELSE ()
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_STD_SUPPORT_VERSION}) OR
|
|
||||||
(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL ${GNUCXX_STD_SUPPORT_VERSION}))
|
|
||||||
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 ()
|
|
||||||
|
|
||||||
IF (MSGPACK_32BIT)
|
IF (MSGPACK_32BIT)
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||||
SET (CMAKE_CXX_FLAGS "-m32 ${CMAKE_CXX_FLAGS}")
|
|
||||||
SET (CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
|
SET (CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
|
||||||
SET (CMAKE_EXE_LINKER_FLAGS "-m32 ${CMAKE_EXE_LINKER_FLAGS}")
|
SET (CMAKE_EXE_LINKER_FLAGS "-m32 ${CMAKE_EXE_LINKER_FLAGS}")
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
ELSEIF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
||||||
SET (CMAKE_CXX_FLAGS "-m32 ${CMAKE_CXX_FLAGS}")
|
|
||||||
SET (CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
|
SET (CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
|
||||||
SET (CMAKE_EXE_LINKER_FLAGS "-m32 ${CMAKE_EXE_LINKER_FLAGS}")
|
SET (CMAKE_EXE_LINKER_FLAGS "-m32 ${CMAKE_EXE_LINKER_FLAGS}")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
@@ -98,60 +70,16 @@ ENDIF ()
|
|||||||
|
|
||||||
OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON)
|
OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON)
|
||||||
|
|
||||||
IF (MSGPACK_BOOST)
|
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}")
|
|
||||||
SET (Boost_USE_MULTITHREADED ON)
|
|
||||||
SET (Boost_USE_STATIC_RUNTIME OFF)
|
|
||||||
FIND_PACKAGE (Boost REQUIRED COMPONENTS chrono context system timer)
|
|
||||||
INCLUDE_DIRECTORIES (
|
|
||||||
${Boost_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
LINK_DIRECTORIES (
|
|
||||||
${Boost_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
IF (MSGPACK_BOOST_DIR)
|
|
||||||
INCLUDE_DIRECTORIES (
|
|
||||||
${MSGPACK_BOOST_DIR}
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF (MSGPACK_CHAR_SIGN)
|
IF (MSGPACK_CHAR_SIGN)
|
||||||
SET (CMAKE_C_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_C_FLAGS}")
|
SET (CMAKE_C_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_C_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=3 ${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)
|
|
||||||
FOREACH (F ${PREDEF_FILES})
|
|
||||||
SET(M "Converting ${F}")
|
|
||||||
MESSAGE(STATUS ${M})
|
|
||||||
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})
|
|
||||||
FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT})
|
|
||||||
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)
|
|
||||||
FOREACH (F ${PREPROCESSOR_FILES})
|
|
||||||
SET(M "Converting ${F}")
|
|
||||||
MESSAGE(STATUS ${M})
|
|
||||||
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})
|
|
||||||
FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT})
|
|
||||||
ENDFOREACH ()
|
|
||||||
|
|
||||||
FIND_PACKAGE (GTest)
|
FIND_PACKAGE (GTest)
|
||||||
FIND_PACKAGE (ZLIB)
|
FIND_PACKAGE (ZLIB)
|
||||||
FIND_PACKAGE (Threads)
|
FIND_PACKAGE (Threads)
|
||||||
IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND AND NOT "${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON")
|
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)
|
||||||
|
OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (DEFINED BUILD_SHARED_LIBS)
|
IF (DEFINED BUILD_SHARED_LIBS)
|
||||||
@@ -184,33 +112,14 @@ ELSE ()
|
|||||||
SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED})
|
SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED})
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON)
|
|
||||||
|
|
||||||
INCLUDE (CheckCXXSourceCompiles)
|
|
||||||
CHECK_CXX_SOURCE_COMPILES ("
|
|
||||||
#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; }
|
|
||||||
int main(int argc, char * argv[])
|
|
||||||
{
|
|
||||||
atomic_sub(1);
|
|
||||||
atomic_add(1);
|
|
||||||
}
|
|
||||||
" MSGPACK_ENABLE_GCC_CXX_ATOMIC)
|
|
||||||
|
|
||||||
INCLUDE (Files.cmake)
|
INCLUDE (Files.cmake)
|
||||||
|
|
||||||
EXECUTE_PROCESS (
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack
|
|
||||||
)
|
|
||||||
|
|
||||||
CONFIGURE_FILE (
|
CONFIGURE_FILE (
|
||||||
msgpack.pc.in
|
msgpack.pc.in
|
||||||
msgpack.pc
|
msgpack.pc
|
||||||
@ONLY
|
@ONLY
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
||||||
ADD_LIBRARY (msgpackc
|
ADD_LIBRARY (msgpackc
|
||||||
${msgpackc_SOURCES}
|
${msgpackc_SOURCES}
|
||||||
@@ -223,22 +132,13 @@ IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/msgpack>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSION VERSION_EQUAL 3.0)))
|
|
||||||
ADD_LIBRARY (msgpackc-cxx INTERFACE)
|
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES (msgpackc-cxx
|
|
||||||
INTERFACE
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
|
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
|
||||||
ADD_LIBRARY (msgpackc-static STATIC
|
ADD_LIBRARY (msgpackc-static STATIC
|
||||||
@@ -250,6 +150,7 @@ IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/msgpack>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
@@ -266,20 +167,24 @@ IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
# enable regression testing
|
IF (MSGPACK_GEN_COVERAGE)
|
||||||
IF ("${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON" AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
IF (NOT MSGPACK_BUILD_TESTS)
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}")
|
MESSAGE(FATAL_ERROR "Coverage requires -DMSGPACK_BUILD_TESTS=ON")
|
||||||
SET (Boost_USE_MULTITHREADED ON)
|
ENDIF ()
|
||||||
SET (Boost_USE_STATIC_RUNTIME OFF)
|
STRING(TOUPPER "${CMAKE_BUILD_TYPE}" UPPER_CMAKE_BUILD_TYPE)
|
||||||
|
IF (NOT "${UPPER_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
||||||
|
MESSAGE(FATAL_ERROR "Coverage requires -DCMAKE_BUILD_TYPE=Debug")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
enable_testing ()
|
INCLUDE(CodeCoverage)
|
||||||
ADD_SUBDIRECTORY (fuzz)
|
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_FLAGS}")
|
||||||
SET (MSGPACK_BUILD_EXAMPLES OFF)
|
|
||||||
|
SETUP_TARGET_FOR_COVERAGE(coverage make coverage test)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
|
||||||
IF (MSGPACK_BUILD_TESTS)
|
IF (MSGPACK_BUILD_TESTS)
|
||||||
ENABLE_TESTING ()
|
ENABLE_TESTING ()
|
||||||
|
list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure")
|
||||||
# MEMORYCHECK_COMMAND_OPTIONS needs to place prior to CTEST_MEMORYCHECK_COMMAND
|
# MEMORYCHECK_COMMAND_OPTIONS needs to place prior to CTEST_MEMORYCHECK_COMMAND
|
||||||
SET (MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --show-leak-kinds=definite,possible --error-exitcode=1")
|
SET (MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --show-leak-kinds=definite,possible --error-exitcode=1")
|
||||||
FIND_PROGRAM(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
|
FIND_PROGRAM(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
|
||||||
@@ -287,7 +192,7 @@ IF (MSGPACK_BUILD_TESTS)
|
|||||||
ADD_SUBDIRECTORY (test)
|
ADD_SUBDIRECTORY (test)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||||
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
||||||
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC")
|
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
@@ -296,7 +201,7 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" ST
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
||||||
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
||||||
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
@@ -305,21 +210,28 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
IF (CMAKE_C_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_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||||
ELSE ()
|
ELSE ()
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10")
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX)
|
IF (CMAKE_C_FLAGS MATCHES "/W[0-4]")
|
||||||
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC10")
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE C)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "sparc")
|
IF ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "sparc")
|
||||||
SET (CMAKE_C_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_C_FLAGS}")
|
SET (CMAKE_C_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_C_FLAGS}")
|
||||||
SET (CMAKE_CXX_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_CXX_FLAGS}")
|
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (NOT DEFINED CMAKE_INSTALL_BINDIR)
|
IF (NOT DEFINED CMAKE_INSTALL_BINDIR)
|
||||||
@@ -338,23 +250,23 @@ IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC)
|
|||||||
SET (MSGPACK_INSTALLTARGETS msgpackc)
|
SET (MSGPACK_INSTALLTARGETS msgpackc)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSION VERSION_EQUAL 3.0)))
|
|
||||||
LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-cxx)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
|
IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC)
|
||||||
LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static)
|
LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets
|
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpackc-targets
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
)
|
)
|
||||||
FOREACH (file ${msgpackc_HEADERS})
|
FOREACH (file ${msgpackc_common_HEADERS})
|
||||||
GET_FILENAME_COMPONENT (dir ${file} PATH)
|
GET_FILENAME_COMPONENT (dir ${file} PATH)
|
||||||
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
|
INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir})
|
||||||
ENDFOREACH ()
|
ENDFOREACH ()
|
||||||
|
FOREACH (file ${msgpackc_configured_HEADERS})
|
||||||
|
GET_FILENAME_COMPONENT (dir ${file} PATH)
|
||||||
|
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${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 ()
|
||||||
@@ -377,69 +289,45 @@ IF (DOXYGEN_FOUND)
|
|||||||
)
|
)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ADD_CUSTOM_TARGET (
|
ADD_CUSTOM_TARGET (
|
||||||
doxygen_c
|
doxygen
|
||||||
${Doxyfile_c_CONTENT}
|
${Doxyfile_c_CONTENT}
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
LIST (APPEND Doxyfile_cpp_CONTENT
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.hpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_cpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "INPUT = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "STRIP_FROM_PATH = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
)
|
|
||||||
IF (DOXYGEN_DOT_FOUND)
|
|
||||||
LIST (APPEND Doxyfile_cpp_CONTENT
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "HAVE_DOT = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
ADD_CUSTOM_TARGET (
|
|
||||||
doxygen_cpp
|
|
||||||
${Doxyfile_cpp_CONTENT}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C++\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
ADD_CUSTOM_TARGET (
|
|
||||||
doxygen
|
|
||||||
DEPENDS doxygen_c doxygen_cpp
|
|
||||||
)
|
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
INCLUDE (CMakePackageConfigHelpers)
|
INCLUDE (CMakePackageConfigHelpers)
|
||||||
|
|
||||||
SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpack")
|
SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpackc")
|
||||||
|
|
||||||
WRITE_BASIC_PACKAGE_VERSION_FILE (
|
WRITE_BASIC_PACKAGE_VERSION_FILE (
|
||||||
msgpack-config-version.cmake
|
msgpackc-config-version.cmake
|
||||||
VERSION ${VERSION}
|
VERSION ${VERSION}
|
||||||
COMPATIBILITY SameMajorVersion
|
COMPATIBILITY SameMajorVersion
|
||||||
)
|
)
|
||||||
|
|
||||||
IF (NOT CMAKE_VERSION VERSION_LESS 3.0)
|
IF (NOT CMAKE_VERSION VERSION_LESS 3.0)
|
||||||
EXPORT (EXPORT msgpack-targets
|
EXPORT (EXPORT msgpackc-targets
|
||||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpack-targets.cmake"
|
FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpackc-targets.cmake"
|
||||||
)
|
)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in
|
CONFIGURE_PACKAGE_CONFIG_FILE (msgpackc-config.cmake.in
|
||||||
msgpack-config.cmake
|
msgpackc-config.cmake
|
||||||
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
|
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
INSTALL (EXPORT msgpack-targets
|
INSTALL (EXPORT msgpackc-targets
|
||||||
FILE
|
FILE
|
||||||
msgpack-targets.cmake
|
msgpackc-targets.cmake
|
||||||
DESTINATION
|
DESTINATION
|
||||||
"${CMAKE_INSTALL_CMAKEDIR}"
|
"${CMAKE_INSTALL_CMAKEDIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
INSTALL (
|
INSTALL (
|
||||||
FILES
|
FILES
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/msgpackc-config.cmake"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/msgpackc-config-version.cmake"
|
||||||
DESTINATION
|
DESTINATION
|
||||||
"${CMAKE_INSTALL_CMAKEDIR}"
|
"${CMAKE_INSTALL_CMAKEDIR}"
|
||||||
)
|
)
|
||||||
|
745
Files.cmake
745
Files.cmake
@@ -1,159 +1,21 @@
|
|||||||
LIST (APPEND msgpackc_SOURCES
|
# Source files
|
||||||
|
SET (msgpackc_SOURCES
|
||||||
src/objectc.c
|
src/objectc.c
|
||||||
src/unpack.c
|
src/unpack.c
|
||||||
src/version.c
|
src/version.c
|
||||||
src/vrefbuffer.c
|
src/vrefbuffer.c
|
||||||
src/zone.c
|
src/zone.c
|
||||||
)
|
)
|
||||||
LIST (APPEND msgpackc_HEADERS
|
|
||||||
|
# Header files
|
||||||
|
SET (msgpackc_common_HEADERS
|
||||||
include/msgpack.h
|
include/msgpack.h
|
||||||
include/msgpack/fbuffer.h
|
include/msgpack/fbuffer.h
|
||||||
include/msgpack/gcc_atomic.h
|
include/msgpack/gcc_atomic.h
|
||||||
include/msgpack/object.h
|
include/msgpack/object.h
|
||||||
include/msgpack/pack.h
|
include/msgpack/pack.h
|
||||||
include/msgpack/pack_define.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/ptx.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/nvcc.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/cuda.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/cloudabi.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/other/workaround.h
|
|
||||||
include/msgpack/predef/platform.h
|
|
||||||
include/msgpack/predef/platform/cloudabi.h
|
|
||||||
include/msgpack/predef/platform/ios.h
|
|
||||||
include/msgpack/predef/platform/mingw.h
|
|
||||||
include/msgpack/predef/platform/mingw32.h
|
|
||||||
include/msgpack/predef/platform/mingw64.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_server.h
|
|
||||||
include/msgpack/predef/platform/windows_store.h
|
|
||||||
include/msgpack/predef/platform/windows_system.h
|
|
||||||
include/msgpack/predef/platform/windows_uwp.h
|
|
||||||
include/msgpack/predef/version.h
|
|
||||||
include/msgpack/predef/version_number.h
|
|
||||||
include/msgpack/sbuffer.h
|
include/msgpack/sbuffer.h
|
||||||
include/msgpack/sysdep.h
|
|
||||||
include/msgpack/timestamp.h
|
include/msgpack/timestamp.h
|
||||||
include/msgpack/unpack.h
|
include/msgpack/unpack.h
|
||||||
include/msgpack/unpack_define.h
|
include/msgpack/unpack_define.h
|
||||||
@@ -165,588 +27,15 @@ LIST (APPEND msgpackc_HEADERS
|
|||||||
include/msgpack/zbuffer.h
|
include/msgpack/zbuffer.h
|
||||||
include/msgpack/zone.h
|
include/msgpack/zone.h
|
||||||
)
|
)
|
||||||
IF (MSGPACK_ENABLE_CXX)
|
|
||||||
LIST (APPEND msgpackc_HEADERS
|
# Header files will configured
|
||||||
include/msgpack.hpp
|
SET (msgpackc_configured_HEADERS
|
||||||
include/msgpack/adaptor/adaptor_base.hpp
|
include/msgpack/pack_template.h
|
||||||
include/msgpack/adaptor/adaptor_base_decl.hpp
|
include/msgpack/sysdep.h
|
||||||
include/msgpack/adaptor/array_ref.hpp
|
)
|
||||||
include/msgpack/adaptor/array_ref_decl.hpp
|
|
||||||
include/msgpack/adaptor/bool.hpp
|
# All header files
|
||||||
include/msgpack/adaptor/boost/fusion.hpp
|
LIST (APPEND msgpackc_HEADERS
|
||||||
include/msgpack/adaptor/boost/msgpack_variant.hpp
|
${msgpackc_common_HEADERS}
|
||||||
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
|
${msgpackc_configured_HEADERS}
|
||||||
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/chrono.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/timespec.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/cpp17/byte.hpp
|
|
||||||
include/msgpack/adaptor/cpp17/carray_byte.hpp
|
|
||||||
include/msgpack/adaptor/cpp17/optional.hpp
|
|
||||||
include/msgpack/adaptor/cpp17/string_view.hpp
|
|
||||||
include/msgpack/adaptor/cpp17/vector_byte.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/adaptor/wstring.hpp
|
|
||||||
include/msgpack/cpp_config.hpp
|
|
||||||
include/msgpack/cpp_config_decl.hpp
|
|
||||||
include/msgpack/create_object_visitor.hpp
|
|
||||||
include/msgpack/create_object_visitor_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/null_visitor.hpp
|
|
||||||
include/msgpack/null_visitor_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.hpp
|
|
||||||
include/msgpack/parse_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/detail/to_list_msvc.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/chrono.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/timespec.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/cpp17/byte.hpp
|
|
||||||
include/msgpack/v1/adaptor/cpp17/carray_byte.hpp
|
|
||||||
include/msgpack/v1/adaptor/cpp17/optional.hpp
|
|
||||||
include/msgpack/v1/adaptor/cpp17/string_view.hpp
|
|
||||||
include/msgpack/v1/adaptor/cpp17/vector_byte.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_convert_helper.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/adaptor/wstring.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/create_object_visitor_decl.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/null_visitor_decl.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_decl.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_parse_decl.hpp
|
|
||||||
include/msgpack/v2/x3_unpack.hpp
|
|
||||||
include/msgpack/v2/x3_unpack_decl.hpp
|
|
||||||
include/msgpack/v2/zbuffer_decl.hpp
|
|
||||||
include/msgpack/v2/zone_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/adaptor_base.hpp
|
|
||||||
include/msgpack/v3/adaptor/adaptor_base_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/array_ref_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/check_container_size_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/define_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/ext_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/fixint_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/int_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/map_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/msgpack_tuple_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/nil_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/raw_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/size_equal_only_decl.hpp
|
|
||||||
include/msgpack/v3/adaptor/v4raw_decl.hpp
|
|
||||||
include/msgpack/v3/cpp_config_decl.hpp
|
|
||||||
include/msgpack/v3/create_object_visitor_decl.hpp
|
|
||||||
include/msgpack/v3/detail/cpp03_zone_decl.hpp
|
|
||||||
include/msgpack/v3/detail/cpp11_zone_decl.hpp
|
|
||||||
include/msgpack/v3/fbuffer_decl.hpp
|
|
||||||
include/msgpack/v3/iterator_decl.hpp
|
|
||||||
include/msgpack/v3/meta_decl.hpp
|
|
||||||
include/msgpack/v3/null_visitor_decl.hpp
|
|
||||||
include/msgpack/v3/object_decl.hpp
|
|
||||||
include/msgpack/v3/object_fwd.hpp
|
|
||||||
include/msgpack/v3/object_fwd_decl.hpp
|
|
||||||
include/msgpack/v3/pack_decl.hpp
|
|
||||||
include/msgpack/v3/parse.hpp
|
|
||||||
include/msgpack/v3/parse_decl.hpp
|
|
||||||
include/msgpack/v3/parse_return.hpp
|
|
||||||
include/msgpack/v3/sbuffer_decl.hpp
|
|
||||||
include/msgpack/v3/unpack.hpp
|
|
||||||
include/msgpack/v3/unpack_decl.hpp
|
|
||||||
include/msgpack/v3/vrefbuffer_decl.hpp
|
|
||||||
include/msgpack/v3/x3_parse_decl.hpp
|
|
||||||
include/msgpack/v3/x3_unpack.hpp
|
|
||||||
include/msgpack/v3/x3_unpack_decl.hpp
|
|
||||||
include/msgpack/v3/zbuffer_decl.hpp
|
|
||||||
include/msgpack/v3/zone_decl.hpp
|
|
||||||
include/msgpack/version.hpp
|
|
||||||
include/msgpack/versioning.hpp
|
|
||||||
include/msgpack/vrefbuffer.hpp
|
|
||||||
include/msgpack/vrefbuffer_decl.hpp
|
|
||||||
include/msgpack/x3_parse.hpp
|
|
||||||
include/msgpack/x3_parse_decl.hpp
|
|
||||||
include/msgpack/x3_unpack.hpp
|
|
||||||
include/msgpack/x3_unpack_decl.hpp
|
|
||||||
include/msgpack/zbuffer.hpp
|
|
||||||
include/msgpack/zbuffer_decl.hpp
|
|
||||||
include/msgpack/zone.hpp
|
|
||||||
include/msgpack/zone_decl.hpp
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
|
@@ -6,10 +6,11 @@ Currently, RPC implementation is not available.
|
|||||||
|
|
||||||
# Install
|
# Install
|
||||||
|
|
||||||
|
## Install with package manager
|
||||||
|
|
||||||
## Mac OS X with MacPorts
|
### MacOS with MacPorts
|
||||||
|
|
||||||
On Mac OS X, you can install MessagePack for C using MacPorts.
|
On MacOS, you can install MessagePack for C using MacPorts.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo port install msgpack
|
$ sudo port install msgpack
|
||||||
@@ -23,48 +24,44 @@ You can also install via Homebrew.
|
|||||||
$ brew install msgpack
|
$ brew install msgpack
|
||||||
```
|
```
|
||||||
|
|
||||||
## FreeBSD with Ports Collection
|
### FreeBSD with Ports Collection
|
||||||
|
|
||||||
On FreeBSD, you can use Ports Collection. Install [net/msgpack|http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/msgpack/] package.
|
On FreeBSD, you can use Ports Collection. Install [net/msgpack](http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/msgpack/) package.
|
||||||
|
|
||||||
## Gentoo Linux with Portage
|
### Gentoo Linux with Portage
|
||||||
|
|
||||||
On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack|http://gentoo-portage.com/dev-libs/msgpack] package.
|
On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack](http://gentoo-portage.com/dev-libs/msgpack) package.
|
||||||
|
|
||||||
## Other UNIX-like platform with ./configure
|
### Windows with vcpkg
|
||||||
|
|
||||||
On the other UNIX-like platforms, download source package from [Releases|http://msgpack.org/releases/cpp/] and run `./configure && make && make install`.
|
There are several package managers available, and vcpkg is typical.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ wget http://msgpack.org/releases/cpp/msgpack-1.3.0.tar.gz
|
$ vcpkg install msgpack:x64-windows
|
||||||
|
```
|
||||||
|
## Install with source code
|
||||||
|
|
||||||
|
### Build with cmake
|
||||||
|
|
||||||
|
You need to install cmake (2.8.12 or higher) first.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git clone https://github.com/msgpack/msgpack-c.git
|
||||||
|
$ cd msgpack-c
|
||||||
|
$ mkdir build
|
||||||
|
$ cd build
|
||||||
|
$ cmake ..
|
||||||
|
$ cmake --build .
|
||||||
|
$ cmake --build . --target install
|
||||||
|
```
|
||||||
|
### Build with autotools
|
||||||
|
|
||||||
|
In versions 1.4.2 and below, you can use `autotools` to build on UNIX-like platforms.
|
||||||
|
```
|
||||||
|
$ wget https://github.com/msgpack/msgpack-c/archive/cpp-1.3.0.tar.gz
|
||||||
$ tar zxvf msgpack-1.3.0.tar.gz
|
$ tar zxvf msgpack-1.3.0.tar.gz
|
||||||
$ cd msgpack-1.3.0
|
$ cd msgpack-1.3.0
|
||||||
$ ./configure
|
$ ./bootstrap # If the 'configure' script already exists, you can omit this step.
|
||||||
$ make
|
|
||||||
$ sudo make install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Windows
|
|
||||||
|
|
||||||
On Windows, download source package from [here|https://sourceforge.net/projects/msgpack/files/] and extract it.
|
|
||||||
Then open `msgpack_vc8.vcproj` file and build it using batch build. It builds libraries on `lib/` folder and header files on `include/` folder.
|
|
||||||
|
|
||||||
You can build using command line as follows:
|
|
||||||
|
|
||||||
```
|
|
||||||
> vcbuild msgpack_vc2008.vcproj
|
|
||||||
> dir lib % DLL files are here
|
|
||||||
> dir include % header files are here
|
|
||||||
```
|
|
||||||
|
|
||||||
## Install from git repository
|
|
||||||
|
|
||||||
You need to install gcc (4.1.0 or higher), autotools.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ git clone git@github.com:msgpack/msgpack.git
|
|
||||||
$ cd msgpack/cpp
|
|
||||||
$ ./bootstrap
|
|
||||||
$ ./configure
|
$ ./configure
|
||||||
$ make
|
$ make
|
||||||
$ sudo make install
|
$ sudo make install
|
||||||
@@ -103,6 +100,7 @@ int main(void) {
|
|||||||
msgpack_object_print(stdout, obj); /*=> ["Hello", "MessagePack"] */
|
msgpack_object_print(stdout, obj); /*=> ["Hello", "MessagePack"] */
|
||||||
|
|
||||||
/* cleaning */
|
/* cleaning */
|
||||||
|
msgpack_unpacked_destroy(&msg);
|
||||||
msgpack_sbuffer_free(buffer);
|
msgpack_sbuffer_free(buffer);
|
||||||
msgpack_packer_free(pk);
|
msgpack_packer_free(pk);
|
||||||
}
|
}
|
||||||
@@ -142,6 +140,7 @@ int main(void) {
|
|||||||
/* prints the deserialized object. */
|
/* prints the deserialized object. */
|
||||||
msgpack_object obj = msg.data;
|
msgpack_object obj = msg.data;
|
||||||
msgpack_object_print(stdout, obj); /*=> ["Hello", "MessagePack"] */
|
msgpack_object_print(stdout, obj); /*=> ["Hello", "MessagePack"] */
|
||||||
|
msgpack_unpacked_destroy(&msg);
|
||||||
puts("");
|
puts("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,159 +0,0 @@
|
|||||||
# Implementation Status
|
|
||||||
|
|
||||||
The serialization library is production-ready.
|
|
||||||
|
|
||||||
Currently, RPC implementation is in testing phase. Requires newer kernel, not running on RHEL5/CentOS5.
|
|
||||||
|
|
||||||
# Install
|
|
||||||
|
|
||||||
Same as QuickStart for C Language.
|
|
||||||
|
|
||||||
# Serialization QuickStart for C+\+
|
|
||||||
|
|
||||||
## First program
|
|
||||||
|
|
||||||
Include `msgpack.hpp` header and link `msgpack` library to use MessagePack on your program.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
// serializes this object.
|
|
||||||
std::vector<std::string> vec;
|
|
||||||
vec.push_back("Hello");
|
|
||||||
vec.push_back("MessagePack");
|
|
||||||
|
|
||||||
// serialize it into simple buffer.
|
|
||||||
msgpack::sbuffer sbuf;
|
|
||||||
msgpack::pack(sbuf, vec);
|
|
||||||
|
|
||||||
// deserialize it.
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
|
||||||
|
|
||||||
// print the deserialized object.
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
std::cout << obj << std::endl; //=> ["Hello", "MessagePack"]
|
|
||||||
|
|
||||||
// convert it into statically typed object.
|
|
||||||
std::vector<std::string> rvec;
|
|
||||||
obj.convert(rvec);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Compile it as follows:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ g++ -Ipath_to_msgpack/include hello.cc -o hello
|
|
||||||
$ ./hello
|
|
||||||
["Hello", "MessagePack"]
|
|
||||||
```
|
|
||||||
|
|
||||||
## Streaming feature
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
// serializes multiple objects using msgpack::packer.
|
|
||||||
msgpack::sbuffer buffer;
|
|
||||||
|
|
||||||
msgpack::packer<msgpack::sbuffer> pk(&buffer);
|
|
||||||
pk.pack(std::string("Log message ... 1"));
|
|
||||||
pk.pack(std::string("Log message ... 2"));
|
|
||||||
pk.pack(std::string("Log message ... 3"));
|
|
||||||
|
|
||||||
// deserializes these objects using msgpack::unpacker.
|
|
||||||
msgpack::unpacker pac;
|
|
||||||
|
|
||||||
// feeds the buffer.
|
|
||||||
pac.reserve_buffer(buffer.size());
|
|
||||||
memcpy(pac.buffer(), buffer.data(), buffer.size());
|
|
||||||
pac.buffer_consumed(buffer.size());
|
|
||||||
|
|
||||||
// now starts streaming deserialization.
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
while(pac.next(oh)) {
|
|
||||||
std::cout << oh.get() << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// results:
|
|
||||||
// $ g++ -Ipath_to_msgpack/include stream.cc -o stream
|
|
||||||
// $ ./stream
|
|
||||||
// "Log message ... 1"
|
|
||||||
// "Log message ... 2"
|
|
||||||
// "Log message ... 3"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Streaming into an array or map
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
// serializes multiple objects into one message containing an array using msgpack::packer.
|
|
||||||
msgpack::sbuffer buffer;
|
|
||||||
|
|
||||||
msgpack::packer<msgpack::sbuffer> pk(&buffer);
|
|
||||||
pk.pack_array(3);
|
|
||||||
pk.pack(std::string("Log message ... 1"));
|
|
||||||
pk.pack(std::string("Log message ... 2"));
|
|
||||||
pk.pack(std::string("Log message ... 3"));
|
|
||||||
|
|
||||||
// serializes multiple objects into one message containing a map using msgpack::packer.
|
|
||||||
msgpack::sbuffer buffer2;
|
|
||||||
|
|
||||||
msgpack::packer<msgpack::sbuffer> pk2(&buffer2);
|
|
||||||
pk2.pack_map(2);
|
|
||||||
pk2.pack(std::string("x"));
|
|
||||||
pk2.pack(3);
|
|
||||||
pk2.pack(std::string("y"));
|
|
||||||
pk2.pack(3.4321);
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## User-defined classes
|
|
||||||
|
|
||||||
You can use serialize/deserializes user-defined classes using `MSGPACK_DEFINE` macro.
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
class myclass {
|
|
||||||
private:
|
|
||||||
std::string m_str;
|
|
||||||
std::vector<int> m_vec;
|
|
||||||
public:
|
|
||||||
MSGPACK_DEFINE(m_str, m_vec);
|
|
||||||
};
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
std::vector<myclass> vec;
|
|
||||||
// add some elements into vec...
|
|
||||||
|
|
||||||
// you can serialize myclass directly
|
|
||||||
msgpack::sbuffer sbuf;
|
|
||||||
msgpack::pack(sbuf, vec);
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(sbuf.data(), sbuf.size());
|
|
||||||
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
|
|
||||||
// you can convert object to myclass directly
|
|
||||||
std::vector<myclass> rvec;
|
|
||||||
obj.convert(rvec);
|
|
||||||
}
|
|
||||||
```
|
|
96
README.md
96
README.md
@@ -1,7 +1,8 @@
|
|||||||
`msgpack` for C/C++
|
`msgpack` for C
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Version 3.2.1 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
|
Version 5.0.0 [](https://github.com/msgpack/msgpack-c/actions) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/c_master)
|
||||||
|
[](https://codecov.io/gh/msgpack/msgpack-c/branch/c_master)
|
||||||
|
|
||||||
It's like JSON but smaller and faster.
|
It's like JSON but smaller and faster.
|
||||||
|
|
||||||
@@ -17,8 +18,6 @@ addition to the strings themselves.
|
|||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
|
|
||||||
In C:
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#include <msgpack.h>
|
#include <msgpack.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -60,66 +59,9 @@ int main(void)
|
|||||||
|
|
||||||
See [`QUICKSTART-C.md`](./QUICKSTART-C.md) for more details.
|
See [`QUICKSTART-C.md`](./QUICKSTART-C.md) for more details.
|
||||||
|
|
||||||
In C++:
|
|
||||||
|
|
||||||
```c++
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
msgpack::type::tuple<int, bool, std::string> src(1, true, "example");
|
|
||||||
|
|
||||||
// serialize the object into the buffer.
|
|
||||||
// any classes that implements write(const char*,size_t) can be a buffer.
|
|
||||||
std::stringstream buffer;
|
|
||||||
msgpack::pack(buffer, src);
|
|
||||||
|
|
||||||
// send the buffer ...
|
|
||||||
buffer.seekg(0);
|
|
||||||
|
|
||||||
// deserialize the buffer into msgpack::object instance.
|
|
||||||
std::string str(buffer.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(str.data(), str.size());
|
|
||||||
|
|
||||||
// deserialized object is valid during the msgpack::object_handle instance is alive.
|
|
||||||
msgpack::object deserialized = oh.get();
|
|
||||||
|
|
||||||
// msgpack::object supports ostream.
|
|
||||||
std::cout << deserialized << std::endl;
|
|
||||||
|
|
||||||
// convert msgpack::object instance into the original type.
|
|
||||||
// if the type is mismatched, it throws msgpack::type_error exception.
|
|
||||||
msgpack::type::tuple<int, bool, std::string> dst;
|
|
||||||
deserialized.convert(dst);
|
|
||||||
|
|
||||||
// or create the new instance
|
|
||||||
msgpack::type::tuple<int, bool, std::string> dst2 =
|
|
||||||
deserialized.as<msgpack::type::tuple<int, bool, std::string> >();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
See [`QUICKSTART-CPP.md`](./QUICKSTART-CPP.md) for more details.
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
### C++ Header Only Library
|
|
||||||
|
|
||||||
When you use msgpack on C++, you can just add
|
|
||||||
msgpack-c/include to your include path:
|
|
||||||
|
|
||||||
g++ -I msgpack-c/include your_source_file.cpp
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
### Building and Installing
|
### Building and Installing
|
||||||
|
|
||||||
#### Install from git repository
|
#### Install from git repository
|
||||||
@@ -131,25 +73,23 @@ You will need:
|
|||||||
- `gcc >= 4.1.0`
|
- `gcc >= 4.1.0`
|
||||||
- `cmake >= 2.8.0`
|
- `cmake >= 2.8.0`
|
||||||
|
|
||||||
C and C++03:
|
How to build:
|
||||||
|
|
||||||
$ git clone https://github.com/msgpack/msgpack-c.git
|
$ git clone https://github.com/msgpack/msgpack-c.git
|
||||||
$ cd msgpack-c
|
$ cd msgpack-c
|
||||||
|
$ git checkout c_master
|
||||||
$ cmake .
|
$ cmake .
|
||||||
$ make
|
$ make
|
||||||
$ sudo make install
|
$ sudo make install
|
||||||
|
|
||||||
If you want to setup C++11 or C++17 version of msgpack instead,
|
How to run tests:
|
||||||
execute the following commands:
|
|
||||||
|
|
||||||
$ git clone https://github.com/msgpack/msgpack-c.git
|
In order to run tests you must have the [GoogleTest](https://github.com/google/googletest) framework installed. If you do not currently have it, install it and re-run `cmake`.
|
||||||
$ cd msgpack-c
|
Then:
|
||||||
$ cmake -DMSGPACK_CXX[11|17]=ON .
|
|
||||||
$ sudo make install
|
|
||||||
|
|
||||||
`MSGPACK_CXX[11|17]` flags are not affected to installing files. Just switching test cases. All files are installed in every settings.
|
$ make test
|
||||||
|
|
||||||
When you use the C part of `msgpack-c`, you need to build and link the library. By default, both static/shared libraries are built. If you want to build only static library, set `BUILD_SHARED_LIBS=OFF` to cmake. If you want to build only shared library, set `BUILD_SHARED_L
|
When you use the C part of `msgpack-c`, you need to build and link the library. By default, both static/shared libraries are built. If you want to build only static library, set `BUILD_SHARED_LIBS=OFF` to cmake. If you want to build only shared library, set `BUILD_SHARED_LIBS=ON`.
|
||||||
|
|
||||||
#### GUI on Windows
|
#### GUI on Windows
|
||||||
|
|
||||||
@@ -161,20 +101,22 @@ or using GUI git client.
|
|||||||
|
|
||||||
e.g.) tortoise git https://code.google.com/p/tortoisegit/
|
e.g.) tortoise git https://code.google.com/p/tortoisegit/
|
||||||
|
|
||||||
1. Launch [cmake GUI client](http://www.cmake.org/cmake/resources/software.html).
|
1. Checkout to c_master branch
|
||||||
|
|
||||||
2. Set 'Where is the source code:' text box and 'Where to build
|
2. Launch [cmake GUI client](http://www.cmake.org/cmake/resources/software.html).
|
||||||
|
|
||||||
|
3. Set 'Where is the source code:' text box and 'Where to build
|
||||||
the binaries:' text box.
|
the binaries:' text box.
|
||||||
|
|
||||||
3. Click 'Configure' button.
|
4. Click 'Configure' button.
|
||||||
|
|
||||||
4. Choose your Visual Studio version.
|
5. Choose your Visual Studio version.
|
||||||
|
|
||||||
5. Click 'Generate' button.
|
6. Click 'Generate' button.
|
||||||
|
|
||||||
6. Open the created msgpack.sln on Visual Studio.
|
7. Open the created msgpack.sln on Visual Studio.
|
||||||
|
|
||||||
7. Build all.
|
8. Build all.
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
|
47
appveyor.yml
47
appveyor.yml
@@ -1,32 +1,17 @@
|
|||||||
version: 3.2.1.{build}
|
version: 5.0.0.{build}
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- c_master
|
||||||
|
|
||||||
image:
|
image:
|
||||||
- Visual Studio 2015
|
- Visual Studio 2015
|
||||||
environment:
|
environment:
|
||||||
global:
|
|
||||||
BOOST_ROOT: C:\Libraries\boost_1_67_0
|
|
||||||
matrix:
|
matrix:
|
||||||
- cpp11: -DMSGPACK_CXX11=OFF
|
- msvc: '"Visual Studio 10 2010"'
|
||||||
boost: -DMSGPACK_BOOST=OFF
|
- msvc: '"Visual Studio 11 2012"'
|
||||||
msvc: '"Visual Studio 10 2010"'
|
- msvc: '"Visual Studio 12 2013"'
|
||||||
- cpp11: -DMSGPACK_CXX11=OFF
|
- msvc: '"Visual Studio 14 2015"'
|
||||||
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:
|
build_script:
|
||||||
- appveyor DownloadFile https://github.com/google/googletest/archive/release-1.7.0.zip -FileName googletest-release-1.7.0.zip
|
- 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
|
- 7z x googletest-release-1.7.0.zip > NUL
|
||||||
@@ -37,10 +22,10 @@ build_script:
|
|||||||
- cmake --build . --config Release
|
- cmake --build . --config Release
|
||||||
- cd ..
|
- cd ..
|
||||||
- cd ..
|
- cd ..
|
||||||
- appveyor DownloadFile http://zlib.net/zlib-1.2.11.tar.gz -FileName zlib-1.2.11.tar.gz
|
- appveyor DownloadFile http://zlib.net/zlib-1.2.13.tar.gz -FileName zlib-1.2.13.tar.gz
|
||||||
- 7z x zlib-1.2.11.tar.gz > NUL
|
- 7z x zlib-1.2.13.tar.gz > NUL
|
||||||
- 7z x zlib-1.2.11.tar > NUL
|
- 7z x zlib-1.2.13.tar > NUL
|
||||||
- cd zlib-1.2.11
|
- cd zlib-1.2.13
|
||||||
- md build
|
- md build
|
||||||
- cd build
|
- cd build
|
||||||
- cmake -G %msvc% ..
|
- cmake -G %msvc% ..
|
||||||
@@ -50,9 +35,9 @@ build_script:
|
|||||||
- cd ..
|
- cd ..
|
||||||
- md build
|
- md build
|
||||||
- cd build
|
- cd build
|
||||||
- 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 -G %msvc% -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.13\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.13 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' ..
|
||||||
- cmake --build . --config Release
|
- cmake --build . --config Release -v
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- 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
|
- set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.13\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release
|
||||||
- ctest -V
|
- ctest -V
|
||||||
|
@@ -19,11 +19,13 @@ fi
|
|||||||
if [ "${ARCH}" == "32" ]
|
if [ "${ARCH}" == "32" ]
|
||||||
then
|
then
|
||||||
export BIT32="ON"
|
export BIT32="ON"
|
||||||
|
export ARCH_FLAG="-m32"
|
||||||
else
|
else
|
||||||
export BIT32="OFF"
|
export BIT32="OFF"
|
||||||
|
export ARCH_FLAG="-m64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_CXX17=${CXX17} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DBUILD_SHARED_LIBS=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} ..
|
cmake -DMSGPACK_32BIT=${BIT32} -DBUILD_SHARED_LIBS=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DCMAKE_CXX_FLAGS="${ARCH_FLAG} ${CXXFLAGS} ${SAN}" -DCMAKE_C_FLAGS="${CFLAGS} ${SAN}" ..
|
||||||
|
|
||||||
ret=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]
|
if [ $ret -ne 0 ]
|
||||||
@@ -47,6 +49,7 @@ then
|
|||||||
exit $ret
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
cmake -DMSGPACK_32BIT=${BIT32} -DBUILD_SHARED_LIBS=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DCMAKE_CXX_FLAGS="${ARCH_FLAG} ${CXXFLAGS}" -DCMAKE_C_FLAGS="${CFLAGS}" ..
|
||||||
make install DESTDIR=`pwd`/install
|
make install DESTDIR=`pwd`/install
|
||||||
|
|
||||||
ret=$?
|
ret=$?
|
||||||
|
@@ -1,49 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
mkdir -p build
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd build
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${ARCH}" == "32" ]
|
|
||||||
then
|
|
||||||
echo "64 bit support required for regressions"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmake -DMSGPACK_FUZZ_REGRESSION="ON" -DMSGPACK_CXX11="ON" -DMSGPACK_BOOST=${BOOST} -DMSGPACK_SAN=${MSGPACK_SAN} -v ..
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
make test
|
|
||||||
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -ne 0 ]
|
|
||||||
then
|
|
||||||
exit $ret
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
55
cmake/CodeCoverage.cmake
Normal file
55
cmake/CodeCoverage.cmake
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# Check prereqs
|
||||||
|
FIND_PROGRAM(GCOV_PATH gcov)
|
||||||
|
FIND_PROGRAM(LCOV_PATH lcov)
|
||||||
|
FIND_PROGRAM(GENHTML_PATH genhtml)
|
||||||
|
|
||||||
|
IF(NOT GCOV_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "gcov not found! Aborting...")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(NOT CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
# Clang version 3.0.0 and greater now supports gcov as well.
|
||||||
|
MESSAGE(STATUS "Compiler is not GNU gcc! Clang Version 3.0.0 and greater supports gcov as well, but older versions don't.")
|
||||||
|
IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES "Clang" AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
|
||||||
|
MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
SET(COVERAGE_FLAGS "-g -O0 --coverage")
|
||||||
|
|
||||||
|
FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname)
|
||||||
|
|
||||||
|
IF(NOT LCOV_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "lcov not found! Aborting...")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(NOT GENHTML_PATH)
|
||||||
|
MESSAGE(FATAL_ERROR "genhtml not found! Aborting...")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# Setup target
|
||||||
|
ADD_CUSTOM_TARGET(${_targetname}
|
||||||
|
|
||||||
|
# Cleanup lcov
|
||||||
|
${LCOV_PATH} --directory . --zerocounters
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
COMMAND ${_testrunner} ${ARGV3}
|
||||||
|
|
||||||
|
# Capturing lcov counters and generating report
|
||||||
|
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${_outputname}.info --base-directory ${CMAKE_SOURCE_DIR} --no-external --quiet
|
||||||
|
COMMAND ${LCOV_PATH} --remove ${_outputname}.info '*/test/*' '*/fuzz/*' --output-file ${_outputname}.info.cleaned --quiet
|
||||||
|
COMMAND ${GENHTML_PATH} -o ${_outputname} ${_outputname}.info.cleaned --prefix ${CMAKE_SOURCE_DIR}
|
||||||
|
# COMMAND ${CMAKE_COMMAND} -E remove ${_outputname}.info ${_outputname}.info.cleaned
|
||||||
|
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Show info where to find the report
|
||||||
|
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
|
||||||
|
COMMAND ;
|
||||||
|
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report."
|
||||||
|
)
|
||||||
|
|
||||||
|
ENDFUNCTION()
|
@@ -8,6 +8,13 @@
|
|||||||
* http://www.boost.org/LICENSE_1_0.txt)
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef MSGPACK_ENDIAN_BIG_BYTE
|
||||||
|
#define MSGPACK_ENDIAN_BIG_BYTE @MSGPACK_ENDIAN_BIG_BYTE@
|
||||||
|
#endif
|
||||||
|
#ifndef MSGPACK_ENDIAN_LITTLE_BYTE
|
||||||
|
#define MSGPACK_ENDIAN_LITTLE_BYTE @MSGPACK_ENDIAN_LITTLE_BYTE@
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MSGPACK_ENDIAN_LITTLE_BYTE
|
#if MSGPACK_ENDIAN_LITTLE_BYTE
|
||||||
#define TAKE8_8(d) ((uint8_t*)&d)[0]
|
#define TAKE8_8(d) ((uint8_t*)&d)[0]
|
||||||
#define TAKE8_16(d) ((uint8_t*)&d)[0]
|
#define TAKE8_16(d) ((uint8_t*)&d)[0]
|
@@ -13,6 +13,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifndef MSGPACK_ENDIAN_BIG_BYTE
|
||||||
|
#define MSGPACK_ENDIAN_BIG_BYTE @MSGPACK_ENDIAN_BIG_BYTE@
|
||||||
|
#endif
|
||||||
|
#ifndef MSGPACK_ENDIAN_LITTLE_BYTE
|
||||||
|
#define MSGPACK_ENDIAN_LITTLE_BYTE @MSGPACK_ENDIAN_LITTLE_BYTE@
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
||||||
# define snprintf(buf, len, format,...) _snprintf_s(buf, len, _TRUNCATE, format, __VA_ARGS__)
|
# define snprintf(buf, len, format,...) _snprintf_s(buf, len, _TRUNCATE, format, __VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
@@ -26,6 +33,13 @@
|
|||||||
typedef unsigned __int32 uint32_t;
|
typedef unsigned __int32 uint32_t;
|
||||||
typedef signed __int64 int64_t;
|
typedef signed __int64 int64_t;
|
||||||
typedef unsigned __int64 uint64_t;
|
typedef unsigned __int64 uint64_t;
|
||||||
|
# if defined(_WIN64)
|
||||||
|
typedef signed __int64 intptr_t;
|
||||||
|
typedef unsigned __int64 uintptr_t;
|
||||||
|
# else
|
||||||
|
typedef signed __int32 intptr_t;
|
||||||
|
typedef unsigned __int32 uintptr_t;
|
||||||
|
# endif
|
||||||
#elif defined(_MSC_VER) // && _MSC_VER >= 1600
|
#elif defined(_MSC_VER) // && _MSC_VER >= 1600
|
||||||
# include <stdint.h>
|
# include <stdint.h>
|
||||||
#else
|
#else
|
36
codecov.yml
Normal file
36
codecov.yml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
codecov:
|
||||||
|
notify:
|
||||||
|
require_ci_to_pass: yes
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
precision: 2
|
||||||
|
round: down
|
||||||
|
range: "70...100"
|
||||||
|
|
||||||
|
status:
|
||||||
|
project: yes
|
||||||
|
patch: yes
|
||||||
|
changes: no
|
||||||
|
|
||||||
|
parsers:
|
||||||
|
gcov:
|
||||||
|
branch_detection:
|
||||||
|
conditional: yes
|
||||||
|
loop: yes
|
||||||
|
method: no
|
||||||
|
macro: no
|
||||||
|
|
||||||
|
comment:
|
||||||
|
layout: "header, diff"
|
||||||
|
behavior: default
|
||||||
|
require_changes: no
|
||||||
|
|
||||||
|
ignore:
|
||||||
|
- "test"
|
||||||
|
- "fuzz"
|
||||||
|
- "erb"
|
||||||
|
- "ci"
|
||||||
|
- "cmake"
|
||||||
|
- "examle"
|
||||||
|
- "external"
|
||||||
|
- "usr"
|
@@ -1,110 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_HPP
|
|
||||||
#define MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp"
|
|
||||||
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
<% GENERATION_LIMIT = 31 %>
|
|
||||||
template <>
|
|
||||||
struct define_array<> {
|
|
||||||
typedef define_array<> value_type;
|
|
||||||
typedef tuple<> tuple_type;
|
|
||||||
template <typename Packer>
|
|
||||||
void msgpack_pack(Packer& pk) const
|
|
||||||
{
|
|
||||||
pk.pack_array(0);
|
|
||||||
}
|
|
||||||
void msgpack_unpack(msgpack::object const& o)
|
|
||||||
{
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
}
|
|
||||||
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
|
||||||
{
|
|
||||||
o->type = msgpack::type::ARRAY;
|
|
||||||
o->via.array.ptr = MSGPACK_NULLPTR;
|
|
||||||
o->via.array.size = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
|
||||||
typedef define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type;
|
|
||||||
typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> tuple_type;
|
|
||||||
define_array(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) :
|
|
||||||
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
|
||||||
template <typename Packer>
|
|
||||||
void msgpack_pack(Packer& pk) const
|
|
||||||
{
|
|
||||||
pk.pack_array(<%=i+1%>);
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
pk.pack(a<%=j%>);<%}%>
|
|
||||||
}
|
|
||||||
void msgpack_unpack(msgpack::object const& o)
|
|
||||||
{
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
const size_t size = o.via.array.size;
|
|
||||||
if(size > 0) {
|
|
||||||
msgpack::object *ptr = o.via.array.ptr;
|
|
||||||
switch(size) {
|
|
||||||
default:<%(i).downto(0) {|j|%>
|
|
||||||
case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>);
|
|
||||||
// fallthrough
|
|
||||||
<%}%>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
|
||||||
{
|
|
||||||
o->type = msgpack::type::ARRAY;
|
|
||||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
|
||||||
o->via.array.size = <%=i+1%>;
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%>
|
|
||||||
}
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
A<%=j%>& a<%=j%>;<%}%>
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
inline define_array<> make_define_array()
|
|
||||||
{
|
|
||||||
return 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%><%}%>)
|
|
||||||
{
|
|
||||||
return define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
|
||||||
}
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP
|
|
@@ -1,42 +0,0 @@
|
|||||||
//
|
|
||||||
// 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,120 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_HPP
|
|
||||||
#define MSGPACK_V1_CPP03_DEFINE_MAP_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp"
|
|
||||||
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
|
||||||
#include "msgpack/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
<% GENERATION_LIMIT = 31 %>
|
|
||||||
template <>
|
|
||||||
struct define_map<> {
|
|
||||||
template <typename Packer>
|
|
||||||
void msgpack_pack(Packer& pk) const
|
|
||||||
{
|
|
||||||
pk.pack_map(0);
|
|
||||||
}
|
|
||||||
void msgpack_unpack(msgpack::object const& o) const
|
|
||||||
{
|
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
}
|
|
||||||
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
|
||||||
{
|
|
||||||
o->type = msgpack::type::MAP;
|
|
||||||
o->via.map.ptr = MSGPACK_NULLPTR;
|
|
||||||
o->via.map.size = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%1.step(GENERATION_LIMIT+1,2) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
|
||||||
define_map(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) :
|
|
||||||
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
|
||||||
template <typename Packer>
|
|
||||||
void msgpack_pack(Packer& pk) const
|
|
||||||
{
|
|
||||||
pk.pack_map(<%=(i+1)/2%>);
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
pk.pack(a<%=j%>);<%}%>
|
|
||||||
}
|
|
||||||
void msgpack_unpack(msgpack::object const& o) const
|
|
||||||
{
|
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
std::map<std::string, msgpack::object const*> kvmap;
|
|
||||||
for (uint32_t i = 0; i < o.via.map.size; ++i) {
|
|
||||||
if (o.via.map.ptr[i].key.type != msgpack::type::STR) { throw msgpack::type_error(); }
|
|
||||||
kvmap.insert(
|
|
||||||
std::map<std::string, msgpack::object const*>::value_type(
|
|
||||||
std::string(
|
|
||||||
o.via.map.ptr[i].key.via.str.ptr,
|
|
||||||
o.via.map.ptr[i].key.via.str.size),
|
|
||||||
&o.via.map.ptr[i].val
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
<%0.step(i,2) {|j|%>
|
|
||||||
{
|
|
||||||
std::map<std::string, msgpack::object const*>::const_iterator it = kvmap.find(a<%=j%>);
|
|
||||||
if (it != kvmap.end()) {
|
|
||||||
it->second->convert(a<%=j+1%>);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
<%}%>
|
|
||||||
}
|
|
||||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
|
||||||
{
|
|
||||||
o->type = msgpack::type::MAP;
|
|
||||||
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv)));
|
|
||||||
o->via.map.size = <%=(i+1)/2%>;
|
|
||||||
<%0.step(i,2) {|j|%>
|
|
||||||
o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z);
|
|
||||||
o->via.map.ptr[<%=j/2%>].val = msgpack::object(a<%=j+1%>, z);
|
|
||||||
<%}%>
|
|
||||||
}
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
A<%=j%>& a<%=j%>;<%}%>
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
inline define_map<> make_define_map()
|
|
||||||
{
|
|
||||||
return define_map<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
inline define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>)
|
|
||||||
{
|
|
||||||
return define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
|
||||||
}
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_V1_CPP03_DEFINE_MAP_HPP
|
|
@@ -1,42 +0,0 @@
|
|||||||
//
|
|
||||||
// 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,227 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_HPP
|
|
||||||
#define MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
// FIXME operator==
|
|
||||||
// FIXME operator!=
|
|
||||||
<% GENERATION_LIMIT = 31 %>
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct tuple_type {
|
|
||||||
typedef T type;
|
|
||||||
typedef T value_type;
|
|
||||||
typedef T& reference;
|
|
||||||
typedef const T& const_reference;
|
|
||||||
typedef const T& transparent_reference;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct tuple_type<T&> {
|
|
||||||
typedef T type;
|
|
||||||
typedef T& value_type;
|
|
||||||
typedef T& reference;
|
|
||||||
typedef const T& const_reference;
|
|
||||||
typedef T& transparent_reference;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct tuple_type<const T&> {
|
|
||||||
typedef T type;
|
|
||||||
typedef T& value_type;
|
|
||||||
typedef T& reference;
|
|
||||||
typedef const T& const_reference;
|
|
||||||
typedef const T& transparent_reference;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
template <typename A0<%1.upto(i) {|k|%>, typename A<%=k%><%}%>>
|
|
||||||
struct tuple_element<tuple<A0<%1.upto(i) {|k|%>, A<%=k%><%}%>>, <%=j%>> : tuple_type<A<%=j%>> {
|
|
||||||
tuple_element(tuple<A0<%1.upto(i) {|k|%>, A<%=k%> <%}%>>& x) : m_x(x.a<%=j%>) {}
|
|
||||||
typename tuple_type<A<%=j%>>::reference get() { return m_x; }
|
|
||||||
typename tuple_type<A<%=j%>>::const_reference get() const { return m_x; }
|
|
||||||
private:
|
|
||||||
typename tuple_type<A<%=j%>>::reference m_x;
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
template <typename A0<%1.upto(i) {|k|%>, typename A<%=k%><%}%>>
|
|
||||||
struct const_tuple_element<tuple<A0<%1.upto(i) {|k|%>, A<%=k%><%}%>>, <%=j%>> : tuple_type<A<%=j%>> {
|
|
||||||
const_tuple_element(const tuple<A0<%1.upto(i) {|k|%>, A<%=k%><%}%>>& x) : m_x(x.a<%=j%>) {}
|
|
||||||
typename tuple_type<A<%=j%>>::const_reference get() const { return m_x; }
|
|
||||||
private:
|
|
||||||
typename tuple_type<A<%=j%>>::const_reference m_x;
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct tuple<> {
|
|
||||||
tuple() {}
|
|
||||||
tuple(msgpack::object const& o) { o.convert(*this); }
|
|
||||||
typedef tuple<> value_type;
|
|
||||||
std::size_t size() const { return 0; }
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
|
||||||
typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type;
|
|
||||||
std::size_t size() const { return <%=i+1%>; }
|
|
||||||
tuple() {}
|
|
||||||
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%>)<%}%> {}
|
|
||||||
tuple(msgpack::object const& o) { o.convert(*this); }
|
|
||||||
template <int N> typename tuple_element<value_type, N>::reference get()
|
|
||||||
{ return tuple_element<value_type, N>(*this).get(); }
|
|
||||||
template <int N> typename const_tuple_element<value_type, N>::const_reference get() const
|
|
||||||
{ return const_tuple_element<value_type, N>(*this).get(); }
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
A<%=j%> a<%=j%>;<%}%>
|
|
||||||
};
|
|
||||||
|
|
||||||
template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
inline 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)
|
|
||||||
{ return t.template get<N>(); }
|
|
||||||
template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
inline 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)
|
|
||||||
{ return t.template get<N>(); }
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
inline tuple<> make_tuple()
|
|
||||||
{
|
|
||||||
return 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(A0 const& a0<%1.upto(i) {|j|%>, A<%=j%> const& a<%=j%><%}%>)
|
|
||||||
{
|
|
||||||
return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
|
||||||
}
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct convert<type::tuple<> > {
|
|
||||||
msgpack::object const& operator()(
|
|
||||||
msgpack::object const& o,
|
|
||||||
type::tuple<>&) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct convert<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
|
||||||
msgpack::object const& operator()(
|
|
||||||
msgpack::object const& o,
|
|
||||||
type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
// In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct pack<type::tuple<> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const type::tuple<>&) const {
|
|
||||||
o.pack_array(0);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct pack<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator()(
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
|
||||||
o.pack_array(<%=i+1%>);
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
o.pack(v.template get<<%=j%>>());<%}%>
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<type::tuple<> > {
|
|
||||||
void operator()(
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const type::tuple<>&) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
o.via.array.ptr = MSGPACK_NULLPTR;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
|
||||||
void operator()(
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
|
||||||
o.via.array.size = <%=i+1%>;
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%>
|
|
||||||
}
|
|
||||||
};
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP
|
|
@@ -1,69 +0,0 @@
|
|||||||
//
|
|
||||||
// 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(A0 const& a0<%1.upto(i) {|j|%>, A<%=j%> const& a<%=j%><%}%>);
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_DECL_HPP
|
|
@@ -1,334 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_HPP
|
|
||||||
#define MSGPACK_V1_CPP03_ZONE_HPP
|
|
||||||
|
|
||||||
#include "msgpack/zone_decl.hpp"
|
|
||||||
|
|
||||||
<% GENERATION_LIMIT = 15 %>
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
class zone {
|
|
||||||
struct finalizer {
|
|
||||||
finalizer(void (*func)(void*), void* data):m_func(func), m_data(data) {}
|
|
||||||
void operator()() { m_func(m_data); }
|
|
||||||
void (*m_func)(void*);
|
|
||||||
void* m_data;
|
|
||||||
};
|
|
||||||
struct finalizer_array {
|
|
||||||
finalizer_array():m_tail(MSGPACK_NULLPTR), m_end(MSGPACK_NULLPTR), m_array(MSGPACK_NULLPTR) {}
|
|
||||||
void call() {
|
|
||||||
finalizer* fin = m_tail;
|
|
||||||
for(; fin != m_array; --fin) (*(fin-1))();
|
|
||||||
}
|
|
||||||
~finalizer_array() {
|
|
||||||
call();
|
|
||||||
::free(m_array);
|
|
||||||
}
|
|
||||||
void clear() {
|
|
||||||
call();
|
|
||||||
m_tail = m_array;
|
|
||||||
}
|
|
||||||
void push(void (*func)(void* data), void* data)
|
|
||||||
{
|
|
||||||
finalizer* fin = m_tail;
|
|
||||||
|
|
||||||
if(fin == m_end) {
|
|
||||||
push_expand(func, data);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fin->m_func = func;
|
|
||||||
fin->m_data = data;
|
|
||||||
|
|
||||||
++m_tail;
|
|
||||||
}
|
|
||||||
void push_expand(void (*func)(void*), void* data) {
|
|
||||||
const size_t nused = static_cast<size_t>(m_end - m_array);
|
|
||||||
size_t nnext;
|
|
||||||
if(nused == 0) {
|
|
||||||
nnext = (sizeof(finalizer) < 72/2) ?
|
|
||||||
72 / sizeof(finalizer) : 8;
|
|
||||||
} else {
|
|
||||||
nnext = nused * 2;
|
|
||||||
}
|
|
||||||
finalizer* tmp =
|
|
||||||
static_cast<finalizer*>(::realloc(m_array, sizeof(finalizer) * nnext));
|
|
||||||
if(!tmp) {
|
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
m_array = tmp;
|
|
||||||
m_end = tmp + nnext;
|
|
||||||
m_tail = tmp + nused;
|
|
||||||
new (m_tail) finalizer(func, data);
|
|
||||||
|
|
||||||
++m_tail;
|
|
||||||
}
|
|
||||||
finalizer* m_tail;
|
|
||||||
finalizer* m_end;
|
|
||||||
finalizer* m_array;
|
|
||||||
};
|
|
||||||
struct chunk {
|
|
||||||
chunk* m_next;
|
|
||||||
};
|
|
||||||
struct chunk_list {
|
|
||||||
chunk_list(size_t chunk_size)
|
|
||||||
{
|
|
||||||
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + chunk_size));
|
|
||||||
if(!c) {
|
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_head = c;
|
|
||||||
m_free = chunk_size;
|
|
||||||
m_ptr = reinterpret_cast<char*>(c) + sizeof(chunk);
|
|
||||||
c->m_next = MSGPACK_NULLPTR;
|
|
||||||
}
|
|
||||||
~chunk_list()
|
|
||||||
{
|
|
||||||
chunk* c = m_head;
|
|
||||||
while(c) {
|
|
||||||
chunk* n = c->m_next;
|
|
||||||
::free(c);
|
|
||||||
c = n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void clear(size_t chunk_size)
|
|
||||||
{
|
|
||||||
chunk* c = m_head;
|
|
||||||
while(true) {
|
|
||||||
chunk* n = c->m_next;
|
|
||||||
if(n) {
|
|
||||||
::free(c);
|
|
||||||
c = n;
|
|
||||||
} else {
|
|
||||||
m_head = c;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_head->m_next = MSGPACK_NULLPTR;
|
|
||||||
m_free = chunk_size;
|
|
||||||
m_ptr = reinterpret_cast<char*>(m_head) + sizeof(chunk);
|
|
||||||
}
|
|
||||||
size_t m_free;
|
|
||||||
char* m_ptr;
|
|
||||||
chunk* m_head;
|
|
||||||
};
|
|
||||||
size_t m_chunk_size;
|
|
||||||
chunk_list m_chunk_list;
|
|
||||||
finalizer_array m_finalizer_array;
|
|
||||||
|
|
||||||
public:
|
|
||||||
zone(size_t chunk_size = MSGPACK_ZONE_CHUNK_SIZE) /* throw() */;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void* allocate_align(size_t size, size_t align = MSGPACK_ZONE_ALIGN);
|
|
||||||
void* allocate_no_align(size_t size);
|
|
||||||
|
|
||||||
void push_finalizer(void (*func)(void*), void* data);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void push_finalizer(msgpack::unique_ptr<T> obj);
|
|
||||||
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
void swap(zone& o);
|
|
||||||
static void* operator new(std::size_t size)
|
|
||||||
{
|
|
||||||
void* p = ::malloc(size);
|
|
||||||
if (!p) throw std::bad_alloc();
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
static void operator delete(void *p) /* throw() */
|
|
||||||
{
|
|
||||||
::free(p);
|
|
||||||
}
|
|
||||||
static void* operator new(std::size_t size, void* place) /* throw() */
|
|
||||||
{
|
|
||||||
return ::operator new(size, place);
|
|
||||||
}
|
|
||||||
static void operator delete(void* p, void* place) /* throw() */
|
|
||||||
{
|
|
||||||
::operator delete(p, place);
|
|
||||||
}
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
T* allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>);
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
private:
|
|
||||||
void undo_allocate(size_t size);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
static void object_destruct(void* obj);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
static void object_delete(void* obj);
|
|
||||||
|
|
||||||
static char* get_aligned(char* ptr, size_t align);
|
|
||||||
|
|
||||||
char* allocate_expand(size_t size);
|
|
||||||
private:
|
|
||||||
zone(const zone&);
|
|
||||||
zone& operator=(const zone&);
|
|
||||||
};
|
|
||||||
|
|
||||||
inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_chunk_list(m_chunk_size)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline char* zone::get_aligned(char* ptr, size_t align)
|
|
||||||
{
|
|
||||||
return
|
|
||||||
reinterpret_cast<char*>(
|
|
||||||
reinterpret_cast<size_t>(
|
|
||||||
(ptr + (align - 1))) / align * align);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void* zone::allocate_align(size_t size, size_t align)
|
|
||||||
{
|
|
||||||
char* aligned = get_aligned(m_chunk_list.m_ptr, align);
|
|
||||||
size_t adjusted_size = size + static_cast<size_t>(aligned - m_chunk_list.m_ptr);
|
|
||||||
if (m_chunk_list.m_free < adjusted_size) {
|
|
||||||
size_t enough_size = size + align - 1;
|
|
||||||
char* ptr = allocate_expand(enough_size);
|
|
||||||
aligned = get_aligned(ptr, align);
|
|
||||||
adjusted_size = size + static_cast<size_t>(aligned - m_chunk_list.m_ptr);
|
|
||||||
}
|
|
||||||
m_chunk_list.m_free -= adjusted_size;
|
|
||||||
m_chunk_list.m_ptr += adjusted_size;
|
|
||||||
return aligned;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void* zone::allocate_no_align(size_t size)
|
|
||||||
{
|
|
||||||
char* ptr = m_chunk_list.m_ptr;
|
|
||||||
if(m_chunk_list.m_free < size) {
|
|
||||||
ptr = allocate_expand(size);
|
|
||||||
}
|
|
||||||
m_chunk_list.m_free -= size;
|
|
||||||
m_chunk_list.m_ptr += size;
|
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline char* zone::allocate_expand(size_t size)
|
|
||||||
{
|
|
||||||
chunk_list* const cl = &m_chunk_list;
|
|
||||||
|
|
||||||
size_t sz = m_chunk_size;
|
|
||||||
|
|
||||||
while(sz < size) {
|
|
||||||
size_t tmp_sz = sz * 2;
|
|
||||||
if (tmp_sz <= sz) {
|
|
||||||
sz = size;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sz = tmp_sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + sz));
|
|
||||||
if (!c) throw std::bad_alloc();
|
|
||||||
|
|
||||||
char* ptr = reinterpret_cast<char*>(c) + sizeof(chunk);
|
|
||||||
|
|
||||||
c->m_next = cl->m_head;
|
|
||||||
cl->m_head = c;
|
|
||||||
cl->m_free = sz;
|
|
||||||
cl->m_ptr = ptr;
|
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void zone::push_finalizer(void (*func)(void*), void* data)
|
|
||||||
{
|
|
||||||
m_finalizer_array.push(func, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline void zone::push_finalizer(msgpack::unique_ptr<T> obj)
|
|
||||||
{
|
|
||||||
m_finalizer_array.push(&zone::object_delete<T>, obj.release());
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void zone::clear()
|
|
||||||
{
|
|
||||||
m_finalizer_array.clear();
|
|
||||||
m_chunk_list.clear(m_chunk_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void zone::swap(zone& o)
|
|
||||||
{
|
|
||||||
using std::swap;
|
|
||||||
swap(m_chunk_size, o.m_chunk_size);
|
|
||||||
swap(m_chunk_list, o.m_chunk_list);
|
|
||||||
swap(m_finalizer_array, o.m_finalizer_array);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void zone::object_destruct(void* obj)
|
|
||||||
{
|
|
||||||
static_cast<T*>(obj)->~T();
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void zone::object_delete(void* obj)
|
|
||||||
{
|
|
||||||
delete static_cast<T*>(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void zone::undo_allocate(size_t size)
|
|
||||||
{
|
|
||||||
m_chunk_list.m_ptr -= size;
|
|
||||||
m_chunk_list.m_free += size;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline std::size_t aligned_size(
|
|
||||||
std::size_t size,
|
|
||||||
std::size_t align) {
|
|
||||||
return (size + align - 1) / align * align;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>)
|
|
||||||
{
|
|
||||||
void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T));
|
|
||||||
try {
|
|
||||||
m_finalizer_array.push(&zone::object_destruct<T>, x);
|
|
||||||
} catch (...) {
|
|
||||||
undo_allocate(sizeof(T));
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return new (x) T(<%=(1..i).map{|j|"a#{j}"}.join(', ')%>);
|
|
||||||
} catch (...) {
|
|
||||||
--m_finalizer_array.m_tail;
|
|
||||||
undo_allocate(sizeof(T));
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
<%}%>
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
/// @cond
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_V1_CPP03_ZONE_HPP
|
|
@@ -1,54 +0,0 @@
|
|||||||
//
|
|
||||||
// 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
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof(type)
|
|
||||||
#else
|
|
||||||
#define MSGPACK_ZONE_ALIGNOF(type) __alignof__(type)
|
|
||||||
#endif
|
|
||||||
// For a compiler that doesn't support __alignof__:
|
|
||||||
// #define MSGPACK_ZONE_ALIGNOF(type) MSGPACK_ZONE_ALIGN
|
|
||||||
|
|
||||||
<% GENERATION_LIMIT = 15 %>
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
/// @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
|
|
@@ -1,5 +1,44 @@
|
|||||||
ADD_SUBDIRECTORY (c)
|
FIND_PACKAGE (cJSON)
|
||||||
ADD_SUBDIRECTORY (cpp03)
|
|
||||||
ADD_SUBDIRECTORY (cpp11)
|
LIST (APPEND exec_PROGRAMS
|
||||||
ADD_SUBDIRECTORY (boost)
|
boundary.c
|
||||||
ADD_SUBDIRECTORY (x3)
|
lib_buffer_unpack.c
|
||||||
|
simple_c.c
|
||||||
|
speed_test_uint32_array.c
|
||||||
|
speed_test_uint64_array.c
|
||||||
|
user_buffer_unpack.c
|
||||||
|
)
|
||||||
|
IF (cJSON_FOUND)
|
||||||
|
LIST (APPEND exec_PROGRAMS jsonconv.c)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
msgpackc
|
||||||
|
)
|
||||||
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_C_FLAGS MATCHES "/W[0-4]")
|
||||||
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
ENDFOREACH ()
|
||||||
|
|
||||||
|
IF (cJSON_FOUND)
|
||||||
|
TARGET_LINK_LIBRARIES (jsonconv ${CJSON_LIBRARIES})
|
||||||
|
TARGET_INCLUDE_DIRECTORIES(jsonconv PRIVATE ${CJSON_INCLUDE_DIRS})
|
||||||
|
ENDIF ()
|
||||||
|
@@ -1,56 +0,0 @@
|
|||||||
IF (MSGPACK_BOOST)
|
|
||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
msgpack_variant_capitalize.cpp
|
|
||||||
msgpack_variant_mapbased.cpp
|
|
||||||
)
|
|
||||||
IF (MSGPACK_CXX11 OR MSGPACK_CXX17)
|
|
||||||
FIND_PACKAGE (Threads REQUIRED)
|
|
||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
asio_send_recv.cpp
|
|
||||||
)
|
|
||||||
IF (ZLIB_FOUND)
|
|
||||||
INCLUDE_DIRECTORIES (
|
|
||||||
${ZLIB_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
asio_send_recv_zlib.cpp
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
FOREACH (source_file ${exec_PROGRAMS})
|
|
||||||
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_SYSTEM_LIBRARY}
|
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
|
||||||
)
|
|
||||||
IF (ZLIB_FOUND)
|
|
||||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
|
||||||
${ZLIB_LIBRARIES}
|
|
||||||
)
|
|
||||||
ENDIF()
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra")
|
|
||||||
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 ()
|
|
@@ -1,104 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2017 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <boost/asio.hpp>
|
|
||||||
#include <boost/lexical_cast.hpp>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
boost::asio::io_service ios;
|
|
||||||
std::uint16_t const port = 12345;
|
|
||||||
|
|
||||||
// Server
|
|
||||||
std::size_t const window_size = 10;
|
|
||||||
boost::asio::ip::tcp::acceptor ac(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
|
|
||||||
boost::asio::ip::tcp::socket ss(ios);
|
|
||||||
std::function<void()> do_accept;
|
|
||||||
std::function<void()> do_async_read_some;
|
|
||||||
|
|
||||||
msgpack::unpacker unp;
|
|
||||||
|
|
||||||
do_accept = [&] {
|
|
||||||
ac.async_accept(
|
|
||||||
ss,
|
|
||||||
[&]
|
|
||||||
(boost::system::error_code const& e) {
|
|
||||||
if (e) {
|
|
||||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
do_async_read_some = [&] {
|
|
||||||
unp.reserve_buffer(window_size);
|
|
||||||
ss.async_read_some(
|
|
||||||
boost::asio::buffer(unp.buffer(), window_size),
|
|
||||||
[&](boost::system::error_code const& e, std::size_t bytes_transferred) {
|
|
||||||
if (e) {
|
|
||||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::cout << bytes_transferred << " bytes read." << std::endl;
|
|
||||||
unp.buffer_consumed(bytes_transferred);
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
while (unp.next(oh)) {
|
|
||||||
std::cout << oh.get() << std::endl;
|
|
||||||
// In order to finish the program,
|
|
||||||
// return if one complete msgpack is processed.
|
|
||||||
// In actual server, don't return here.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
do_async_read_some();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
do_async_read_some();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
do_accept();
|
|
||||||
|
|
||||||
// Client
|
|
||||||
auto host = "localhost";
|
|
||||||
boost::asio::ip::tcp::resolver r(ios);
|
|
||||||
|
|
||||||
#if BOOST_VERSION < 106600
|
|
||||||
boost::asio::ip::tcp::resolver::query q(host, boost::lexical_cast<std::string>(port));
|
|
||||||
auto it = r.resolve(q);
|
|
||||||
boost::asio::ip::tcp::resolver::iterator end;
|
|
||||||
#else // BOOST_VERSION < 106600
|
|
||||||
auto eps = r.resolve(host, boost::lexical_cast<std::string>(port));
|
|
||||||
auto it = eps.begin();
|
|
||||||
auto end = eps.end();
|
|
||||||
#endif // BOOST_VERSION < 106600
|
|
||||||
|
|
||||||
boost::asio::ip::tcp::socket cs(ios);
|
|
||||||
boost::asio::async_connect(
|
|
||||||
cs,
|
|
||||||
it,
|
|
||||||
end,
|
|
||||||
[&]
|
|
||||||
(boost::system::error_code const& e, boost::asio::ip::tcp::resolver::iterator) {
|
|
||||||
if (e) {
|
|
||||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::cout << __LINE__ << ":client connected" << std::endl;
|
|
||||||
msgpack::sbuffer sb;
|
|
||||||
msgpack::pack(sb, std::make_tuple(42, false, "hello world", 12.3456));
|
|
||||||
write(cs, boost::asio::buffer(sb.data(), sb.size()));
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Start
|
|
||||||
ios.run();
|
|
||||||
}
|
|
@@ -1,176 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2017 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <boost/asio.hpp>
|
|
||||||
#include <boost/lexical_cast.hpp>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <msgpack/zbuffer.hpp>
|
|
||||||
|
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
|
||||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
std::cout
|
|
||||||
<< std::setw(2)
|
|
||||||
<< std::hex
|
|
||||||
<< std::setfill('0')
|
|
||||||
<< (static_cast<int>(*it) & 0xff)
|
|
||||||
<< ' ';
|
|
||||||
}
|
|
||||||
std::cout << std::dec << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
boost::asio::io_service ios;
|
|
||||||
std::uint16_t const port = 12345;
|
|
||||||
|
|
||||||
int num_of_zlib_data = 2;
|
|
||||||
int idx_zlib_data = 0;
|
|
||||||
|
|
||||||
// Server
|
|
||||||
std::size_t const window_size = 11;
|
|
||||||
boost::asio::ip::tcp::acceptor ac(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
|
|
||||||
boost::asio::ip::tcp::socket ss(ios);
|
|
||||||
std::function<void()> do_accept;
|
|
||||||
std::function<void()> do_async_read_some;
|
|
||||||
|
|
||||||
// zlib for decompress
|
|
||||||
z_stream strm;
|
|
||||||
auto zlib_init = [&] {
|
|
||||||
strm.zalloc = Z_NULL;
|
|
||||||
strm.zfree = Z_NULL;
|
|
||||||
strm.opaque = Z_NULL;
|
|
||||||
strm.next_in = Z_NULL;
|
|
||||||
{
|
|
||||||
int zret = inflateInit(&strm);
|
|
||||||
if (zret != Z_OK) {
|
|
||||||
std::cout << "Zlib inflateInit() error = " << zret << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
zlib_init();
|
|
||||||
std::vector<char> buf(4); // buf size
|
|
||||||
|
|
||||||
msgpack::unpacker unp;
|
|
||||||
|
|
||||||
do_accept = [&] {
|
|
||||||
ac.async_accept(
|
|
||||||
ss,
|
|
||||||
[&]
|
|
||||||
(boost::system::error_code const& e) {
|
|
||||||
if (e) {
|
|
||||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
do_async_read_some = [&] {
|
|
||||||
ss.async_read_some(
|
|
||||||
boost::asio::buffer(buf),
|
|
||||||
[&](boost::system::error_code const& e, std::size_t bytes_transferred) {
|
|
||||||
if (e) {
|
|
||||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::cout << bytes_transferred << " bytes read." << std::endl;
|
|
||||||
print(std::string(std::string(&buf[0], buf.size())));
|
|
||||||
strm.avail_in = bytes_transferred;
|
|
||||||
do {
|
|
||||||
strm.next_in = reinterpret_cast<unsigned char*>(&buf[0]) + (bytes_transferred - strm.avail_in);
|
|
||||||
int zret;
|
|
||||||
unp.reserve_buffer(window_size);
|
|
||||||
strm.avail_out = window_size;
|
|
||||||
strm.next_out = reinterpret_cast<unsigned char*>(unp.buffer());
|
|
||||||
do {
|
|
||||||
zret = inflate(&strm, Z_NO_FLUSH);
|
|
||||||
assert(zret != Z_STREAM_ERROR);
|
|
||||||
switch (zret) {
|
|
||||||
case Z_NEED_DICT:
|
|
||||||
zret = Z_DATA_ERROR;
|
|
||||||
// fall through
|
|
||||||
case Z_DATA_ERROR:
|
|
||||||
case Z_MEM_ERROR:
|
|
||||||
inflateEnd(&strm);
|
|
||||||
std::cout << "Zlib inflate() error = " << zret << std::endl;
|
|
||||||
std::exit(-1);
|
|
||||||
}
|
|
||||||
std::size_t decompressed_size = window_size - strm.avail_out;
|
|
||||||
std::cout << decompressed_size << " bytes decompressed." << std::endl;
|
|
||||||
unp.buffer_consumed(decompressed_size);
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
while (unp.next(oh)) {
|
|
||||||
std::cout << oh.get() << std::endl;
|
|
||||||
}
|
|
||||||
} while (strm.avail_out == 0);
|
|
||||||
if (zret == Z_STREAM_END) {
|
|
||||||
inflateEnd(&strm);
|
|
||||||
std::cout << "Zlib decompress finished." << std::endl;
|
|
||||||
++idx_zlib_data;
|
|
||||||
if (idx_zlib_data == num_of_zlib_data) {
|
|
||||||
std::cout << "All zlib decompress finished." << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
zlib_init();
|
|
||||||
}
|
|
||||||
} while (strm.avail_in != 0);
|
|
||||||
do_async_read_some();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
do_async_read_some();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
do_accept();
|
|
||||||
|
|
||||||
// Client
|
|
||||||
auto host = "localhost";
|
|
||||||
|
|
||||||
boost::asio::ip::tcp::resolver r(ios);
|
|
||||||
|
|
||||||
#if BOOST_VERSION < 106600
|
|
||||||
boost::asio::ip::tcp::resolver::query q(host, boost::lexical_cast<std::string>(port));
|
|
||||||
auto it = r.resolve(q);
|
|
||||||
boost::asio::ip::tcp::resolver::iterator end;
|
|
||||||
#else // BOOST_VERSION < 106600
|
|
||||||
auto eps = r.resolve(host, boost::lexical_cast<std::string>(port));
|
|
||||||
auto it = eps.begin();
|
|
||||||
auto end = eps.end();
|
|
||||||
#endif // BOOST_VERSION < 106600
|
|
||||||
|
|
||||||
boost::asio::ip::tcp::socket cs(ios);
|
|
||||||
boost::asio::async_connect(
|
|
||||||
cs,
|
|
||||||
it,
|
|
||||||
end,
|
|
||||||
[&]
|
|
||||||
(boost::system::error_code const& e, boost::asio::ip::tcp::resolver::iterator) {
|
|
||||||
if (e) {
|
|
||||||
std::cout << __LINE__ << ":" << e.message() << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::cout << __LINE__ << ":client connected" << std::endl;
|
|
||||||
for (int i = 0; i != num_of_zlib_data; ++i) {
|
|
||||||
msgpack::zbuffer zb;
|
|
||||||
msgpack::pack(zb, std::make_tuple(i, false, "hello world", 12.3456));
|
|
||||||
zb.flush(); // finalize zbuffer (don't forget it)
|
|
||||||
print(std::string(zb.data(), zb.size()));
|
|
||||||
write(cs, boost::asio::buffer(zb.data(), zb.size()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// Start
|
|
||||||
ios.run();
|
|
||||||
}
|
|
@@ -1,94 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include <algorithm>
|
|
||||||
#include <cctype>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
struct user {
|
|
||||||
std::string name;
|
|
||||||
int age;
|
|
||||||
std::string address;
|
|
||||||
MSGPACK_DEFINE(name, age, address);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct proc:boost::static_visitor<void> {
|
|
||||||
void operator()(std::string& v) const {
|
|
||||||
std::cout << " match std::string& v" << std::endl;
|
|
||||||
std::cout << " v: " << v << std::endl;
|
|
||||||
std::cout << " capitalize" << std::endl;
|
|
||||||
for (std::string::iterator it = v.begin(), end = v.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
*it = std::toupper(*it);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void operator()(std::vector<msgpack::type::variant>& v) const {
|
|
||||||
std::cout << "match vector (msgpack::type::ARRAY)" << std::endl;
|
|
||||||
std::vector<msgpack::type::variant>::iterator it = v.begin();
|
|
||||||
std::vector<msgpack::type::variant>::const_iterator end = v.end();
|
|
||||||
for (; it != end; ++it) {
|
|
||||||
boost::apply_visitor(*this, *it);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
template <typename T>
|
|
||||||
void operator()(T const&) const {
|
|
||||||
std::cout << " match others" << std::endl;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
|
||||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
std::cout
|
|
||||||
<< std::setw(2)
|
|
||||||
<< std::hex
|
|
||||||
<< std::setfill('0')
|
|
||||||
<< (static_cast<int>(*it) & 0xff)
|
|
||||||
<< ' ';
|
|
||||||
}
|
|
||||||
std::cout << std::dec << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
std::stringstream ss1;
|
|
||||||
user u;
|
|
||||||
u.name = "Takatoshi Kondo";
|
|
||||||
u.age = 42;
|
|
||||||
u.address = "Tokyo, JAPAN";
|
|
||||||
|
|
||||||
std::cout << "Packing object." << std::endl;
|
|
||||||
msgpack::pack(ss1, u);
|
|
||||||
print(ss1.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh1 = msgpack::unpack(ss1.str().data(), ss1.str().size());
|
|
||||||
msgpack::object const& obj1 = oh1.get();
|
|
||||||
std::cout << "Unpacked msgpack object." << std::endl;
|
|
||||||
std::cout << obj1 << std::endl;
|
|
||||||
|
|
||||||
msgpack::type::variant v = obj1.as<msgpack::type::variant>();
|
|
||||||
std::cout << "Applying proc..." << std::endl;
|
|
||||||
boost::apply_visitor(proc(), v);
|
|
||||||
|
|
||||||
std::stringstream ss2;
|
|
||||||
std::cout << "Packing modified object." << std::endl;
|
|
||||||
msgpack::pack(ss2, v);
|
|
||||||
print(ss2.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh2 = msgpack::unpack(ss2.str().data(), ss2.str().size());
|
|
||||||
msgpack::object const& obj2 = oh2.get();
|
|
||||||
std::cout << "Modified msgpack object." << std::endl;
|
|
||||||
std::cout << obj2 << std::endl;
|
|
||||||
}
|
|
@@ -1,97 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
struct user {
|
|
||||||
std::string name;
|
|
||||||
int age;
|
|
||||||
std::string address;
|
|
||||||
MSGPACK_DEFINE_MAP(name, age, address);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct proc:boost::static_visitor<void> {
|
|
||||||
// msgpack::type::MAP is converted to std::multimap, not std::map.
|
|
||||||
void operator()(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>& v) const {
|
|
||||||
std::cout << "match map" << std::endl;
|
|
||||||
std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::iterator it = v.begin();
|
|
||||||
std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::iterator end = v.end();
|
|
||||||
while(it != end) {
|
|
||||||
boost::string_ref const& key = it->first.as_boost_string_ref();
|
|
||||||
if (key == "name") {
|
|
||||||
boost::string_ref const& value = it->second.as_boost_string_ref();
|
|
||||||
if (value == "Takatoshi Kondo") {
|
|
||||||
// You can add values to msgpack::type::variant_ref.
|
|
||||||
v.insert(
|
|
||||||
std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::value_type(
|
|
||||||
"role",
|
|
||||||
"msgpack-c committer"
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
else if (key == "age") {
|
|
||||||
// You can remove key-value pair from msgpack::type::variant_ref
|
|
||||||
|
|
||||||
#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++);
|
|
||||||
# endif // MSGPACK_LIB_STD_CXX
|
|
||||||
#else // defined(MSGPACK_USE_CPP03)
|
|
||||||
# if MSGPACK_LIB_STD_CXX
|
|
||||||
it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it));
|
|
||||||
# else // MSGPACK_LIB_STD_CXX
|
|
||||||
it = v.erase(it);
|
|
||||||
# endif // MSGPACK_LIB_STD_CXX
|
|
||||||
#endif // defined(MSGPACK_USE_CPP03)
|
|
||||||
}
|
|
||||||
else if (key == "address") {
|
|
||||||
// When you want to append string
|
|
||||||
// "Tokyo" -> "Tokyo, JAPAN"
|
|
||||||
// Use msgpack::type::variant instead of msgpack::type::variant_ref
|
|
||||||
// or do as follows:
|
|
||||||
boost::string_ref const& value = it->second.as_boost_string_ref();
|
|
||||||
it->second = std::string(&value.front(), value.size()) + ", JAPAN";
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
template <typename T>
|
|
||||||
void operator()(T const&) const {
|
|
||||||
std::cout << " match others" << std::endl;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
std::stringstream ss;
|
|
||||||
user u;
|
|
||||||
u.name = "Takatoshi Kondo";
|
|
||||||
u.age = 42;
|
|
||||||
u.address = "Tokyo";
|
|
||||||
msgpack::pack(ss, u);
|
|
||||||
|
|
||||||
std::string const& str = ss.str();
|
|
||||||
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
msgpack::object const& obj = oh.get();
|
|
||||||
std::cout << "Unpacked msgpack object." << std::endl;
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>();
|
|
||||||
std::cout << "Applying proc..." << std::endl;
|
|
||||||
boost::apply_visitor(proc(), v);
|
|
||||||
msgpack::zone z;
|
|
||||||
std::cout << "Applied msgpack object." << std::endl;
|
|
||||||
std::cout << msgpack::object(v, z) << std::endl;
|
|
||||||
}
|
|
296
example/boundary.c
Normal file
296
example/boundary.c
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
/* gcc boundary.c -o boundary -Wconversion -Wpointer-sign */
|
||||||
|
#include <msgpack.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
static inline unsigned char atohex(char a)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
if (a >= 'a') {
|
||||||
|
x = a - 'a' + 10;
|
||||||
|
} else if (a >= 'A') {
|
||||||
|
x = a - 'A' + 10;
|
||||||
|
} else {
|
||||||
|
x = a - '0';
|
||||||
|
}
|
||||||
|
assert(x >= 0 && x < 16);
|
||||||
|
return (unsigned char)x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return 0 if equal
|
||||||
|
static inline int bytesncmp(char *data, const char *bytes, size_t len)
|
||||||
|
{
|
||||||
|
size_t n = len >> 1;
|
||||||
|
size_t i = 0;
|
||||||
|
int diff;
|
||||||
|
for (; i < n; i++) {
|
||||||
|
diff = (unsigned char)data[i] - (atohex(bytes[2 * i]) << 4) - atohex(bytes[2 * i + 1]);
|
||||||
|
if (diff != 0) {
|
||||||
|
return diff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
msgpack_sbuffer sbuf;
|
||||||
|
msgpack_packer *x;
|
||||||
|
size_t offset = 0;
|
||||||
|
char data[65536];
|
||||||
|
msgpack_timestamp ts[] = {
|
||||||
|
{ 0xFFFFFFFF, 0 },
|
||||||
|
{ 0x100000000, 0 },
|
||||||
|
{ 0x3FFFFFFFF, 0 },
|
||||||
|
{ 0x400000000, 0 },
|
||||||
|
{ INT64_MAX, UINT32_MAX }
|
||||||
|
};
|
||||||
|
|
||||||
|
#define check_sbuffer(b) \
|
||||||
|
do { \
|
||||||
|
size_t len = strlen(#b); \
|
||||||
|
assert((sbuf.size - offset) * 2 == len); \
|
||||||
|
assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \
|
||||||
|
offset = sbuf.size; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
msgpack_sbuffer_init(&sbuf);
|
||||||
|
x = msgpack_packer_new(&sbuf, msgpack_sbuffer_write);
|
||||||
|
|
||||||
|
msgpack_pack_fix_uint8(x, 0); check_sbuffer(cc00); /* cc 00 */
|
||||||
|
msgpack_pack_fix_uint8(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_fix_uint16(x, 0); check_sbuffer(cd0000); /* cd 00 00 */
|
||||||
|
msgpack_pack_fix_uint16(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
||||||
|
msgpack_pack_fix_uint32(x, 0); check_sbuffer(ce00000000); /* ce 00 00 00 00 */
|
||||||
|
msgpack_pack_fix_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
||||||
|
msgpack_pack_fix_uint64(x, 0); check_sbuffer(cf0000000000000000); /* cf 00 00 00 00 00 00 00 00 */
|
||||||
|
msgpack_pack_fix_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff); /* cf ff ff ff ff ff ff ff ff */
|
||||||
|
|
||||||
|
msgpack_pack_uint8(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_uint8(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_uint8(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_uint8(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
|
||||||
|
msgpack_pack_uint16(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_uint16(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_uint16(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_uint16(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_uint16(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
||||||
|
msgpack_pack_uint16(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
||||||
|
|
||||||
|
msgpack_pack_uint32(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_uint32(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_uint32(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_uint32(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_uint32(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
||||||
|
msgpack_pack_uint32(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
||||||
|
msgpack_pack_uint32(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
||||||
|
msgpack_pack_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
||||||
|
|
||||||
|
msgpack_pack_uint64(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_uint64(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_uint64(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_uint64(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_uint64(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
||||||
|
msgpack_pack_uint64(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
||||||
|
msgpack_pack_uint64(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
||||||
|
msgpack_pack_uint64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
||||||
|
msgpack_pack_uint64(x, 0x100000000); check_sbuffer(cf0000000100000000); /* cf 00 00 00 01 00 00 00 00 */
|
||||||
|
msgpack_pack_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff); /* cf ff ff ff ff ff ff ff ff */
|
||||||
|
|
||||||
|
msgpack_pack_fix_int8(x, 0x7F); check_sbuffer(d07f); /* d0 7f */
|
||||||
|
msgpack_pack_fix_int8(x, -0x7F-1); check_sbuffer(d080); /* d0 80 */
|
||||||
|
msgpack_pack_fix_int16(x, 0x7FFF); check_sbuffer(d17fff); /* d1 7f ff */
|
||||||
|
msgpack_pack_fix_int16(x, -0x7FFF-1); check_sbuffer(d18000); /* d1 80 00 */
|
||||||
|
msgpack_pack_fix_int32(x, 0x7FFFFFFF); check_sbuffer(d27fffffff); /* d2 7f ff ff ff */
|
||||||
|
msgpack_pack_fix_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000); /* d2 80 00 00 00 */
|
||||||
|
msgpack_pack_fix_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(d37fffffffffffffff); /* d3 7f ff ff ff ff ff ff ff */
|
||||||
|
msgpack_pack_fix_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000); /* d3 80 00 00 00 00 00 00 00 */
|
||||||
|
|
||||||
|
msgpack_pack_int8(x, -0x7F-1); check_sbuffer(d080); /* d0 80 */
|
||||||
|
msgpack_pack_int8(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
||||||
|
msgpack_pack_int8(x, -0x20); check_sbuffer(e0); /* e0 */
|
||||||
|
msgpack_pack_int8(x, -1); check_sbuffer(ff); /* ff */
|
||||||
|
msgpack_pack_int8(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_int8(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
|
||||||
|
msgpack_pack_int16(x, -0x7FFF-1); check_sbuffer(d18000); /* d1 80 00 */
|
||||||
|
msgpack_pack_int16(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
|
||||||
|
msgpack_pack_int16(x, -0x80); check_sbuffer(d080); /* d0 80 */
|
||||||
|
msgpack_pack_int16(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
||||||
|
msgpack_pack_int16(x, -0x20); check_sbuffer(e0); /* e0 */
|
||||||
|
msgpack_pack_int16(x, -0x1); check_sbuffer(ff); /* ff */
|
||||||
|
msgpack_pack_int16(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_int16(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_int16(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_int16(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_int16(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
||||||
|
msgpack_pack_int16(x, 0x7FFF); check_sbuffer(cd7fff); /* cd 7f ff */
|
||||||
|
|
||||||
|
msgpack_pack_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000); /* d2 80 00 00 00 */
|
||||||
|
msgpack_pack_int32(x, -0x8001); check_sbuffer(d2ffff7fff); /* d2 ff ff 7f ff */
|
||||||
|
msgpack_pack_int32(x, -0x8000); check_sbuffer(d18000); /* d1 80 00 */
|
||||||
|
msgpack_pack_int32(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
|
||||||
|
msgpack_pack_int32(x, -0x80); check_sbuffer(d080); /* d0 80 */
|
||||||
|
msgpack_pack_int32(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
||||||
|
msgpack_pack_int32(x, -0x20); check_sbuffer(e0); /* e0 */
|
||||||
|
msgpack_pack_int32(x, -0x1); check_sbuffer(ff); /* ff */
|
||||||
|
msgpack_pack_int32(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_int32(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_int32(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_int32(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_int32(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
||||||
|
msgpack_pack_int32(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
||||||
|
msgpack_pack_int32(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
||||||
|
msgpack_pack_int32(x, 0x7FFFFFFF); check_sbuffer(ce7fffffff); /* ce 7f ff ff ff */
|
||||||
|
|
||||||
|
msgpack_pack_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000); /* d3 80 00 00 00 00 00 00 00 */
|
||||||
|
msgpack_pack_int64(x, -((1LL<<31)+1)); check_sbuffer(d3ffffffff7fffffff); /* d3 ff ff ff ff 7f ff ff ff */
|
||||||
|
msgpack_pack_int64(x, -(1LL<<31)); check_sbuffer(d280000000); /* d2 80 00 00 00 */
|
||||||
|
msgpack_pack_int64(x, -0x8001); check_sbuffer(d2ffff7fff); /* d2 ff ff 7f ff */
|
||||||
|
msgpack_pack_int64(x, -0x8000); check_sbuffer(d18000); /* d1 80 00 */
|
||||||
|
msgpack_pack_int64(x, -0x81); check_sbuffer(d1ff7f); /* d1 ff 7f */
|
||||||
|
msgpack_pack_int64(x, -0x80); check_sbuffer(d080); /* d0 80 */
|
||||||
|
msgpack_pack_int64(x, -0x21); check_sbuffer(d0df); /* d0 df */
|
||||||
|
msgpack_pack_int64(x, -0x20); check_sbuffer(e0); /* e0 */
|
||||||
|
msgpack_pack_int64(x, -0x1); check_sbuffer(ff); /* ff */
|
||||||
|
msgpack_pack_int64(x, 0); check_sbuffer(00); /* 00 */
|
||||||
|
msgpack_pack_int64(x, 0x7F); check_sbuffer(7f); /* 7f */
|
||||||
|
msgpack_pack_int64(x, 0x80); check_sbuffer(cc80); /* cc 80 */
|
||||||
|
msgpack_pack_int64(x, 0xFF); check_sbuffer(ccff); /* cc ff */
|
||||||
|
msgpack_pack_int64(x, 0x100); check_sbuffer(cd0100); /* cd 01 00 */
|
||||||
|
msgpack_pack_int64(x, 0xFFFF); check_sbuffer(cdffff); /* cd ff ff */
|
||||||
|
msgpack_pack_int64(x, 0x10000); check_sbuffer(ce00010000); /* ce 00 01 00 00 */
|
||||||
|
msgpack_pack_int64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff); /* ce ff ff ff ff */
|
||||||
|
msgpack_pack_int64(x, 0x100000000); check_sbuffer(cf0000000100000000); /* cf 00 00 00 01 00 00 00 00 */
|
||||||
|
msgpack_pack_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(cf7fffffffffffffff); /* cf 7f ff ff ff ff ff ff ff */
|
||||||
|
|
||||||
|
msgpack_pack_nil(x); check_sbuffer(c0); /* c0 */
|
||||||
|
msgpack_pack_false(x); check_sbuffer(c2); /* c2 */
|
||||||
|
msgpack_pack_true(x); check_sbuffer(c3); /* c3 */
|
||||||
|
|
||||||
|
msgpack_pack_float(x, 1.0); check_sbuffer(ca3f800000); /* ca 3f 80 00 00 */
|
||||||
|
msgpack_pack_double(x, 1.0); check_sbuffer(cb3ff0000000000000); /* cb 3f f0 00 00 00 00 00 00 */
|
||||||
|
|
||||||
|
msgpack_pack_unsigned_char(x, UINT8_MAX); /* same as msgpack_pack_uint8() */
|
||||||
|
msgpack_pack_unsigned_short(x, (unsigned short)UINT64_MAX);
|
||||||
|
msgpack_pack_unsigned_int(x, (unsigned int)UINT64_MAX);
|
||||||
|
msgpack_pack_unsigned_long(x, (unsigned long)UINT64_MAX);
|
||||||
|
msgpack_pack_unsigned_long_long(x, (unsigned long long)UINT64_MAX);
|
||||||
|
|
||||||
|
msgpack_pack_signed_char(x, INT8_MAX); /* same as msgpack_pack_int8() */
|
||||||
|
|
||||||
|
#define check_sbuffer_n(b) \
|
||||||
|
do { \
|
||||||
|
size_t len = strlen(#b); \
|
||||||
|
assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \
|
||||||
|
offset = sbuf.size; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fill_str(n) msgpack_pack_str_body(x, data, n)
|
||||||
|
|
||||||
|
offset = sbuf.size;
|
||||||
|
msgpack_pack_str(x, 0); /* "" */ check_sbuffer(a0); /* a0 */
|
||||||
|
msgpack_pack_str(x, 31);
|
||||||
|
fill_str(31); check_sbuffer_n(bf); /* bf ... */
|
||||||
|
msgpack_pack_str(x, 32);
|
||||||
|
fill_str(32); check_sbuffer_n(d920); /* d9 20 ... */
|
||||||
|
msgpack_pack_str(x, 255);
|
||||||
|
fill_str(255); check_sbuffer_n(d9ff); /* d9 ff ... */
|
||||||
|
msgpack_pack_str(x, 256);
|
||||||
|
fill_str(256); check_sbuffer_n(da0100); /* da 01 00 ... */
|
||||||
|
msgpack_pack_str(x, 65535);
|
||||||
|
fill_str(65535); check_sbuffer_n(daffff); /* da ff ff ... */
|
||||||
|
msgpack_pack_str(x, 65536);
|
||||||
|
fill_str(65536); check_sbuffer_n(db00010000); /* db 00 01 00 00 ... */
|
||||||
|
|
||||||
|
#define fill_map(n) \
|
||||||
|
do { \
|
||||||
|
size_t i = 0; \
|
||||||
|
for (; i < n * 2; i++) { msgpack_pack_int8(x, 0x1); } \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
msgpack_pack_map(x, 0); /* {} */ check_sbuffer(80); /* 80 */
|
||||||
|
msgpack_pack_map(x, 1);
|
||||||
|
fill_map(1); check_sbuffer_n(81); /* 81 ... */
|
||||||
|
msgpack_pack_map(x, 15);
|
||||||
|
fill_map(15); check_sbuffer_n(8f); /* 8f ... */
|
||||||
|
msgpack_pack_map(x, 16);
|
||||||
|
fill_map(16); check_sbuffer_n(de0010); /* de 00 10 ... */
|
||||||
|
msgpack_pack_map(x, 65535);
|
||||||
|
fill_map(65535); check_sbuffer_n(deffff); /* de ff ff ... */
|
||||||
|
msgpack_pack_map(x, 65536);
|
||||||
|
fill_map(65536); check_sbuffer_n(df00010000); /* df 00 01 00 00 ... */
|
||||||
|
|
||||||
|
#define fill_array(n) \
|
||||||
|
do { \
|
||||||
|
size_t i = 0; \
|
||||||
|
for (; i < n; i++) { msgpack_pack_int8(x, 0x1); } \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
msgpack_pack_array(x, 0); /* [] */ check_sbuffer(90); /* 90 */
|
||||||
|
msgpack_pack_array(x, 1);
|
||||||
|
fill_array(1); check_sbuffer_n(91); /* 91 ... */
|
||||||
|
msgpack_pack_array(x, 15);
|
||||||
|
fill_array(15); check_sbuffer_n(9f); /* 9f ... */
|
||||||
|
msgpack_pack_array(x, 16);
|
||||||
|
fill_array(16); check_sbuffer_n(dc0010); /* dc 00 10 ... */
|
||||||
|
msgpack_pack_array(x, 65535);
|
||||||
|
fill_array(65535); check_sbuffer_n(dcffff); /* dc ff ff ... */
|
||||||
|
msgpack_pack_array(x, 65536);
|
||||||
|
fill_array(65536); check_sbuffer_n(dd00010000); /* dd 00 01 00 00 ... */
|
||||||
|
|
||||||
|
#define fill_bin(n) msgpack_pack_bin_body(x, data, n)
|
||||||
|
|
||||||
|
msgpack_pack_bin(x, 0); check_sbuffer(c400); /* c4 00 */
|
||||||
|
msgpack_pack_bin(x, 1);
|
||||||
|
fill_bin(1); check_sbuffer_n(c401); /* c4 01 ... */
|
||||||
|
msgpack_pack_bin(x, 255);
|
||||||
|
fill_bin(255); check_sbuffer_n(c4ff); /* c4 ff ... */
|
||||||
|
msgpack_pack_bin(x, 256);
|
||||||
|
fill_bin(256); check_sbuffer_n(c50100); /* c5 01 00 ... */
|
||||||
|
msgpack_pack_bin(x, 65535);
|
||||||
|
fill_bin(65535); check_sbuffer_n(c5ffff); /* c5 ff ff ... */
|
||||||
|
msgpack_pack_bin(x, 65536);
|
||||||
|
fill_bin(65536); check_sbuffer_n(c600010000); /* c6 00 01 00 00 ... */
|
||||||
|
|
||||||
|
#define fill_ext(n) msgpack_pack_ext_body(x, data, n)
|
||||||
|
|
||||||
|
msgpack_pack_ext(x, 1, 0x7F);
|
||||||
|
fill_ext(1); check_sbuffer_n(d47f); /* d4 7f ... */
|
||||||
|
msgpack_pack_ext(x, 2, 0x7F);
|
||||||
|
fill_ext(2); check_sbuffer_n(d57f); /* d5 7f ... */
|
||||||
|
msgpack_pack_ext(x, 4, 0x7F);
|
||||||
|
fill_ext(4); check_sbuffer_n(d67f); /* d6 7f ... */
|
||||||
|
msgpack_pack_ext(x, 8, 0x7F);
|
||||||
|
fill_ext(8); check_sbuffer_n(d77f); /* d7 7f ... */
|
||||||
|
msgpack_pack_ext(x, 16, 0x7F);
|
||||||
|
fill_ext(16); check_sbuffer_n(d87f); /* d8 7f ... */
|
||||||
|
|
||||||
|
msgpack_pack_ext(x, 0, 0x7F); check_sbuffer(c7007f); /* c7 00 7f */
|
||||||
|
msgpack_pack_ext(x, 3, 0x7F);
|
||||||
|
fill_ext(3); check_sbuffer_n(c7037f); /* c7 03 7f */
|
||||||
|
msgpack_pack_ext(x, 5, 0x7F);
|
||||||
|
fill_ext(5); check_sbuffer_n(c7057f); /* c7 05 7f */
|
||||||
|
msgpack_pack_ext(x, 17, 0x7F);
|
||||||
|
fill_ext(17); check_sbuffer_n(c7117f); /* c7 11 7f */
|
||||||
|
msgpack_pack_ext(x, 255, 0x7F);
|
||||||
|
fill_ext(255); check_sbuffer_n(c7ff7f); /* c7 ff 7f ... */
|
||||||
|
msgpack_pack_ext(x, 256, 0x7F);
|
||||||
|
fill_ext(256); check_sbuffer_n(c801007f); /* c8 01 00 7f ... */
|
||||||
|
msgpack_pack_ext(x, 65535, 0x7F);
|
||||||
|
fill_ext(65535); check_sbuffer_n(c8ffff7f); /* c8 ff ff 7f ... */
|
||||||
|
msgpack_pack_ext(x, 65536, 0x7F);
|
||||||
|
fill_ext(65536); check_sbuffer_n(c9000100007f); /* c9 00 01 00 00 7f ... */
|
||||||
|
|
||||||
|
msgpack_pack_timestamp(x, ts); check_sbuffer(d6ffffffffff); /* d6 ff ff ff ff ff */
|
||||||
|
msgpack_pack_timestamp(x, ts + 1); check_sbuffer(d7ff0000000100000000); /* d7 ff 00 00 00 01 00 00 00 00 */
|
||||||
|
msgpack_pack_timestamp(x, ts + 2); check_sbuffer(d7ff00000003ffffffff); /* d7 ff 00 00 00 03 ff ff ff ff */
|
||||||
|
msgpack_pack_timestamp(x, ts + 3); check_sbuffer(c70cff000000000000000400000000); /* c7 0c ff 00 00 00 00 00 00 00 04 00 00 00 00 */
|
||||||
|
msgpack_pack_timestamp(x, ts + 4); check_sbuffer(c70cffffffffff7fffffffffffffff); /* c7 0c ff ff ff ff ff 7f ff ff ff ff ff ff ff */
|
||||||
|
|
||||||
|
msgpack_sbuffer_destroy(&sbuf);
|
||||||
|
msgpack_packer_free(x);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -1,33 +0,0 @@
|
|||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
lib_buffer_unpack.c
|
|
||||||
simple_c.c
|
|
||||||
speed_test_uint32_array.c
|
|
||||||
speed_test_uint64_array.c
|
|
||||||
user_buffer_unpack.c
|
|
||||||
)
|
|
||||||
|
|
||||||
FOREACH (source_file ${exec_PROGRAMS})
|
|
||||||
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
|
||||||
ADD_EXECUTABLE (
|
|
||||||
${source_file_we}
|
|
||||||
${source_file}
|
|
||||||
)
|
|
||||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
|
||||||
msgpackc
|
|
||||||
)
|
|
||||||
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")
|
|
||||||
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 ()
|
|
@@ -3,15 +3,15 @@ project (example)
|
|||||||
|
|
||||||
if(EXAMPLE_MSGPACK_EMBEDDED)
|
if(EXAMPLE_MSGPACK_EMBEDDED)
|
||||||
add_subdirectory(msgpack-c)
|
add_subdirectory(msgpack-c)
|
||||||
set(msgpack_DIR ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c)
|
set(msgpackc_DIR ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(msgpack REQUIRED)
|
find_package(msgpackc REQUIRED)
|
||||||
|
|
||||||
add_executable (${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c)
|
add_executable (${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../simple_c.c)
|
||||||
target_link_libraries(${PROJECT_NAME} msgpackc)
|
target_link_libraries(${PROJECT_NAME} msgpackc)
|
||||||
|
|
||||||
if(TARGET msgpackc-static)
|
if(TARGET msgpackc-static)
|
||||||
add_executable (${PROJECT_NAME}-static ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c)
|
add_executable (${PROJECT_NAME}-static ${CMAKE_CURRENT_LIST_DIR}/../simple_c.c)
|
||||||
target_link_libraries(${PROJECT_NAME}-static msgpackc-static)
|
target_link_libraries(${PROJECT_NAME}-static msgpackc-static)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -1,120 +0,0 @@
|
|||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
class_intrusive.cpp
|
|
||||||
class_intrusive_map.cpp
|
|
||||||
class_non_intrusive.cpp
|
|
||||||
custom.cpp
|
|
||||||
enum.cpp
|
|
||||||
map_based_versionup.cpp
|
|
||||||
protocol_new.cpp
|
|
||||||
reuse_zone.cpp
|
|
||||||
simple.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
IF (MSGPACK_DEFAULT_API_VERSION EQUAL 1)
|
|
||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
protocol.cpp
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF (NOT MSVC)
|
|
||||||
LIST (APPEND with_pthread_PROGRAMS
|
|
||||||
stream.cpp
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF (MSGPACK_BOOST)
|
|
||||||
LIST (APPEND with_boost_lib_PROGRAMS
|
|
||||||
speed_test.cpp
|
|
||||||
speed_test_nested_array.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")
|
|
||||||
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_pthread_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}
|
|
||||||
${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")
|
|
||||||
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_lib_PROGRAMS})
|
|
||||||
INCLUDE_DIRECTORIES (
|
|
||||||
../include
|
|
||||||
${Boost_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
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>
|
|
||||||
)
|
|
||||||
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
|
|
||||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
|
||||||
${Boost_TIMER_LIBRARY}
|
|
||||||
${Boost_CHRONO_LIBRARY}
|
|
||||||
${Boost_SYSTEM_LIBRARY}
|
|
||||||
)
|
|
||||||
IF (NOT MSVC AND NOT APPLE)
|
|
||||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
|
||||||
rt
|
|
||||||
)
|
|
||||||
ENDIF ()
|
|
||||||
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -O3")
|
|
||||||
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 ()
|
|
@@ -1,104 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <sstream>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
// When you want to adapt map instead of array, you can enable these macro definition.
|
|
||||||
//
|
|
||||||
// #define MSGPACK_USE_DEFINE_MAP
|
|
||||||
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
struct my_base1 {
|
|
||||||
int a;
|
|
||||||
MSGPACK_DEFINE(a);
|
|
||||||
};
|
|
||||||
inline bool operator==(my_base1 const& lhs, my_base1 const& rhs) {
|
|
||||||
return lhs.a == rhs.a;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct my_base2 {
|
|
||||||
std::string b;
|
|
||||||
std::string c;
|
|
||||||
MSGPACK_DEFINE(b, c);
|
|
||||||
};
|
|
||||||
inline bool operator==(my_base2 const& lhs, my_base2 const& rhs) {
|
|
||||||
return lhs.b == rhs.b && lhs.c == rhs.c;
|
|
||||||
}
|
|
||||||
|
|
||||||
class my_class : public my_base1, private my_base2 {
|
|
||||||
public:
|
|
||||||
my_class() {} // When you want to convert from msgpack::object to my_class,
|
|
||||||
// my_class should be default constractible.
|
|
||||||
my_class(std::string const& name, int age):name_(name), age_(age) {}
|
|
||||||
void set_b(std::string const& str) { b = str; }
|
|
||||||
void set_c(std::string const& str) { c = str; }
|
|
||||||
friend bool operator==(my_class const& lhs, my_class const& rhs) {
|
|
||||||
return
|
|
||||||
static_cast<my_base1 const&>(lhs) == static_cast<my_base1 const&>(rhs) &&
|
|
||||||
static_cast<my_base2 const&>(lhs) == static_cast<my_base2 const&>(rhs) &&
|
|
||||||
lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string name_;
|
|
||||||
int age_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
MSGPACK_DEFINE(name_, age_, MSGPACK_BASE(my_base1), MSGPACK_BASE(my_base2));
|
|
||||||
};
|
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
|
||||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
std::cout
|
|
||||||
<< std::setw(2)
|
|
||||||
<< std::hex
|
|
||||||
<< std::setfill('0')
|
|
||||||
<< (static_cast<int>(*it) & 0xff)
|
|
||||||
<< ' ';
|
|
||||||
}
|
|
||||||
std::cout << std::dec << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
{ // pack, unpack
|
|
||||||
my_class my("John Smith", 42);
|
|
||||||
my.a = 123;
|
|
||||||
my.set_b("ABC");
|
|
||||||
my.set_c("DEF");
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, my);
|
|
||||||
|
|
||||||
std::string const& str = ss.str();
|
|
||||||
print(str);
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(str.data(), str.size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<my_class>() == my);
|
|
||||||
}
|
|
||||||
{ // create object with zone
|
|
||||||
my_class my("John Smith", 42);
|
|
||||||
my.a = 123;
|
|
||||||
my.set_b("ABC");
|
|
||||||
my.set_c("DEF");
|
|
||||||
msgpack::zone z;
|
|
||||||
msgpack::object obj(my, z);
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<my_class>() == my);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,76 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <sstream>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
class my_class {
|
|
||||||
public:
|
|
||||||
my_class() {} // When you want to convert from msgpack::object to my_class,
|
|
||||||
// my_class should be default constractible.
|
|
||||||
// If you use C++11, you can adapt non-default constructible
|
|
||||||
// classes to msgpack::object.
|
|
||||||
// See https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_adaptor#non-default-constructible-class-support-c11-only
|
|
||||||
my_class(std::string const& name, int age):name_(name), age_(age) {}
|
|
||||||
|
|
||||||
friend bool operator==(my_class const& lhs, my_class const& rhs) {
|
|
||||||
return lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string name_;
|
|
||||||
int age_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
MSGPACK_DEFINE_MAP(name_, age_);
|
|
||||||
};
|
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
|
||||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
std::cout
|
|
||||||
<< std::setw(2)
|
|
||||||
<< std::hex
|
|
||||||
<< std::setfill('0')
|
|
||||||
<< (static_cast<int>(*it) & 0xff)
|
|
||||||
<< ' ';
|
|
||||||
}
|
|
||||||
std::cout << std::dec << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
{ // pack, unpack
|
|
||||||
my_class my("John Smith", 42);
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, my);
|
|
||||||
|
|
||||||
print(ss.str());
|
|
||||||
|
|
||||||
std::string const& str = ss.str();
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(str.data(), str.size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<my_class>() == my);
|
|
||||||
}
|
|
||||||
{ // create object with zone
|
|
||||||
my_class my("John Smith", 42);
|
|
||||||
msgpack::zone z;
|
|
||||||
msgpack::object obj(my, z);
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<my_class>() == my);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,119 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <sstream>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
class my_class {
|
|
||||||
public:
|
|
||||||
my_class() {} // When you want to convert from msgpack::object to my_class,
|
|
||||||
// my_class should be default constractible.
|
|
||||||
my_class(std::string const& name, int age):name_(name), age_(age) {}
|
|
||||||
|
|
||||||
// my_class should provide getters for the data members you want to pack.
|
|
||||||
std::string const& get_name() const { return name_; }
|
|
||||||
int get_age() const { return age_; }
|
|
||||||
|
|
||||||
friend bool operator==(my_class const& lhs, my_class const& rhs) {
|
|
||||||
return lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::string name_;
|
|
||||||
int age_;
|
|
||||||
};
|
|
||||||
|
|
||||||
// User defined class template specialization
|
|
||||||
namespace msgpack {
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct convert<my_class> {
|
|
||||||
msgpack::object const& operator()(msgpack::object const& o, my_class& v) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) throw msgpack::type_error();
|
|
||||||
if (o.via.array.size != 2) throw msgpack::type_error();
|
|
||||||
v = my_class(
|
|
||||||
o.via.array.ptr[0].as<std::string>(),
|
|
||||||
o.via.array.ptr[1].as<int>());
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct pack<my_class> {
|
|
||||||
template <typename Stream>
|
|
||||||
packer<Stream>& operator()(msgpack::packer<Stream>& o, my_class const& v) const {
|
|
||||||
// packing member variables as an array.
|
|
||||||
o.pack_array(2);
|
|
||||||
o.pack(v.get_name());
|
|
||||||
o.pack(v.get_age());
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct object_with_zone<my_class> {
|
|
||||||
void operator()(msgpack::object::with_zone& o, my_class const& v) const {
|
|
||||||
o.type = type::ARRAY;
|
|
||||||
o.via.array.size = 2;
|
|
||||||
o.via.array.ptr = static_cast<msgpack::object*>(
|
|
||||||
o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size, MSGPACK_ZONE_ALIGNOF(msgpack::object)));
|
|
||||||
o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone);
|
|
||||||
o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
|
||||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
std::cout
|
|
||||||
<< std::setw(2)
|
|
||||||
<< std::hex
|
|
||||||
<< std::setfill('0')
|
|
||||||
<< (static_cast<int>(*it) & 0xff)
|
|
||||||
<< ' ';
|
|
||||||
}
|
|
||||||
std::cout << std::dec << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
{ // pack, unpack
|
|
||||||
my_class my("John Smith", 42);
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, my);
|
|
||||||
|
|
||||||
std::string const& str = ss.str();
|
|
||||||
print(str);
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(str.data(), str.size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<my_class>() == my);
|
|
||||||
}
|
|
||||||
{ // create object with zone
|
|
||||||
my_class my("John Smith", 42);
|
|
||||||
msgpack::zone z;
|
|
||||||
msgpack::object obj(my, z);
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<my_class>() == my);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,67 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <sstream>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
class old_class {
|
|
||||||
public:
|
|
||||||
old_class() : value("default") { }
|
|
||||||
|
|
||||||
std::string value;
|
|
||||||
|
|
||||||
MSGPACK_DEFINE(value);
|
|
||||||
};
|
|
||||||
|
|
||||||
class new_class {
|
|
||||||
public:
|
|
||||||
new_class() : value("default"), flag(-1) { }
|
|
||||||
|
|
||||||
std::string value;
|
|
||||||
int flag;
|
|
||||||
|
|
||||||
MSGPACK_DEFINE(value, flag);
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
{
|
|
||||||
old_class oc;
|
|
||||||
new_class nc;
|
|
||||||
|
|
||||||
std::stringstream sbuf;
|
|
||||||
msgpack::pack(sbuf, oc);
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(sbuf.str().data(), sbuf.str().size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
|
|
||||||
obj.convert(nc);
|
|
||||||
|
|
||||||
std::cout << obj << " value=" << nc.value << " flag=" << nc.flag << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
new_class nc;
|
|
||||||
old_class oc;
|
|
||||||
|
|
||||||
std::stringstream sbuf;
|
|
||||||
msgpack::pack(sbuf, nc);
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(sbuf.str().data(), sbuf.str().size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
|
|
||||||
obj.convert(oc);
|
|
||||||
|
|
||||||
std::cout << obj << " value=" << oc.value << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,59 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 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 <sstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
enum my_enum {
|
|
||||||
elem1,
|
|
||||||
elem2,
|
|
||||||
elem3
|
|
||||||
};
|
|
||||||
|
|
||||||
MSGPACK_ADD_ENUM(my_enum);
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
{ // pack, unpack
|
|
||||||
std::stringstream sbuf;
|
|
||||||
msgpack::pack(sbuf, elem1);
|
|
||||||
msgpack::pack(sbuf, elem2);
|
|
||||||
my_enum e3 = elem3;
|
|
||||||
msgpack::pack(sbuf, e3);
|
|
||||||
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
std::size_t off = 0;
|
|
||||||
|
|
||||||
msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
|
|
||||||
std::cout << oh.get().as<my_enum>() << std::endl;
|
|
||||||
assert(oh.get().as<my_enum>() == elem1);
|
|
||||||
|
|
||||||
msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
|
|
||||||
std::cout << oh.get().as<my_enum>() << std::endl;
|
|
||||||
assert(oh.get().as<my_enum>() == elem2);
|
|
||||||
|
|
||||||
msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
|
|
||||||
std::cout << oh.get().as<my_enum>() << std::endl;
|
|
||||||
assert(oh.get().as<my_enum>() == elem3);
|
|
||||||
}
|
|
||||||
{ // create object without zone
|
|
||||||
msgpack::object obj(elem2);
|
|
||||||
std::cout << obj.as<my_enum>() << std::endl;
|
|
||||||
assert(obj.as<my_enum>() == elem2);
|
|
||||||
}
|
|
||||||
{ // create object with zone
|
|
||||||
msgpack::zone z;
|
|
||||||
msgpack::object objz(elem3, z);
|
|
||||||
std::cout << objz.as<my_enum>() << std::endl;
|
|
||||||
assert(objz.as<my_enum>() == elem3);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,112 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <sstream>
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
struct base1 {
|
|
||||||
base1():a("default") {}
|
|
||||||
std::string a;
|
|
||||||
MSGPACK_DEFINE_MAP(a);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct v1 : base1 {
|
|
||||||
v1():name("default"), age(0) {}
|
|
||||||
std::string name;
|
|
||||||
int age;
|
|
||||||
MSGPACK_DEFINE_MAP(MSGPACK_BASE_MAP(base1), name, age);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct base2 {
|
|
||||||
base2():a("default") {}
|
|
||||||
std::string a;
|
|
||||||
MSGPACK_DEFINE_MAP(a);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Removed: base1, name
|
|
||||||
// Added : base2, address
|
|
||||||
struct v2 : base2 {
|
|
||||||
v2(): age(0), address("default") {}
|
|
||||||
int age;
|
|
||||||
std::string address;
|
|
||||||
MSGPACK_DEFINE_MAP(MSGPACK_BASE_MAP(base2), age, address);
|
|
||||||
};
|
|
||||||
|
|
||||||
// The member variable "age" is in common between v1 and v2.
|
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
|
||||||
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
|
||||||
it != end;
|
|
||||||
++it) {
|
|
||||||
std::cout
|
|
||||||
<< std::setw(2)
|
|
||||||
<< std::hex
|
|
||||||
<< std::setfill('0')
|
|
||||||
<< (static_cast<int>(*it) & 0xff)
|
|
||||||
<< ' ';
|
|
||||||
}
|
|
||||||
std::cout << std::dec << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
{ // pack v1, unpack, convert to v2
|
|
||||||
v1 v;
|
|
||||||
v.a = "ABC";
|
|
||||||
v.name = "John Smith";
|
|
||||||
v.age = 35;
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, v);
|
|
||||||
|
|
||||||
print(ss.str());
|
|
||||||
|
|
||||||
std::string const& str = ss.str();
|
|
||||||
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
|
|
||||||
v2 newv = obj.as<v2>();
|
|
||||||
|
|
||||||
std::cout << "v2::a " << newv.a << std::endl;
|
|
||||||
std::cout << "v2::age " << newv.age << std::endl;
|
|
||||||
std::cout << "v2::address " << newv.address << std::endl;
|
|
||||||
|
|
||||||
// "age" is set from v1
|
|
||||||
assert(newv.a == "default");
|
|
||||||
assert(newv.age == 35);
|
|
||||||
assert(newv.address == "default");
|
|
||||||
}
|
|
||||||
{ // create v2 object with zone, convert to v1
|
|
||||||
v2 v;
|
|
||||||
v.a = "DEF";
|
|
||||||
v.age = 42;
|
|
||||||
v.address = "Tokyo";
|
|
||||||
|
|
||||||
msgpack::zone z;
|
|
||||||
msgpack::object obj(v, z);
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
|
|
||||||
v1 newv = obj.as<v1>();
|
|
||||||
|
|
||||||
std::cout << "v1::a " << newv.a << std::endl;
|
|
||||||
std::cout << "v1::name " << newv.name << std::endl;
|
|
||||||
std::cout << "v1::age " << newv.age << std::endl;
|
|
||||||
|
|
||||||
// "age" is set from v2
|
|
||||||
assert(newv.a == "default");
|
|
||||||
assert(newv.name == "default");
|
|
||||||
assert(newv.age == 42);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,97 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
// This example uses obsolete APIs
|
|
||||||
// See protocol_new.cpp
|
|
||||||
namespace myprotocol {
|
|
||||||
using namespace msgpack::type;
|
|
||||||
using msgpack::define;
|
|
||||||
|
|
||||||
struct Get : define< tuple<uint32_t, std::string> > {
|
|
||||||
Get() { }
|
|
||||||
Get(uint32_t f, const std::string& k) :
|
|
||||||
define_type(msgpack_type(f, k)) { }
|
|
||||||
uint32_t& flags() { return msgpack::type::get<0>(*this); }
|
|
||||||
std::string& key() { return msgpack::type::get<1>(*this); }
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Put : define< tuple<uint32_t, std::string, raw_ref> > {
|
|
||||||
Put() { }
|
|
||||||
Put(uint32_t f, const std::string& k, const char* valref, uint32_t vallen) :
|
|
||||||
define_type(msgpack_type( f, k, raw_ref(valref,vallen) )) { }
|
|
||||||
uint32_t& flags() { return msgpack::type::get<0>(*this); }
|
|
||||||
std::string& key() { return msgpack::type::get<1>(*this); }
|
|
||||||
raw_ref& value() { return msgpack::type::get<2>(*this); }
|
|
||||||
};
|
|
||||||
|
|
||||||
struct MultiGet : define< std::vector<Get> > {
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// send Get request
|
|
||||||
std::stringstream stream;
|
|
||||||
{
|
|
||||||
myprotocol::Get req;
|
|
||||||
req.flags() = 0;
|
|
||||||
req.key() = "key0";
|
|
||||||
msgpack::pack(stream, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream.seekg(0);
|
|
||||||
|
|
||||||
// receive Get request
|
|
||||||
{
|
|
||||||
std::string buffer(stream.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(buffer.data(), buffer.size());
|
|
||||||
msgpack::object o = oh.get();
|
|
||||||
|
|
||||||
myprotocol::Get req;
|
|
||||||
o.convert(req);
|
|
||||||
std::cout << "received: " << o << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
stream.str("");
|
|
||||||
|
|
||||||
|
|
||||||
// send MultiGet request
|
|
||||||
{
|
|
||||||
myprotocol::MultiGet req;
|
|
||||||
req.push_back( myprotocol::Get(1, "key1") );
|
|
||||||
req.push_back( myprotocol::Get(2, "key2") );
|
|
||||||
req.push_back( myprotocol::Get(3, "key3") );
|
|
||||||
msgpack::pack(stream, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream.seekg(0);
|
|
||||||
|
|
||||||
// receive MultiGet request
|
|
||||||
{
|
|
||||||
std::string buffer(stream.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(buffer.data(), buffer.size());
|
|
||||||
msgpack::object o = oh.get();
|
|
||||||
|
|
||||||
|
|
||||||
myprotocol::MultiGet req;
|
|
||||||
o.convert(req);
|
|
||||||
std::cout << "received: " << o << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,84 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 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 <msgpack.hpp>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
// This example uses obsolete APIs
|
|
||||||
// See protocol_new.cpp
|
|
||||||
namespace myprotocol {
|
|
||||||
struct Get {
|
|
||||||
Get() {}
|
|
||||||
Get(uint32_t f, const std::string& k) : flags(f), key(k) {}
|
|
||||||
uint32_t flags;
|
|
||||||
std::string key;
|
|
||||||
MSGPACK_DEFINE(flags, key);
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::vector<Get> MultiGet;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
// send Get request
|
|
||||||
std::stringstream stream;
|
|
||||||
{
|
|
||||||
myprotocol::Get req;
|
|
||||||
req.flags = 0;
|
|
||||||
req.key = "key0";
|
|
||||||
msgpack::pack(stream, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream.seekg(0);
|
|
||||||
|
|
||||||
// receive Get request
|
|
||||||
{
|
|
||||||
std::string buffer(stream.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(buffer.data(), buffer.size());
|
|
||||||
msgpack::object o = oh.get();
|
|
||||||
|
|
||||||
myprotocol::Get req;
|
|
||||||
o.convert(req);
|
|
||||||
std::cout << "received: " << o << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
stream.str("");
|
|
||||||
|
|
||||||
|
|
||||||
// send MultiGet request
|
|
||||||
{
|
|
||||||
myprotocol::MultiGet req;
|
|
||||||
req.push_back( myprotocol::Get(1, "key1") );
|
|
||||||
req.push_back( myprotocol::Get(2, "key2") );
|
|
||||||
req.push_back( myprotocol::Get(3, "key3") );
|
|
||||||
msgpack::pack(stream, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream.seekg(0);
|
|
||||||
|
|
||||||
// receive MultiGet request
|
|
||||||
{
|
|
||||||
std::string buffer(stream.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh =
|
|
||||||
msgpack::unpack(buffer.data(), buffer.size());
|
|
||||||
msgpack::object o = oh.get();
|
|
||||||
|
|
||||||
|
|
||||||
myprotocol::MultiGet req;
|
|
||||||
o.convert(req);
|
|
||||||
std::cout << "received: " << o << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,43 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 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 <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
std::vector<int> v;
|
|
||||||
v.push_back(1);
|
|
||||||
v.push_back(42);
|
|
||||||
std::string s("ABC");
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, v);
|
|
||||||
msgpack::pack(ss, s);
|
|
||||||
|
|
||||||
msgpack::zone z;
|
|
||||||
std::size_t offset = 0;
|
|
||||||
|
|
||||||
// msgpack array is constructed on z.
|
|
||||||
std::string const& ps = ss.str();
|
|
||||||
msgpack::object obj = msgpack::unpack(z, ps.data(), ps.size(), offset);
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<std::vector<int> >() == v);
|
|
||||||
|
|
||||||
// msgpack str is constructed on z.
|
|
||||||
std::string const& str = msgpack::unpack(z, ps.data(), ps.size(), offset).as<std::string>();
|
|
||||||
std::cout << str << std::endl;
|
|
||||||
assert(str == s);
|
|
||||||
}
|
|
@@ -1,44 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
msgpack::type::tuple<int, bool, std::string> src(1, true, "example");
|
|
||||||
|
|
||||||
// serialize the object into the buffer.
|
|
||||||
// any classes that implements write(const char*,size_t) can be a buffer.
|
|
||||||
std::stringstream buffer;
|
|
||||||
msgpack::pack(buffer, src);
|
|
||||||
|
|
||||||
// send the buffer ...
|
|
||||||
buffer.seekg(0);
|
|
||||||
|
|
||||||
// deserialize the buffer into msgpack::object instance.
|
|
||||||
std::string str(buffer.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
|
|
||||||
// deserialized object is valid during the msgpack::object_handle instance alive.
|
|
||||||
msgpack::object deserialized = oh.get();
|
|
||||||
|
|
||||||
// msgpack::object supports ostream.
|
|
||||||
std::cout << deserialized << std::endl;
|
|
||||||
|
|
||||||
// convert msgpack::object instance into the original type.
|
|
||||||
// if the type is mismatched, it throws msgpack::type_error exception.
|
|
||||||
msgpack::type::tuple<int, bool, std::string> dst;
|
|
||||||
deserialized.convert(dst);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,63 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2013-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
// g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system
|
|
||||||
// export LD_LIBRARY_PATH=path_to_boost_lib
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <map>
|
|
||||||
#include <boost/timer/timer.hpp>
|
|
||||||
|
|
||||||
void test_map_pack_unpack() {
|
|
||||||
std::cout << "[TEST][map_pack_unpack]" << std::endl;
|
|
||||||
// setup
|
|
||||||
std::cout << "Setting up map data..." << std::endl;
|
|
||||||
std::map<int, int> m1;
|
|
||||||
int const num = 30000000L;
|
|
||||||
for (int i = 0; i < num; ++i) m1[i] = i;
|
|
||||||
std::cout << "Start packing..." << std::endl;
|
|
||||||
std::stringstream buffer;
|
|
||||||
{
|
|
||||||
boost::timer::cpu_timer timer;
|
|
||||||
msgpack::pack(buffer, m1);
|
|
||||||
std::string result = timer.format();
|
|
||||||
std::cout << result << std::endl;
|
|
||||||
}
|
|
||||||
std::cout << "Pack finished..." << std::endl;
|
|
||||||
|
|
||||||
buffer.seekg(0);
|
|
||||||
std::string str(buffer.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl;
|
|
||||||
{
|
|
||||||
boost::timer::cpu_timer timer;
|
|
||||||
msgpack::unpack(oh, str.data(), str.size());
|
|
||||||
std::string result = timer.format();
|
|
||||||
std::cout << result << std::endl;
|
|
||||||
}
|
|
||||||
std::cout << "Unpack finished..." << std::endl;
|
|
||||||
std::map<int, int> m2;
|
|
||||||
std::cout << "Start converting..." << std::endl;
|
|
||||||
{
|
|
||||||
boost::timer::cpu_timer timer;
|
|
||||||
oh.get().convert(m2);
|
|
||||||
std::string result = timer.format();
|
|
||||||
std::cout << result << std::endl;
|
|
||||||
}
|
|
||||||
std::cout << "Convert finished..." << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
test_map_pack_unpack();
|
|
||||||
}
|
|
@@ -1,86 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2013-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
// g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system
|
|
||||||
// export LD_LIBRARY_PATH=path_to_boost_lib
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <vector>
|
|
||||||
#include <boost/timer/timer.hpp>
|
|
||||||
|
|
||||||
template <typename T, std::size_t level>
|
|
||||||
struct vecvec {
|
|
||||||
typedef std::vector<typename vecvec<T, level - 1>::type> type;
|
|
||||||
static void fill(type& v, std::size_t num_of_elems, T const& val) {
|
|
||||||
for (std::size_t elem = 0; elem < num_of_elems; ++elem) {
|
|
||||||
typename vecvec<T, level - 1>::type child;
|
|
||||||
vecvec<T, level - 1>::fill(child, num_of_elems, val);
|
|
||||||
v.push_back(child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct vecvec<T, 0> {
|
|
||||||
typedef std::vector<T> type;
|
|
||||||
static void fill(type& v, std::size_t num_of_elems, T const& val) {
|
|
||||||
for (std::size_t elem = 0; elem < num_of_elems; ++elem) {
|
|
||||||
v.push_back(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void test_array_of_array() {
|
|
||||||
std::cout << "[TEST][array_of_array]" << std::endl;
|
|
||||||
// setup
|
|
||||||
int const depth = 4;
|
|
||||||
std::cout << "Setting up array data..." << std::endl;
|
|
||||||
vecvec<int, depth>::type v1;
|
|
||||||
vecvec<int, depth>::fill(v1, 3, 42);
|
|
||||||
|
|
||||||
std::cout << "Start packing..." << std::endl;
|
|
||||||
std::stringstream buffer;
|
|
||||||
{
|
|
||||||
boost::timer::cpu_timer timer;
|
|
||||||
msgpack::pack(buffer, v1);
|
|
||||||
std::string result = timer.format();
|
|
||||||
std::cout << result << std::endl;
|
|
||||||
}
|
|
||||||
std::cout << "Pack finished..." << std::endl;
|
|
||||||
|
|
||||||
buffer.seekg(0);
|
|
||||||
std::string str(buffer.str());
|
|
||||||
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl;
|
|
||||||
{
|
|
||||||
boost::timer::cpu_timer timer;
|
|
||||||
msgpack::unpack(oh, str.data(), str.size());
|
|
||||||
std::string result = timer.format();
|
|
||||||
std::cout << result << std::endl;
|
|
||||||
}
|
|
||||||
std::cout << "Unpack finished..." << std::endl;
|
|
||||||
vecvec<int, depth>::type v2;
|
|
||||||
std::cout << "Start converting..." << std::endl;
|
|
||||||
{
|
|
||||||
boost::timer::cpu_timer timer;
|
|
||||||
oh.get().convert(v2);
|
|
||||||
std::string result = timer.format();
|
|
||||||
std::cout << result << std::endl;
|
|
||||||
}
|
|
||||||
std::cout << "Convert finished..." << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
test_array_of_array();
|
|
||||||
}
|
|
@@ -1,148 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2015 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)
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
#include <iostream>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.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 {
|
|
||||||
public:
|
|
||||||
Server(int sock) : m_sock(sock) { }
|
|
||||||
|
|
||||||
~Server() { }
|
|
||||||
|
|
||||||
typedef msgpack::unique_ptr<msgpack::zone> unique_zone;
|
|
||||||
|
|
||||||
void socket_readable()
|
|
||||||
{
|
|
||||||
m_pac.reserve_buffer(1024);
|
|
||||||
|
|
||||||
ssize_t count =
|
|
||||||
read(m_sock, m_pac.buffer(), m_pac.buffer_capacity());
|
|
||||||
|
|
||||||
if(count <= 0) {
|
|
||||||
if(count == 0) {
|
|
||||||
throw std::runtime_error("connection closed");
|
|
||||||
}
|
|
||||||
if(errno == EAGAIN || errno == EINTR) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
throw std::runtime_error(strerror(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pac.buffer_consumed(count);
|
|
||||||
|
|
||||||
msgpack::object_handle oh;
|
|
||||||
while (m_pac.next(oh)) {
|
|
||||||
msgpack::object msg = oh.get();
|
|
||||||
unique_zone& life = oh.zone();
|
|
||||||
process_message(msg, life);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(m_pac.message_size() > 10*1024*1024) {
|
|
||||||
throw std::runtime_error("message is too large");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void process_message(msgpack::object msg, unique_zone&)
|
|
||||||
{
|
|
||||||
std::cout << "message reached: " << msg << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
int m_sock;
|
|
||||||
msgpack::unpacker m_pac;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static void* run_server(void* arg)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
Server* srv = reinterpret_cast<Server*>(arg);
|
|
||||||
|
|
||||||
while(true) {
|
|
||||||
srv->socket_readable();
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "error while processing client packet: "
|
|
||||||
<< e.what() << std::endl;
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
} catch (...) {
|
|
||||||
std::cerr << "error while processing client packet: "
|
|
||||||
<< "unknown error" << std::endl;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct fwriter {
|
|
||||||
fwriter(int fd) : m_fp( fdopen(fd, "w") ) { }
|
|
||||||
|
|
||||||
void write(const char* buf, size_t buflen)
|
|
||||||
{
|
|
||||||
size_t count = fwrite(buf, buflen, 1, m_fp);
|
|
||||||
if(count < 1) {
|
|
||||||
std::cout << buflen << std::endl;
|
|
||||||
std::cout << count << std::endl;
|
|
||||||
throw std::runtime_error(strerror(errno));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void flush() { fflush(m_fp); }
|
|
||||||
|
|
||||||
void close() { fclose(m_fp); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
FILE* m_fp;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
int pair[2];
|
|
||||||
if (pipe(pair) != 0) return -1;
|
|
||||||
|
|
||||||
// run server thread
|
|
||||||
Server srv(pair[0]);
|
|
||||||
pthread_t thread;
|
|
||||||
pthread_create(&thread, NULL,
|
|
||||||
run_server, reinterpret_cast<void*>(&srv));
|
|
||||||
|
|
||||||
// client thread:
|
|
||||||
fwriter writer(pair[1]);
|
|
||||||
msgpack::packer<fwriter> pk(writer);
|
|
||||||
|
|
||||||
typedef msgpack::type::tuple<std::string, std::string, std::string> put_t;
|
|
||||||
typedef msgpack::type::tuple<std::string, std::string> get_t;
|
|
||||||
|
|
||||||
put_t req1("put", "apple", "red");
|
|
||||||
put_t req2("put", "lemon", "yellow");
|
|
||||||
get_t req3("get", "apple");
|
|
||||||
pk.pack(req1);
|
|
||||||
pk.pack(req2);
|
|
||||||
pk.pack(req3);
|
|
||||||
writer.flush();
|
|
||||||
writer.close();
|
|
||||||
|
|
||||||
pthread_join(thread, NULL);
|
|
||||||
}
|
|
@@ -1,43 +0,0 @@
|
|||||||
IF (MSGPACK_CXX11)
|
|
||||||
INCLUDE_DIRECTORIES (
|
|
||||||
../include
|
|
||||||
)
|
|
||||||
|
|
||||||
LIST (APPEND exec_PROGRAMS
|
|
||||||
container.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})
|
|
||||||
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")
|
|
||||||
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 ()
|
|
@@ -1,158 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 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 <array>
|
|
||||||
#include <tuple>
|
|
||||||
#include <unordered_map>
|
|
||||||
#include <unordered_set>
|
|
||||||
#include <forward_list>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
void array() {
|
|
||||||
std::array<int, 5> a { { 1, 2, 3, 4, 5 } };
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, a);
|
|
||||||
|
|
||||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert((obj.as<std::array<int, 5>>()) == a);
|
|
||||||
}
|
|
||||||
|
|
||||||
void tuple() {
|
|
||||||
std::tuple<bool, std::string, int> t(true, "ABC", 42);
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, t);
|
|
||||||
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(t)>() == t);
|
|
||||||
}
|
|
||||||
|
|
||||||
void unordered_map() {
|
|
||||||
std::unordered_map<std::string, int> m { {"ABC", 1}, {"DEF", 3} };
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, m);
|
|
||||||
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
msgpack::object obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(m)>() == m);
|
|
||||||
}
|
|
||||||
|
|
||||||
void unordered_set() {
|
|
||||||
std::unordered_set<std::string> s { "ABC", "DEF" };
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, s);
|
|
||||||
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(s)>() == s);
|
|
||||||
}
|
|
||||||
|
|
||||||
void forward_list() {
|
|
||||||
using type = std::forward_list<std::string>;
|
|
||||||
type f { "ABC", "DEF" };
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, f);
|
|
||||||
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size());
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<type>() == f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void combi() {
|
|
||||||
std::array<int, 5> a { { 1, 2, 3, 4, 5 } };
|
|
||||||
std::tuple<bool, std::string, int> t {true, "ABC", 42};
|
|
||||||
std::unordered_map<std::string, int> m { {"ABC", 1}, {"DEF", 3} };
|
|
||||||
std::unordered_set<std::string> s { "ABC", "DEF" };
|
|
||||||
std::forward_list<std::string> f { "ABC", "DEF" };
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
msgpack::pack(ss, a);
|
|
||||||
msgpack::pack(ss, t);
|
|
||||||
msgpack::pack(ss, m);
|
|
||||||
msgpack::pack(ss, s);
|
|
||||||
msgpack::pack(ss, f);
|
|
||||||
|
|
||||||
std::size_t offset = 0;
|
|
||||||
std::cout << "offset: " << offset << std::endl;
|
|
||||||
{
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size(), offset);
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(a)>() == a);
|
|
||||||
}
|
|
||||||
std::cout << "offset: " << offset << std::endl;
|
|
||||||
{
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size(), offset);
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(t)>() == t);
|
|
||||||
}
|
|
||||||
std::cout << "offset: " << offset << std::endl;
|
|
||||||
{
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size(), offset);
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(m)>() == m);
|
|
||||||
}
|
|
||||||
std::cout << "offset: " << offset << std::endl;
|
|
||||||
{
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size(), offset);
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(s)>() == s);
|
|
||||||
}
|
|
||||||
std::cout << "offset: " << offset << std::endl;
|
|
||||||
{
|
|
||||||
auto const& str = ss.str();
|
|
||||||
auto oh = msgpack::unpack(str.data(), str.size(), offset);
|
|
||||||
auto obj = oh.get();
|
|
||||||
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(obj.as<decltype(f)>() == f);
|
|
||||||
}
|
|
||||||
std::cout << "offset: " << offset << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
array();
|
|
||||||
tuple();
|
|
||||||
unordered_map();
|
|
||||||
unordered_set();
|
|
||||||
forward_list();
|
|
||||||
combi();
|
|
||||||
}
|
|
@@ -1,51 +0,0 @@
|
|||||||
// MessagePack for C++ example
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 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 <cassert>
|
|
||||||
#include <memory>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
struct my {
|
|
||||||
my() = delete;
|
|
||||||
|
|
||||||
// target class should be either copyable or movable (or both).
|
|
||||||
my(my const&) = delete;
|
|
||||||
my(my&&) = default;
|
|
||||||
|
|
||||||
my(int a):a(a) {}
|
|
||||||
int a;
|
|
||||||
MSGPACK_DEFINE(a);
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
|
||||||
namespace adaptor {
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct as<my> {
|
|
||||||
my operator()(msgpack::object const& o) const {
|
|
||||||
if (o.type != msgpack::type::ARRAY) throw msgpack::type_error();
|
|
||||||
if (o.via.array.size != 1) throw msgpack::type_error();
|
|
||||||
return my(o.via.array.ptr[0].as<int>());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace adaptor
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
my m1(42);
|
|
||||||
msgpack::zone z;
|
|
||||||
msgpack::object obj(m1, z);
|
|
||||||
std::cout << obj << std::endl;
|
|
||||||
assert(m1.a == obj.as<my>().a);
|
|
||||||
}
|
|
@@ -1,157 +0,0 @@
|
|||||||
#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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
419
example/jsonconv.c
Normal file
419
example/jsonconv.c
Normal file
@@ -0,0 +1,419 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <msgpack.h>
|
||||||
|
#include <cjson/cJSON.h>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#if _MSC_VER >= 1800
|
||||||
|
#include <inttypes.h>
|
||||||
|
#else
|
||||||
|
#define PRIu64 "I64u"
|
||||||
|
#define PRIi64 "I64i"
|
||||||
|
#define PRIi8 "i"
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_KERNEL_MODE)
|
||||||
|
# undef snprintf
|
||||||
|
# define snprintf _snprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEBUG(...) printf(__VA_ARGS__)
|
||||||
|
|
||||||
|
static char *format_string(const char *input)
|
||||||
|
{
|
||||||
|
const char *inptr;
|
||||||
|
char *output;
|
||||||
|
char *outptr;
|
||||||
|
size_t output_length = 0;
|
||||||
|
/* numbers of additional characters*/
|
||||||
|
size_t escape_characters = 0;
|
||||||
|
|
||||||
|
if (input == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (inptr = input; *inptr; inptr++) {
|
||||||
|
switch (*inptr) {
|
||||||
|
case '\"':
|
||||||
|
case '\\':
|
||||||
|
case '\b':
|
||||||
|
case '\f':
|
||||||
|
case '\n':
|
||||||
|
case '\r':
|
||||||
|
case '\t':
|
||||||
|
/* one character escape sequence */
|
||||||
|
escape_characters++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output_length = (size_t)(inptr - input) + escape_characters;
|
||||||
|
|
||||||
|
output = (char *)malloc(output_length + 1);
|
||||||
|
if (output == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* no add characters*/
|
||||||
|
if (escape_characters == 0) {
|
||||||
|
memcpy(output, input, output_length);
|
||||||
|
output[output_length] = '\0';
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
outptr = output;
|
||||||
|
/* copy string */
|
||||||
|
for (inptr = input; *inptr != '\0'; (void)inptr++, outptr++) {
|
||||||
|
if ((*inptr > 31) && (*inptr != '\"') && (*inptr != '\\')) {
|
||||||
|
/* normal character, copy */
|
||||||
|
*outptr = *inptr;
|
||||||
|
} else {
|
||||||
|
/* character needs to be escaped */
|
||||||
|
*outptr++ = '\\';
|
||||||
|
switch (*inptr)
|
||||||
|
{
|
||||||
|
case '\\':
|
||||||
|
*outptr = '\\';
|
||||||
|
break;
|
||||||
|
case '\"':
|
||||||
|
*outptr = '\"';
|
||||||
|
break;
|
||||||
|
case '\b':
|
||||||
|
*outptr = 'b';
|
||||||
|
break;
|
||||||
|
case '\f':
|
||||||
|
*outptr = 'f';
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
*outptr = 'n';
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
*outptr = 'r';
|
||||||
|
break;
|
||||||
|
case '\t':
|
||||||
|
*outptr = 't';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output[output_length] = '\0';
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pack cJSON object.
|
||||||
|
* return 0 success, others failed
|
||||||
|
*/
|
||||||
|
static int parse_cjson_object(msgpack_packer *pk, cJSON *node)
|
||||||
|
{
|
||||||
|
int ret, sz, i;
|
||||||
|
cJSON *child;
|
||||||
|
char *strvalue;
|
||||||
|
|
||||||
|
if (node == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (node->type & 0xFF) {
|
||||||
|
case cJSON_Invalid:
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
case cJSON_False:
|
||||||
|
return msgpack_pack_false(pk);
|
||||||
|
|
||||||
|
case cJSON_True:
|
||||||
|
return msgpack_pack_true(pk);
|
||||||
|
|
||||||
|
case cJSON_NULL:
|
||||||
|
return msgpack_pack_nil(pk);
|
||||||
|
|
||||||
|
case cJSON_String:
|
||||||
|
strvalue = format_string(node->valuestring);
|
||||||
|
if (strvalue != NULL) {
|
||||||
|
ret = msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue));
|
||||||
|
free(strvalue);
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case cJSON_Number:
|
||||||
|
if (isnan(node->valuedouble) || isinf(node->valuedouble)) {
|
||||||
|
ret = msgpack_pack_nil(pk);
|
||||||
|
} else if (node->valuedouble == node->valueint) {
|
||||||
|
ret = msgpack_pack_int(pk, node->valueint);
|
||||||
|
} else {
|
||||||
|
ret = msgpack_pack_double(pk, node->valuedouble);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
case cJSON_Array:
|
||||||
|
sz = cJSON_GetArraySize(node);
|
||||||
|
if (msgpack_pack_array(pk, sz) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
for (i = 0; i < sz; i++) {
|
||||||
|
if (parse_cjson_object(pk, cJSON_GetArrayItem(node, i)) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case cJSON_Object:
|
||||||
|
sz = cJSON_GetArraySize(node);
|
||||||
|
if (msgpack_pack_map(pk, sz) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
for (i = 0; i < sz; i++) {
|
||||||
|
child = cJSON_GetArrayItem(node, i);
|
||||||
|
strvalue = format_string(child->string);
|
||||||
|
if (strvalue == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue)) != 0) {
|
||||||
|
free(strvalue);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
free(strvalue);
|
||||||
|
if (parse_cjson_object(pk, child) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
DEBUG("unknown type.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pack json string to msgpack format data.
|
||||||
|
* return 0 success, -1 failed
|
||||||
|
*/
|
||||||
|
int msgpack_pack_jsonstr(msgpack_packer *pk, const char *jsonstr)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
cJSON *node;
|
||||||
|
const char *end = NULL;
|
||||||
|
|
||||||
|
if (pk == NULL || jsonstr == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = cJSON_ParseWithOpts(jsonstr, &end, 1);
|
||||||
|
if (node == NULL) {
|
||||||
|
DEBUG("parse error: unexpected string `%s`\n", end);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
status = parse_cjson_object(pk, node);
|
||||||
|
cJSON_Delete(node);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int bytes_contain_zero(const msgpack_object_bin *bin)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < bin->size; i++) {
|
||||||
|
if (bin->ptr[i] == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PRINT_JSONSTR_CALL(ret, func, aux_buffer, aux_buffer_size, ...) \
|
||||||
|
ret = func(aux_buffer, aux_buffer_size, __VA_ARGS__); \
|
||||||
|
if (ret <= 0) \
|
||||||
|
return ret; \
|
||||||
|
if (ret > aux_buffer_size) \
|
||||||
|
return 0; \
|
||||||
|
aux_buffer = aux_buffer + ret; \
|
||||||
|
aux_buffer_size = aux_buffer_size - ret
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert msgpack format data to json string.
|
||||||
|
* return >0: success, 0: length of buffer not enough, -1: failed
|
||||||
|
*/
|
||||||
|
size_t msgpack_object_print_jsonstr(char *buffer, size_t length, const msgpack_object o)
|
||||||
|
{
|
||||||
|
char *aux_buffer = buffer;
|
||||||
|
size_t aux_buffer_size = length;
|
||||||
|
size_t ret;
|
||||||
|
|
||||||
|
switch (o.type) {
|
||||||
|
case MSGPACK_OBJECT_NIL:
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "null");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_BOOLEAN:
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, (o.via.boolean ? "true" : "false"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_POSITIVE_INTEGER:
|
||||||
|
#if defined(PRIu64)
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIu64, o.via.u64);
|
||||||
|
#else
|
||||||
|
if (o.via.u64 > ULONG_MAX) {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", ULONG_MAX);
|
||||||
|
} else {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", (unsigned long)o.via.u64);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_NEGATIVE_INTEGER:
|
||||||
|
#if defined(PRIi64)
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIi64, o.via.i64);
|
||||||
|
#else
|
||||||
|
if (o.via.i64 > LONG_MAX) {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MAX);
|
||||||
|
} else if (o.via.i64 < LONG_MIN) {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MIN);
|
||||||
|
} else {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", (signed long)o.via.i64);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_FLOAT32:
|
||||||
|
case MSGPACK_OBJECT_FLOAT64:
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%f", o.via.f64);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_STR:
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.str.size, o.via.str.ptr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_BIN:
|
||||||
|
if (bytes_contain_zero(&o.via.bin)) {
|
||||||
|
DEBUG("the value contains zero\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.bin.size, o.via.bin.ptr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_EXT:
|
||||||
|
DEBUG("not support type: MSGPACK_OBJECT_EXT.\n");
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_ARRAY:
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_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;
|
||||||
|
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p);
|
||||||
|
++p;
|
||||||
|
for (; p < pend; ++p) {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ",");
|
||||||
|
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "]");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSGPACK_OBJECT_MAP:
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "{");
|
||||||
|
if (o.via.map.size != 0) {
|
||||||
|
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) {
|
||||||
|
if (p->key.type != MSGPACK_OBJECT_STR) {
|
||||||
|
DEBUG("the key of in a map must be string.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (p != o.via.map.ptr) {
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ",");
|
||||||
|
}
|
||||||
|
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->key);
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ":");
|
||||||
|
PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "}");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
DEBUG("unknown type.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return length - aux_buffer_size;
|
||||||
|
}
|
||||||
|
#undef PRINT_JSONSTR_CALL
|
||||||
|
|
||||||
|
static void test(const char *name, const char *input, const char *expect)
|
||||||
|
{
|
||||||
|
msgpack_sbuffer sbuf;
|
||||||
|
{
|
||||||
|
// pack
|
||||||
|
msgpack_packer pk;
|
||||||
|
msgpack_sbuffer_init(&sbuf);
|
||||||
|
msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
|
||||||
|
if (msgpack_pack_jsonstr(&pk, input) < 0) {
|
||||||
|
msgpack_sbuffer_destroy(&sbuf);
|
||||||
|
printf("%s: invalid json string.\n", name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// unpack
|
||||||
|
#define MAX_JSONLEN 1024
|
||||||
|
msgpack_zone z;
|
||||||
|
msgpack_object obj;
|
||||||
|
size_t jsonstrlen = MAX_JSONLEN - 1;
|
||||||
|
char jsonparsed[MAX_JSONLEN];
|
||||||
|
|
||||||
|
msgpack_zone_init(&z, jsonstrlen);
|
||||||
|
msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
|
||||||
|
jsonstrlen = msgpack_object_print_jsonstr(jsonparsed, jsonstrlen, obj);
|
||||||
|
jsonparsed[jsonstrlen] = '\0';
|
||||||
|
|
||||||
|
//compare input and output
|
||||||
|
if (expect == NULL) {
|
||||||
|
expect = input;
|
||||||
|
}
|
||||||
|
if (strcmp(expect, jsonparsed) == 0) {
|
||||||
|
printf("%s: ok\n", name);
|
||||||
|
} else {
|
||||||
|
printf("%s: failed\n", name);
|
||||||
|
}
|
||||||
|
msgpack_zone_destroy(&z);
|
||||||
|
}
|
||||||
|
msgpack_sbuffer_destroy(&sbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test("null", "null", NULL);
|
||||||
|
test("boolean", "false", NULL);
|
||||||
|
test("single string", "\"frsyuki\"", NULL);
|
||||||
|
test("single number", "\"100\"", NULL);
|
||||||
|
test("space", "[{\"valuespace\":\"\",\"\":\"keyspace\"},\"\",[\"\"]]", NULL);
|
||||||
|
test("quote", "\"My name is Tom (\\\"Bee\\\") Kobe\"", NULL);
|
||||||
|
test("escape", "\"\\\\b\\f\\n\\r\\t\"", NULL);
|
||||||
|
test("escape2", "\"\b\f\n\r\t\"", "\"\\b\\f\\n\\r\\t\"");
|
||||||
|
test("map", "{\"name\":\"Tom (\\\"Bee\\\") Kobe\",\"type\":\"image\",\"data\":{\"width\":360,\"height\":460,\"title\":\"View me\",\"ips\":[116,943,256,711]}}", NULL);
|
||||||
|
test("array", "[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]", NULL);
|
||||||
|
test("number array", "[[101,121,-33],[119,911,171],[0,2,-3]]", NULL);
|
||||||
|
test("mix array", "[{\"name\":\"Tom\",\"city\":\"London\",\"country\":\"UK\",\"longitude\":23},{\"name\":\"Jack\",\"city\":\"Birmingham\",\"country\":\"UK\",\"longitude\":-22}]", NULL);
|
||||||
|
test("unicode", "\"\\u5C71\\u5DDD\\u7570\\u57DF\\u98A8\\u6708\\u540C\\u5929\"", "\"山川異域風月同天\"");
|
||||||
|
test("utf8", "\"山川異域風月同天\"", NULL);
|
||||||
|
test("double", "12.34", "12.340000");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
#include <msgpack.h>
|
#include <msgpack.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void print(char const* buf, unsigned int len)
|
void print(char const* buf,size_t len)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for(; i < len ; ++i)
|
for(; i < len ; ++i)
|
@@ -25,6 +25,7 @@ void test()
|
|||||||
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) {
|
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msgpack_unpacked_destroy(&msg);
|
||||||
msgpack_sbuffer_destroy(&buf);
|
msgpack_sbuffer_destroy(&buf);
|
||||||
}
|
}
|
||||||
|
|
@@ -25,7 +25,7 @@ void test()
|
|||||||
|
|
||||||
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) {
|
while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) {
|
||||||
}
|
}
|
||||||
|
msgpack_unpacked_destroy(&msg);
|
||||||
msgpack_sbuffer_destroy(&buf);
|
msgpack_sbuffer_destroy(&buf);
|
||||||
}
|
}
|
||||||
|
|
@@ -1,72 +0,0 @@
|
|||||||
IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1)
|
|
||||||
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")
|
|
||||||
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")
|
|
||||||
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 ()
|
|
@@ -1,125 +0,0 @@
|
|||||||
// 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_float32(float v) {
|
|
||||||
std::stringstream ss;
|
|
||||||
ss << v;
|
|
||||||
m_s += ss.str();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
bool visit_float64(double v) {
|
|
||||||
std::stringstream ss;
|
|
||||||
ss << v;
|
|
||||||
m_s += ss.str();
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,248 +0,0 @@
|
|||||||
// 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;
|
|
||||||
}
|
|
@@ -1,43 +0,0 @@
|
|||||||
// 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>>());
|
|
||||||
}
|
|
||||||
}
|
|
1
external/boost/predef
vendored
1
external/boost/predef
vendored
Submodule external/boost/predef deleted from 560ff5298e
1
external/boost/preprocessor
vendored
1
external/boost/preprocessor
vendored
Submodule external/boost/preprocessor deleted from 56090c56b5
@@ -1,43 +0,0 @@
|
|||||||
FIND_PACKAGE (GTest REQUIRED)
|
|
||||||
FIND_PACKAGE (ZLIB REQUIRED)
|
|
||||||
FIND_PACKAGE (Boost REQUIRED COMPONENTS system filesystem)
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES (
|
|
||||||
${GTEST_INCLUDE_DIRS}
|
|
||||||
${ZLIB_INCLUDE_DIRS}
|
|
||||||
${Boost_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
LIST (APPEND check_PROGRAMS
|
|
||||||
regression_runner.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
LINK_DIRECTORIES (
|
|
||||||
${Boost_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
FOREACH (source_file ${check_PROGRAMS})
|
|
||||||
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
|
||||||
ADD_EXECUTABLE (
|
|
||||||
${source_file_we}
|
|
||||||
${source_file}
|
|
||||||
)
|
|
||||||
TARGET_LINK_LIBRARIES (${source_file_we}
|
|
||||||
msgpackc
|
|
||||||
${GTEST_BOTH_LIBRARIES}
|
|
||||||
${ZLIB_LIBRARIES}
|
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
|
||||||
${Boost_LIBRARIES}
|
|
||||||
)
|
|
||||||
ADD_TEST (${source_file_we} ${source_file_we})
|
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
||||||
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Wno-mismatched-tags -g")
|
|
||||||
IF ("${MSGPACK_SAN}" STREQUAL "ASAN")
|
|
||||||
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
|
|
||||||
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
|
|
||||||
ELSEIF ("${MSGPACK_SAN}" STREQUAL "UBSAN")
|
|
||||||
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
|
|
||||||
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDFOREACH ()
|
|
@@ -1,50 +0,0 @@
|
|||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <gtest/gtest.h>
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "unpack_pack_fuzzer.cpp"
|
|
||||||
|
|
||||||
using ::testing::TestWithParam;
|
|
||||||
using ::testing::ValuesIn;
|
|
||||||
|
|
||||||
|
|
||||||
std::vector<std::string> ListDirectory(const std::string& path) {
|
|
||||||
std::vector<std::string> v;
|
|
||||||
|
|
||||||
boost::filesystem::path p(path);
|
|
||||||
boost::filesystem::directory_iterator f{p};
|
|
||||||
|
|
||||||
if(boost::filesystem::is_directory(p)) {
|
|
||||||
while (f != boost::filesystem::directory_iterator{}) {
|
|
||||||
v.push_back((*f++).path().string());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
class UnpackPackFuzzerRegressionTest : public ::testing::TestWithParam<std::string> {
|
|
||||||
public:
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST_P(UnpackPackFuzzerRegressionTest, Returns0) {
|
|
||||||
auto fpath = GetParam();
|
|
||||||
std::ifstream in(fpath, std::ifstream::binary);
|
|
||||||
if (!in) {
|
|
||||||
FAIL() << fpath << " not found";
|
|
||||||
}
|
|
||||||
in.seekg(0, in.end);
|
|
||||||
size_t length = in.tellg();
|
|
||||||
in.seekg(0, in.beg);
|
|
||||||
std::vector<char> bytes(length);
|
|
||||||
in.read(bytes.data(), bytes.size());
|
|
||||||
assert(in);
|
|
||||||
EXPECT_EQ(0, LLVMFuzzerTestOneInput(reinterpret_cast<const uint8_t *>(bytes.data()),
|
|
||||||
bytes.size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(UnpackPackFuzzerRegressions,
|
|
||||||
UnpackPackFuzzerRegressionTest,
|
|
||||||
::testing::ValuesIn(ListDirectory("../../fuzz/unpack_pack_fuzzer_regressions")));
|
|
@@ -1,23 +0,0 @@
|
|||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
|
||||||
try {
|
|
||||||
// NOTE(derwolfe): by default the limits are set at 2^32-1 length. I'm
|
|
||||||
// setting these at far smaller values to avoid OOMs
|
|
||||||
const int test_limit = 1000;
|
|
||||||
msgpack::object_handle unpacked = msgpack::unpack(reinterpret_cast<const char *>(data),
|
|
||||||
size,
|
|
||||||
nullptr,
|
|
||||||
nullptr,
|
|
||||||
msgpack::unpack_limit(test_limit,
|
|
||||||
test_limit,
|
|
||||||
test_limit,
|
|
||||||
test_limit,
|
|
||||||
test_limit,
|
|
||||||
test_limit));
|
|
||||||
msgpack::sbuffer sbuf;
|
|
||||||
msgpack::pack(sbuf, unpacked.get());
|
|
||||||
} catch (...) {
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
<EFBFBD>
|
|
@@ -1 +0,0 @@
|
|||||||
<EFBFBD>
|
|
@@ -1,2 +0,0 @@
|
|||||||
<EFBFBD><01><02><03><04><05><06><07><08> <09>
|
|
||||||
<EFBFBD><0B><0C>
|
|
Binary file not shown.
Binary file not shown.
@@ -1,22 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2009 FURUHASHI Sadayuki
|
|
||||||
//
|
|
||||||
// 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 "msgpack/object.hpp"
|
|
||||||
#include "msgpack/iterator.hpp"
|
|
||||||
#include "msgpack/zone.hpp"
|
|
||||||
#include "msgpack/pack.hpp"
|
|
||||||
#include "msgpack/null_visitor.hpp"
|
|
||||||
#include "msgpack/parse.hpp"
|
|
||||||
#include "msgpack/unpack.hpp"
|
|
||||||
#include "msgpack/x3_parse.hpp"
|
|
||||||
#include "msgpack/x3_unpack.hpp"
|
|
||||||
#include "msgpack/sbuffer.hpp"
|
|
||||||
#include "msgpack/vrefbuffer.hpp"
|
|
||||||
#include "msgpack/version.hpp"
|
|
||||||
#include "msgpack/type.hpp"
|
|
@@ -1,19 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_ADAPTOR_BASE_HPP
|
|
||||||
#define MSGPACK_ADAPTOR_BASE_HPP
|
|
||||||
|
|
||||||
#include "msgpack/adaptor/adaptor_base_decl.hpp"
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/v2/adaptor/adaptor_base.hpp"
|
|
||||||
#include "msgpack/v3/adaptor/adaptor_base.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_ADAPTOR_BASE_HPP
|
|
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// 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"
|
|
||||||
#include "msgpack/v3/adaptor/adaptor_base_decl.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_ADAPTOR_BASE_DECL_HPP
|
|
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_HPP
|
|
||||||
#define MSGPACK_TYPE_ARRAY_REF_HPP
|
|
||||||
|
|
||||||
#include "msgpack/adaptor/array_ref_decl.hpp"
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/array_ref.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_REFL_HPP
|
|
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// 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"
|
|
||||||
#include "msgpack/v3/adaptor/array_ref_decl.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_REF_DECL_HPP
|
|
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_BOOL_HPP
|
|
||||||
#define MSGPACK_TYPE_BOOL_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/bool.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOL_HPP
|
|
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2015 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_FUSION_HPP
|
|
||||||
#define MSGPACK_TYPE_BOOST_FUSION_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/boost/fusion.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_FUSION_HPP
|
|
@@ -1,18 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
|
||||||
#define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
|
||||||
|
|
||||||
#include "msgpack/adaptor/boost/msgpack_variant_decl.hpp"
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/boost/msgpack_variant.hpp"
|
|
||||||
//#include "msgpack/v2/adaptor/boost/msgpack_variant.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
|
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// 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"
|
|
||||||
#include "msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP
|
|
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_OPTIONAL_HPP
|
|
||||||
#define MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/boost/optional.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
|
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_STRING_REF_HPP
|
|
||||||
#define MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/boost/string_ref.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
|
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// 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
|
|
@@ -1,15 +0,0 @@
|
|||||||
//
|
|
||||||
// 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,15 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CHAR_PTR_HPP
|
|
||||||
#define MSGPACK_TYPE_CHAR_PTR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/char_ptr.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CHAR_PTR_HPP
|
|
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CHECK_CONTAINER_SIZE_HPP
|
|
||||||
#define MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
|
||||||
|
|
||||||
#include "msgpack/adaptor/check_container_size_decl.hpp"
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/check_container_size.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP
|
|
@@ -1,17 +0,0 @@
|
|||||||
//
|
|
||||||
// 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"
|
|
||||||
#include "msgpack/v3/adaptor/check_container_size_decl.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_ARRAY_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_ARRAY_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/array.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_ARRAY_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_ARRAY_CHAR_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/array_char.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_ARRAY_UNSIGNED_CHAR_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_CHRONO_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_CHRONO_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/chrono.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_CHRONO_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_FORWARD_LIST_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/forward_list.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_REFERENCE_WRAPPER_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/reference_wrapper.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_SHARED_PTR_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_SHARED_PTR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/shared_ptr.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_SHARED_PTR_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2019 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_CPP11_TIMESPEC_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_TIMESPEC_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/timespec.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_TIMESPEC_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_TUPLE_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_TUPLE_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/tuple.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_TUPLE_HPP
|
|
@@ -1,16 +0,0 @@
|
|||||||
//
|
|
||||||
// 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_CPP11_UNIQUE_PTR_HPP
|
|
||||||
#define MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP
|
|
||||||
|
|
||||||
#include "msgpack/v1/adaptor/cpp11/unique_ptr.hpp"
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user