mirror of
				https://github.com/msgpack/msgpack-c.git
				synced 2025-10-22 08:02:08 +02:00 
			
		
		
		
	Compare commits
	
		
			10 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 7df967142d | ||
|   | 437400c6fe | ||
|   | ae8de13ab6 | ||
|   | 39433e8588 | ||
|   | 94c9bc2ddc | ||
|   | 1088aa55af | ||
|   | 66a5fcf8f1 | ||
|   | bb0617bd47 | ||
|   | f642b70e6a | ||
|   | 3f4ffb9386 | 
							
								
								
									
										56
									
								
								.github/depends/boost.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								.github/depends/boost.sh
									
									
									
									
										vendored
									
									
								
							| @@ -1,56 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| usage() |  | ||||||
| { |  | ||||||
|   cat <<EOL |  | ||||||
|   -b   - 32-bit or 64-bit library, maybe 32, 64 or both |  | ||||||
|   -t   - the toolset, maybe gcc, clang or both |  | ||||||
| EOL |  | ||||||
| } |  | ||||||
|  |  | ||||||
| build_boost() |  | ||||||
| { |  | ||||||
|   BASE=`pwd`/.. |  | ||||||
|   ./b2 -j4 --toolset=$1 --prefix=${BASE}/usr --libdir="${BASE}/usr/$1/lib$2" --with-chrono --with-context --with-filesystem --with-system --with-timer address-model=$2 install |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bit="64" |  | ||||||
| toolset="gcc" |  | ||||||
|  |  | ||||||
| while getopts "b:t:" c; do |  | ||||||
|   case "$c" in |  | ||||||
|     b) |  | ||||||
|       bit="$OPTARG" |  | ||||||
|       [ "$bit" != "32" ] && [ "$bit" != "64" ] && [ "$bit" != "both" ] && usage && exit 1 |  | ||||||
|       ;; |  | ||||||
|     t) |  | ||||||
|       toolset="$OPTARG" |  | ||||||
|       [ "$toolset" != "gcc" ] && [ "$toolset" != "clang" ] && [ "$toolset" != "both" ] && usage && exit 1 |  | ||||||
|       ;; |  | ||||||
|     ?*) |  | ||||||
|       echo "invalid arguments." && exit 1 |  | ||||||
|       ;; |  | ||||||
|   esac |  | ||||||
| done |  | ||||||
|  |  | ||||||
| wget https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2 |  | ||||||
| tar xf boost_1_71_0.tar.bz2 |  | ||||||
| cd boost_1_71_0 |  | ||||||
| ./bootstrap.sh |  | ||||||
|  |  | ||||||
| build() |  | ||||||
| { |  | ||||||
|   if [ "$bit" = "both" ]; then |  | ||||||
|     build_boost $1 32 |  | ||||||
|     build_boost $1 64 |  | ||||||
|   else |  | ||||||
|     build_boost $1 $bit |  | ||||||
|   fi |  | ||||||
| } |  | ||||||
|  |  | ||||||
| if [ "$toolset" = "both" ]; then |  | ||||||
|   build gcc |  | ||||||
|   build clang |  | ||||||
| else |  | ||||||
|   build $toolset |  | ||||||
| fi |  | ||||||
							
								
								
									
										62
									
								
								.github/workflows/coverage.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								.github/workflows/coverage.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,62 +0,0 @@ | |||||||
| name: coverage |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     types: [opened, synchronize] |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|     - 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: Cache boost |  | ||||||
|       id: cache-boost |  | ||||||
|       uses: actions/cache@v1 |  | ||||||
|       with: |  | ||||||
|         path: usr |  | ||||||
|         key: ${{ runner.os }}-boost-20200107 |  | ||||||
|     - name: Build boost |  | ||||||
|       if: steps.cache-boost.outputs.cache-hit != 'true' |  | ||||||
|       run: ./.github/depends/boost.sh -b both -t gcc |  | ||||||
|     - 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_CXX17=ON -DMSGPACK_32BIT=OFF -DMSGPACK_BOOST=ON -DBUILD_SHARED_LIBS=ON -DMSGPACK_CHAR_SIGN=signed -DMSGPACK_USE_X3_PARSE=ON -DMSGPACK_ENABLE_CXX=ON -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" |  | ||||||
							
								
								
									
										304
									
								
								.github/workflows/gha.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										304
									
								
								.github/workflows/gha.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,304 +0,0 @@ | |||||||
| name: CI |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     types: [opened, synchronize] |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|     - master |  | ||||||
|     tags: |  | ||||||
|     - '*' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   macos: |  | ||||||
|     runs-on: macos-latest |  | ||||||
|     strategy: |  | ||||||
|       matrix: |  | ||||||
|         pattern: [0, 1, 2, 3] |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: Cache boost |  | ||||||
|       id: cache-boost |  | ||||||
|       uses: actions/cache@v1 |  | ||||||
|       with: |  | ||||||
|         path: usr |  | ||||||
|         key: ${{ runner.os }}-boost-20200107 |  | ||||||
|     - name: Build boost |  | ||||||
|       if: steps.cache-boost.outputs.cache-hit != 'true' |  | ||||||
|       run: ./.github/depends/boost.sh -b 64 -t clang |  | ||||||
|     - name: build and test |  | ||||||
|       env: |  | ||||||
|         CC: clang |  | ||||||
|         CXX: clang++ |  | ||||||
|       shell: bash |  | ||||||
|       run: | |  | ||||||
|         BASE=`pwd`; |  | ||||||
|  |  | ||||||
|         # matrix config |  | ||||||
|         if [ ${{ matrix.pattern }} == 0 ]; then |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export BOOST="ON" |  | ||||||
|           SHARED="ON" |  | ||||||
|           export CHAR_SIGN="unsigned" |  | ||||||
|           export API_VERSION="1" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 1 ]; then |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export BOOST="ON" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="3" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 2 ]; then |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 3 ]; then |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="unsigned" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         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}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/clang/lib${ARCH}/cmake" 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 |  | ||||||
|  |  | ||||||
|   linux: |  | ||||||
|     runs-on: ubuntu-18.04 |  | ||||||
|     strategy: |  | ||||||
|       matrix: |  | ||||||
|         pattern: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: install depends |  | ||||||
|       run: | |  | ||||||
|         sudo apt-get update |  | ||||||
|         sudo apt-get install g++-multilib clang-8 valgrind |  | ||||||
|     - name: Cache boost |  | ||||||
|       id: cache-boost |  | ||||||
|       uses: actions/cache@v1 |  | ||||||
|       with: |  | ||||||
|         path: usr |  | ||||||
|         key: ${{ runner.os }}-boost-20200107 |  | ||||||
|     - name: Build boost |  | ||||||
|       if: steps.cache-boost.outputs.cache-hit != 'true' |  | ||||||
|       run: ./.github/depends/boost.sh -b both -t gcc |  | ||||||
|     - 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 BOOST="ON" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="unsigned" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 1 ]; then |  | ||||||
|           export CC=clang |  | ||||||
|           export CXX=clang++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export ARCH="32" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 2 ]; then |  | ||||||
|           export CC=clang |  | ||||||
|           export CXX=clang++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export BOOST="ON" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="3" |  | ||||||
|           export X3_PARSE="ON" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 3 ]; then |  | ||||||
|           export CC=clang |  | ||||||
|           export CXX=clang++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="32" |  | ||||||
|           export SHARED="OFF" |  | ||||||
|           export CHAR_SIGN="unsigned" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 4 ]; then |  | ||||||
|           export CC=gcc |  | ||||||
|           export CXX=g++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 5 ]; then |  | ||||||
|           export CC=gcc |  | ||||||
|           export CXX=g++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export CXX17="ON" |  | ||||||
|           export ARCH="32" |  | ||||||
|           export BOOST="ON" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="unsigned" |  | ||||||
|           export API_VERSION="3" |  | ||||||
|           export X3_PARSE="ON" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 6 ]; then |  | ||||||
|           export CC=gcc |  | ||||||
|           export CXX=g++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export SHARED="ON" |  | ||||||
|           export CHAR_SIGN="unsigned" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 7 ]; then |  | ||||||
|           export CC=gcc |  | ||||||
|           export CXX=g++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export ARCH="32" |  | ||||||
|           export BOOST="ON" |  | ||||||
|           export SHARED="OFF" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="1" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 8 ]; then |  | ||||||
|           export CC=gcc |  | ||||||
|           export CXX=g++ |  | ||||||
|           ACTION="ci/build_cmake.sh" |  | ||||||
|           export ARCH="32" |  | ||||||
|           export BOOST="ON" |  | ||||||
|           export SHARED="OFF" |  | ||||||
|           export CHAR_SIGN="signed" |  | ||||||
|           export API_VERSION="2" |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 9 ]; then |  | ||||||
|           export CC=clang |  | ||||||
|           export CXX=clang++ |  | ||||||
|           ACTION="ci/build_regression.sh" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export SAN="UBSAN" |  | ||||||
|           export MSGPACK_FUZZ_REGRESSION="ON" |  | ||||||
|           export CTEST_OUTPUT_ON_FAILURE=1 |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 10 ]; then |  | ||||||
|           export CC=clang |  | ||||||
|           export CXX=clang++ |  | ||||||
|           ACTION="ci/build_regression.sh" |  | ||||||
|           export ARCH="64" |  | ||||||
|           export SAN="ASAN" |  | ||||||
|           export MSGPACK_FUZZ_REGRESSION="ON" |  | ||||||
|           export CTEST_OUTPUT_ON_FAILURE=1 |  | ||||||
|         fi |  | ||||||
|         if [ ${{ matrix.pattern }} == 11 ]; 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}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" CMAKE_PREFIX_PATH="${BASE}/usr/gcc/lib${ARCH}/cmake" CFLAGS="-Werror -g" CXXFLAGS="-Werror -g" MSGPACK_SAN="${SAN}" ${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 |  | ||||||
|   windows: |  | ||||||
|     runs-on: windows-2016 |  | ||||||
|     strategy: |  | ||||||
|       matrix: |  | ||||||
|         pattern: [0, 1, 2, 3] |  | ||||||
|     steps: |  | ||||||
|     - uses: actions/checkout@v1 |  | ||||||
|     - name: Cache vcpkg |  | ||||||
|       id: cache-vcpkg |  | ||||||
|       uses: actions/cache@v1.0.3 |  | ||||||
|       with: |  | ||||||
|         path: C:/vcpkg/installed/x64-windows |  | ||||||
|         key: ${{ runner.os }}-vcpkg |  | ||||||
|     - name: Build dependencies |  | ||||||
|       if: steps.cache-vcpkg.outputs.cache-hit != 'true' |  | ||||||
|       shell: powershell |  | ||||||
|       run: | |  | ||||||
|         vcpkg install gtest:x64-windows |  | ||||||
|         vcpkg install zlib:x64-windows |  | ||||||
|     - name: Build and test |  | ||||||
|       shell: powershell |  | ||||||
|       run: | |  | ||||||
|         if (${{ matrix.pattern }} -eq 0) { |  | ||||||
|           $CPP11="-DMSGPACK_CXX11=OFF" |  | ||||||
|           $BOOST="-DMSGPACK_BOOST=OFF" |  | ||||||
|         } |  | ||||||
|         if (${{ matrix.pattern }} -eq 1) { |  | ||||||
|           $CPP11="-DMSGPACK_CXX11=OFF" |  | ||||||
|           $BOOST="-DMSGPACK_BOOST=ON" |  | ||||||
|         } |  | ||||||
|         if (${{ matrix.pattern }} -eq 2) { |  | ||||||
|           $CPP11="-DMSGPACK_CXX11=ON" |  | ||||||
|           $BOOST="-DMSGPACK_BOOST=OFF" |  | ||||||
|         } |  | ||||||
|         if (${{ matrix.pattern }} -eq 3) { |  | ||||||
|           $CPP11="-DMSGPACK_CXX11=ON" |  | ||||||
|           $BOOST="-DMSGPACK_BOOST=ON" |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         $CUR=(Get-Location).Path |  | ||||||
|         md build |  | ||||||
|         cd build |  | ||||||
|         cmake -A x64 -DBOOST_ROOT="$env:BOOST_ROOT_1_72_0" -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" $CPP11 $BOOST "-DCMAKE_CXX_FLAGS=/D_VARIADIC_MAX=10 /EHsc /D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING" .. |  | ||||||
|         if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } |  | ||||||
|         cmake --build . --config Release |  | ||||||
|         $pathbak="$env:PATH" |  | ||||||
|         $env:PATH="C:\vcpkg\installed\x64-windows\bin;$CUR\build\Release;$pathbak" |  | ||||||
|         ctest -V |  | ||||||
|         if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } |  | ||||||
|         $env:PATH=$pathbak |  | ||||||
							
								
								
									
										91
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | |||||||
|  | language: cpp | ||||||
|  | os: | ||||||
|  |   - linux | ||||||
|  |   - osx | ||||||
|  | cache: | ||||||
|  |   - apt | ||||||
|  | compiler: | ||||||
|  |   - clang | ||||||
|  |   - gcc | ||||||
|  | os: | ||||||
|  |   - osx | ||||||
|  |   - linux | ||||||
|  | before_install: | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:h-rayflood/llvm-upper; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi | ||||||
|  | install: | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-4.8-multilib g++-4.8-multilib; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.6; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 90; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32gcc1; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-i386; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32z1-dev; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32stdc++6; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y bzip2; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-dbg; fi | ||||||
|  |   - wget https://googletest.googlecode.com/files/gtest-1.7.0.zip | ||||||
|  |   - wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2 && tar xjf valgrind-3.10.1.tar.bz2 && cd valgrind-3.10.1 && ./configure && make && sudo make install && cd .. | ||||||
|  |  | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew unlink boost; fi | ||||||
|  |   - if [ "$BOOST" == "boost" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.zip && unzip -q boost_1_58_0.zip && cd boost_1_58_0 && ./bootstrap.sh && ./b2 --with-timer --with-chrono address-model="$ARCH" > /dev/null && sudo ./b2 --with-timer --with-chrono address-model="$ARCH" install > /dev/null && cd ..; fi | ||||||
|  |  | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && g++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && g++ -m32 src/gtest-all.cc -I. -Iinclude -c && g++ -m32 src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mkdir /usr/local/lib32 && sudo mv *.a /usr/local/lib32 && cd ..; fi | ||||||
|  |   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && clang++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && cd ..; fi | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   - ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" | ||||||
|  |   - ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 CHAR_SIGN="signed" | ||||||
|  |   - ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="signed" | ||||||
|  |   - ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 SHARED="OFF" CHAR_SIGN="unsigned" | ||||||
|  |   - ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC=""                 CHAR_SIGN="signed" | ||||||
|  |   - ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" | ||||||
|  |   - ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC=""                 CHAR_SIGN="unsigned" | ||||||
|  |   - ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed" | ||||||
|  |  | ||||||
|  | before_script: | ||||||
|  |  - export PATH=/usr/local/bin:$PATH && rm -rf install | ||||||
|  |  | ||||||
|  | matrix: | ||||||
|  |   exclude: | ||||||
|  |     - os: osx | ||||||
|  |       compiler: gcc | ||||||
|  |     - os: osx | ||||||
|  |       env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 CHAR_SIGN="signed" | ||||||
|  |     - os: osx | ||||||
|  |       env: ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 SHARED="OFF" CHAR_SIGN="unsigned" | ||||||
|  |     - os: osx | ||||||
|  |       env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" | ||||||
|  |     - os: osx | ||||||
|  |       env: ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed" | ||||||
|  |  | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 CHAR_SIGN="signed" | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="signed" | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 SHARED="OFF" CHAR_SIGN="unsigned" | ||||||
|  |  | ||||||
|  |     - os: linux | ||||||
|  |       compiler: clang | ||||||
|  |       env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC=""                 CHAR_SIGN="signed" | ||||||
|  |     - os: linux | ||||||
|  |       compiler: clang | ||||||
|  |       env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" CHAR_SIGN="unsigned" | ||||||
|  |     - os: linux | ||||||
|  |       compiler: clang | ||||||
|  |       env: ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC=""                 CHAR_SIGN="unsigned" | ||||||
|  |     - os: linux | ||||||
|  |       compiler: clang | ||||||
|  |       env: ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" CHAR_SIGN="signed" | ||||||
|  |  | ||||||
|  | script: | ||||||
|  |   - git clean -xdf && CMAKE_LIBRARY_PATH=${LIBPATH} ${ACTION} ${VERSION} ${ARCH} ${BOOST} ${BOOST_INC} ${CHAR_SIGN} | ||||||
							
								
								
									
										190
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,189 +1,9 @@ | |||||||
| # 2020-06-05 version 3.3.0 | # 2016-03-06 version 1.4.1 | ||||||
|   * 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 |   * Fix TARGET_OS_IPHONE checking (#436, #438) | ||||||
|   * Fix snprintf return value checking (#821) |   * Fix invalid front() call for empty container (#435. #437) | ||||||
|   * Remove some warnings (#819) |   * Fix compile error on g++6 (C++11 only) (#426, #428) | ||||||
|   * Fix fbuffer result checking (#812) |   * Fix zone size expansion logic (#423, #427) | ||||||
|   * Fix temporary object handling (#807) |  | ||||||
|   * Improve cmake support (#804) |  | ||||||
|   * Fix invalid `int main` parameter (#800) |  | ||||||
|   * Improve supporting platform (#797, #817) |  | ||||||
|   * Fix ZLIB error handling (#795) |  | ||||||
|   * Remove unused variable (#793) |  | ||||||
|   * Improve integer overflow checking (#792) |  | ||||||
|  |  | ||||||
| # 2019-05-27 version 3.2.0 |  | ||||||
|  |  | ||||||
|   * Fix invalid include (#783) |  | ||||||
|   * Add timespec support (#781) |  | ||||||
|   * Fix unchecked fnprintf on C (#780) |  | ||||||
|   * Improve integer overflow checking on C (#776) |  | ||||||
|   * Fix warnings on `-Wconversion` (#770, #777, #784) |  | ||||||
|   * Fix invalid passed by value on aligned_zone_size_visitor (#764) |  | ||||||
|   * Improve windows support (#757, #779) |  | ||||||
|   * Fix msgpack::object size caluclation error (#754) |  | ||||||
|   * Fix memory error on example code (#753) |  | ||||||
|   * Fix redundant memory allocation on C (#747) |  | ||||||
|   * Fix msgpack::type::tuple base class conversion (#743) |  | ||||||
|  |  | ||||||
| # 2018-09-09 version 3.1.1 |  | ||||||
|  |  | ||||||
|   * Add force endian set functionality (#736) |  | ||||||
|   * Fix vrefbuffer memory management problem (#733) |  | ||||||
|   * Fix msvc specific problem (#731, #732) |  | ||||||
|   * Update boost from 1.61.0 to 1.68.0 (#730) |  | ||||||
|   * Fix msgpack_timestamp type mismatch bug (#726) |  | ||||||
|  |  | ||||||
| # 2018-08-10 version 3.1.0 |  | ||||||
|  |  | ||||||
|   * Improve documents (#687, #718) |  | ||||||
|   * Add fuzzer support (#689) |  | ||||||
|   * Fix msgpack::object union member access bug (#694) |  | ||||||
|   * Improve cross platform configuration (#704) |  | ||||||
|   * Fix out of range dereference bug of EXT (#705) |  | ||||||
|   * Add timestamp support. std::chrono::system_clock::time_point is mapped to TIMESTAMP (#706) |  | ||||||
|   * Add minimal timestamp support for C. The type `msgpack_timestamp` and the function `msgpack_object_to_timestamp()` are introduced (#707) |  | ||||||
|   * Improve MSGPACK_DEFINE family name confliction probability (#710) |  | ||||||
|   * Add no static-library build option (BUILD_SHARED_LIBS=ON) (#713, #717, #722) |  | ||||||
|   * Add header only cmake target (#721) |  | ||||||
|   * Add `std::byte` adaptor (#719) |  | ||||||
|   * Remove some warnings (#720) |  | ||||||
|  |  | ||||||
| # 2018-05-12 version 3.0.1 |  | ||||||
|  |  | ||||||
|   * Add fuzz directory to release tar ball (#686) |  | ||||||
|   * Add include file checking for X-Code (#683) |  | ||||||
|  |  | ||||||
| # 2018-05-09 version 3.0.0 |  | ||||||
|  |  | ||||||
| ## << breaking changes >> |  | ||||||
|  |  | ||||||
|   * Change offset parameter updating rule. If parse error happens, offset is updated to the error position. (#639, #666) |  | ||||||
|  |  | ||||||
| ## << other updates >> |  | ||||||
|  |  | ||||||
|   * Improve cross platform configuration (#655, #677) |  | ||||||
|   * Improve build system (#647) |  | ||||||
|   * Improve user class adaptor (#645, #673) |  | ||||||
|   * Improve msgpack::object visitation logic (#676) |  | ||||||
|   * Remove some warnings (#641, 659) |  | ||||||
|   * Add `->` and `*` operators to object_handle (#635) |  | ||||||
|   * Improve CI environment (#631, #634, #643, #657, #662, #668) |  | ||||||
|   * Improve documents (#630, #661) |  | ||||||
|   * Refactoring (#670) |  | ||||||
|   * Add OSS-Fuzz support (#672, #674, #675, #678) |  | ||||||
|  |  | ||||||
| # 2017-08-04 version 2.1.5 |  | ||||||
|   * Improve cross platform configuration (#624) |  | ||||||
|   * Add boost asio examples (including zlib) (#610) |  | ||||||
|   * Remove some warnings (#611) |  | ||||||
|   * Fix unpack visitor to treat float32/64 correctly (#613) |  | ||||||
|   * Improve documents (#616) |  | ||||||
|   * Fix alignment problem on some platform (#617, #518) |  | ||||||
|   * Fix conflict std::tuple, std::pair, and boost::fusion::sequence problem (#619) |  | ||||||
|  |  | ||||||
| # 2017-08-03 version 2.1.4 (Invalid) |  | ||||||
|   * See https://github.com/msgpack/msgpack-c/issues/623 |  | ||||||
|  |  | ||||||
| # 2017-06-15 version 2.1.3 |  | ||||||
|   * Improve build system (#603) |  | ||||||
|   * Add C++17 adaptors `std::optional` and `std::string_view`. (#607, #608) |  | ||||||
|   * Improve cross platform configuration (#601) |  | ||||||
|   * Remove some warnings (#599, #602, #605) |  | ||||||
|  |  | ||||||
| # 2017-06-07 version 2.1.2 |  | ||||||
|  |  | ||||||
| * Improve documents (#565) |  | ||||||
|   * Fix empty map parse bug (#568) |  | ||||||
|   * Improve build system (#569, #570, #572, #579, #591, #592) |  | ||||||
|   * Remove some warnings (#574, #578, #586, #588) |  | ||||||
|   * Improve cross platform configuration (#577, #582) |  | ||||||
|   * Add cmake package config support (#580) |  | ||||||
|   * Fix streaming unpack bug (#585) |  | ||||||
|  |  | ||||||
| # 2017-02-04 version 2.1.1 |  | ||||||
|  |  | ||||||
|   * Fix unpacker's buffer management bug (#561) |  | ||||||
|   * Add boost string_view adaptor (#558) |  | ||||||
|   * Remove some warnings (#557, #559) |  | ||||||
|   * Improve coding style (#556) |  | ||||||
|  |  | ||||||
| # 2017-01-10 version 2.1.0 |  | ||||||
|  |  | ||||||
| ## << breaking changes >> |  | ||||||
|  |  | ||||||
|   * Fix object internal data type is float if msgpack format is float32 (#531) |  | ||||||
|  |  | ||||||
| ## << recommended changes >> |  | ||||||
|  |  | ||||||
|   * Add `FLOAT64` type. Please use it instead of `DOUBLE` (#531) |  | ||||||
|   * Add `FLOAT32` type. Please use it instead of `FLOAT` (#531) |  | ||||||
|  |  | ||||||
| ## << other updates >> |  | ||||||
|  |  | ||||||
|   * Add iterator based parse/unpack function(experimental) (#553) |  | ||||||
|   * Add `[[deprecated]]` attribute for C++14 (#552) |  | ||||||
|   * Fix `msgpack_unpack()` return code (#548) |  | ||||||
|   * Fix integer overflow (#547, #549, #550) |  | ||||||
|   * Add example codes (#542) |  | ||||||
|   * Add MSGPACK_NVP. You can use not only variable name but also any strings (#535) |  | ||||||
|   * Fix and Improve build system (#532, #545) |  | ||||||
|   * Fix `gcc_atomic.hpp` include path (#529, #530) |  | ||||||
|   * Improve CI environment (#526) |  | ||||||
|   * Improve documents (#524) |  | ||||||
|   * Add msgpack_unpacker_next_with_size() function (#515) |  | ||||||
|   * Fix `as()` applying condition (#511) |  | ||||||
|   * Fix fbuffer write (#504) |  | ||||||
|   * Add gcc bug workaround (#499) |  | ||||||
|   * Improve object print (#497, #500, #505, #533) |  | ||||||
|   * Remove some warnings (#495, #506, #508, #513, #528, #538, #545) |  | ||||||
|  |  | ||||||
| # 2016-06-25 version 2.0.0 |  | ||||||
|  |  | ||||||
| ## << breaking changes >> |  | ||||||
|  |  | ||||||
|   * Removed autotools support. Use cmake instead (#476, #479) |  | ||||||
|   * Removed pointer version of msgpack::unpack APIs. Use reference version instead (#453) |  | ||||||
|   * Removed MSGPACK_DISABLE_LEGACY_CONVERT. msgpack::object::convert(T*) is removed by default. Use msgpack::object::convert(T&) instead (#451) |  | ||||||
|   * Removed msgpacl::type::nil. Use nil_t or define MSGPACK_USE_LECACY_NIL (#444) |  | ||||||
|   * Removed std::string to msgpack::object conversion (#434) |  | ||||||
|  |  | ||||||
| ## << recommended changes >> |  | ||||||
|  |  | ||||||
|   * Replaced msgpack::unpacked with msgpack::object_handle. msgpack::unpacked is kept as a typedef of msgpack::object_handle. (#448) |  | ||||||
|  |  | ||||||
| ## << other updates >> |  | ||||||
|  |  | ||||||
|   * Add strict size checking adaptor. Relaxed tuple conversion (#489) |  | ||||||
|   * Fix and Improve example codes (#487) |  | ||||||
|   * Add C++/CLI support for nullptr (#481) |  | ||||||
|   * Update the boost libraries that are contained by msgpack-c (#475) |  | ||||||
|   * Fix gcc_atomic.hpp location (#474) |  | ||||||
|   * Add C-Style array support (#466, #488) |  | ||||||
|   * Fix include file dependency (#464) |  | ||||||
|   * Add a visitor version of unpack API (#461) |  | ||||||
|   * Fix JSON string conversion from "nil" to "null" (#458) |  | ||||||
|   * Fix and Improve build system (#455, #471, #473, #486, #491) |  | ||||||
|   * Fix comments (#452) |  | ||||||
|   * Fix unintentional msgpack::zone moving problem (#447) |  | ||||||
|   * Fix operator>> and << for msgpack::object (#443) |  | ||||||
|   * Fix C++03 msgpack::zone::clear() memory access violation bug (#441) |  | ||||||
|   * Fix TARGET_OS_IPHONE checking (#436) |  | ||||||
|   * Fix invalid front() call for empty container (#435) |  | ||||||
|   * Fix compile error on g++6 (C++11 only) (#426, #430) |  | ||||||
|   * Fix zone size expansion logic (#423) |  | ||||||
|   * Fix wrong hader file dependency (#421) |  | ||||||
|   * Fix msvc specific problem (#420) |  | ||||||
|   * Add v2 API support (#415) |  | ||||||
|  |  | ||||||
| # 2016-01-22 version 1.4.0 | # 2016-01-22 version 1.4.0 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										441
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										441
									
								
								CMakeLists.txt
									
									
									
									
									
								
							| @@ -1,10 +1,4 @@ | |||||||
| CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12) | CMAKE_MINIMUM_REQUIRED (VERSION 2.8.6) | ||||||
|  |  | ||||||
| IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR |  | ||||||
|     (CMAKE_VERSION VERSION_EQUAL 3.1)) |  | ||||||
|     CMAKE_POLICY(SET CMP0054 NEW) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| PROJECT (msgpack) | PROJECT (msgpack) | ||||||
|  |  | ||||||
| FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents) | FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents) | ||||||
| @@ -16,17 +10,20 @@ 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") | SET (GNUCXX_STD_SUPPORT_VERSION "4.3") | ||||||
|  | SET (GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION "4.4") | ||||||
|  |  | ||||||
| OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF) | OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF) | ||||||
| OPTION (MSGPACK_32BIT "32bit compile" OFF) | OPTION (MSGPACK_32BIT "32bit compile" OFF) | ||||||
| OPTION (MSGPACK_BOOST "Using boost libraries" OFF) | OPTION (MSGPACK_BOOST "Using boost libraries" OFF) | ||||||
|  |  | ||||||
|  | SET (CMAKE_CXX_FLAGS "-DMSGPACK_DISABLE_LEGACY_NIL ${CMAKE_CXX_FLAGS}") | ||||||
|  | SET (CMAKE_CXX_FLAGS "-DMSGPACK_DISABLE_LEGACY_CONVERT ${CMAKE_CXX_FLAGS}") | ||||||
|  |  | ||||||
| IF (APPLE) | IF (APPLE) | ||||||
|     SET(CMAKE_MACOSX_RPATH ON) |     SET(CMAKE_MACOSX_RPATH ON) | ||||||
|     SET(CMAKE_SKIP_BUILD_RPATH FALSE) |     SET(CMAKE_SKIP_BUILD_RPATH FALSE) | ||||||
| @@ -39,48 +36,27 @@ IF (APPLE) | |||||||
|     ENDIF () |     ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_USE_X3_PARSE) | IF (MSGPACK_CXX11) | ||||||
|    IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |    IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|       SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}") |       SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") | ||||||
|    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|       SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}") |       SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") | ||||||
|    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|       SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE ${CMAKE_CXX_FLAGS}") |  | ||||||
|       IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) |       IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) | ||||||
|           MESSAGE ( FATAL_ERROR "MSVC doesn't support C++14.") |           MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11.") | ||||||
|       ENDIF () |       ENDIF () | ||||||
|    ENDIF () |    ENDIF () | ||||||
| ELSE () | ELSE () | ||||||
|    IF (MSGPACK_CXX17) |    IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|       IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |       IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_STD_SUPPORT_VERSION}) OR | ||||||
|          SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}") |           (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_STD_SUPPORT_VERSION})) | ||||||
|       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |           SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}") | ||||||
|          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 () |       ENDIF () | ||||||
|    ELSEIF (MSGPACK_CXX11) |    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|       IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |       SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}") | ||||||
|          SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") |    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |       IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18) | ||||||
|          SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") |           SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_CPP03 ${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 () |    ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
| @@ -97,24 +73,15 @@ IF (MSGPACK_32BIT) | |||||||
|    ENDIF () |    ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON) |  | ||||||
|  |  | ||||||
| IF (MSGPACK_BOOST) | IF (MSGPACK_BOOST) | ||||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}") |    SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}") | ||||||
|  |    SET (Boost_USE_STATIC_LIBS        ON) # only find static libs | ||||||
|    SET (Boost_USE_MULTITHREADED      ON) |    SET (Boost_USE_MULTITHREADED      ON) | ||||||
|    SET (Boost_USE_STATIC_RUNTIME    OFF) |    SET (Boost_USE_STATIC_RUNTIME    OFF) | ||||||
|    FIND_PACKAGE (Boost REQUIRED COMPONENTS chrono context system timer) |    FIND_PACKAGE (Boost COMPONENTS chrono timer system) | ||||||
|    INCLUDE_DIRECTORIES ( |    INCLUDE_DIRECTORIES ( | ||||||
|       ${Boost_INCLUDE_DIRS} |        ${MSGPACK_BOOST_DIR} | ||||||
|    ) |    ) | ||||||
|    LINK_DIRECTORIES ( |  | ||||||
|       ${Boost_LIBRARY_DIRS} |  | ||||||
|    ) |  | ||||||
|    IF (MSGPACK_BOOST_DIR) |  | ||||||
|       INCLUDE_DIRECTORIES ( |  | ||||||
|          ${MSGPACK_BOOST_DIR} |  | ||||||
|       ) |  | ||||||
|    ENDIF () |  | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_CHAR_SIGN) | IF (MSGPACK_CHAR_SIGN) | ||||||
| @@ -122,12 +89,6 @@ IF (MSGPACK_CHAR_SIGN) | |||||||
|    SET (CMAKE_CXX_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_CXX_FLAGS}") |    SET (CMAKE_CXX_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_CXX_FLAGS}") | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_DEFAULT_API_VERSION) |  | ||||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=${MSGPACK_DEFAULT_API_VERSION} ${CMAKE_CXX_FLAGS}") |  | ||||||
| ELSE () |  | ||||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=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) | FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h) | ||||||
| FOREACH (F ${PREDEF_FILES}) | FOREACH (F ${PREDEF_FILES}) | ||||||
|    SET(M "Converting ${F}") |    SET(M "Converting ${F}") | ||||||
| @@ -135,7 +96,7 @@ FOREACH (F ${PREDEF_FILES}) | |||||||
|    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT) |    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT) | ||||||
|    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) |    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) | ||||||
|    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) |    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) | ||||||
|    FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT}) |    FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT}) | ||||||
| ENDFOREACH () | ENDFOREACH () | ||||||
|  |  | ||||||
| FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp) | FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp) | ||||||
| @@ -145,64 +106,19 @@ FOREACH (F ${PREPROCESSOR_FILES}) | |||||||
|    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT) |    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT) | ||||||
|    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) |    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) | ||||||
|    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) |    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) | ||||||
|    FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT}) |    FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT}) | ||||||
| ENDFOREACH () | 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 () | ||||||
|  | OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON) | ||||||
|  |  | ||||||
| OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON) | OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON) | ||||||
|  | OPTION (MSGPACK_ENABLE_SHARED "Build shared libaries in addition to static libraries." ON) | ||||||
| OPTION (MSGPACK_CXX_ONLY "Build only C++ libraries (header-only)." OFF) |  | ||||||
| IF (MSGPACK_CXX_ONLY) |  | ||||||
|     IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED) |  | ||||||
|         MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by MSGPACK_CXX_ONLY") |  | ||||||
|     ENDIF () |  | ||||||
|     SET (MSGPACK_ENABLE_SHARED OFF) |  | ||||||
|     IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC) |  | ||||||
|         MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by MSGPACK_CXX_ONLY") |  | ||||||
|     ENDIF () |  | ||||||
|     SET (MSGPACK_ENABLE_STATIC OFF) |  | ||||||
|     IF (DEFINED MSGPACK_ENABLE_CXX AND NOT MSGPACK_ENABLE_CXX) |  | ||||||
|         MESSAGE(WARNING "MSGPACK_ENABLE_CXX is overridden to ON by MSGPACK_CXX_ONLY") |  | ||||||
|     ENDIF () |  | ||||||
|     SET (MSGPACK_ENABLE_CXX ON) |  | ||||||
| ELSE () |  | ||||||
|     IF (DEFINED BUILD_SHARED_LIBS) |  | ||||||
|         IF (BUILD_SHARED_LIBS) |  | ||||||
|             IF (DEFINED MSGPACK_ENABLE_SHARED AND NOT MSGPACK_ENABLE_SHARED) |  | ||||||
|                 MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to ON by BUILD_SHARED_LIBS") |  | ||||||
|             ENDIF () |  | ||||||
|             SET (MSGPACK_ENABLE_SHARED ON) |  | ||||||
|             IF (DEFINED MSGPACK_ENABLE_STATIC AND MSGPACK_ENABLE_STATIC) |  | ||||||
|                 MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to OFF by BUILD_SHARED_LIBS") |  | ||||||
|             ENDIF () |  | ||||||
|             SET (MSGPACK_ENABLE_STATIC OFF) |  | ||||||
|         ELSE () |  | ||||||
|             IF (DEFINED MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_SHARED) |  | ||||||
|                 MESSAGE(WARNING "MSGPACK_ENABLE_SHARED is overridden to OFF by BUILD_SHARED_LIBS") |  | ||||||
|             ENDIF () |  | ||||||
|             SET (MSGPACK_ENABLE_SHARED OFF) |  | ||||||
|             IF (DEFINED MSGPACK_ENABLE_STATIC AND NOT MSGPACK_ENABLE_STATIC) |  | ||||||
|                 MESSAGE(WARNING "MSGPACK_ENABLE_STATIC is overridden to ON by BUILD_SHARED_LIBS") |  | ||||||
|             ENDIF () |  | ||||||
|             SET (MSGPACK_ENABLE_STATIC ON) |  | ||||||
|         ENDIF () |  | ||||||
|     ELSE () |  | ||||||
|         IF (NOT DEFINED MSGPACK_ENABLE_SHARED) |  | ||||||
|             SET (MSGPACK_ENABLE_SHARED ON) |  | ||||||
|         ENDIF () |  | ||||||
|         IF (NOT DEFINED MSGPACK_ENABLE_STATIC) |  | ||||||
|             SET (MSGPACK_ENABLE_STATIC ON) |  | ||||||
|         ENDIF () |  | ||||||
|         SET (BUILD_SHARED_LIBS ${MSGPACK_ENABLE_SHARED}) |  | ||||||
|     ENDIF () |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| INCLUDE (CheckCXXSourceCompiles) | INCLUDE (CheckCXXSourceCompiles) | ||||||
| CHECK_CXX_SOURCE_COMPILES (" | CHECK_CXX_SOURCE_COMPILES (" | ||||||
| @@ -216,7 +132,113 @@ int main(int argc, char * argv[]) | |||||||
| } | } | ||||||
| " MSGPACK_ENABLE_GCC_CXX_ATOMIC) | " MSGPACK_ENABLE_GCC_CXX_ATOMIC) | ||||||
|  |  | ||||||
| INCLUDE (Files.cmake) |  | ||||||
|  | LIST (APPEND msgpackc_SOURCES | ||||||
|  |     src/unpack.c | ||||||
|  |     src/objectc.c | ||||||
|  |     src/version.c | ||||||
|  |     src/vrefbuffer.c | ||||||
|  |     src/zone.c | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | LIST (APPEND msgpackc_HEADERS | ||||||
|  |     include/msgpack/pack_define.h | ||||||
|  |     include/msgpack/pack_template.h | ||||||
|  |     include/msgpack/unpack_define.h | ||||||
|  |     include/msgpack/unpack_template.h | ||||||
|  |     include/msgpack/util.h | ||||||
|  |     include/msgpack/sysdep.h | ||||||
|  |     include/msgpack/gcc_atomic.h | ||||||
|  |     include/msgpack.h | ||||||
|  |     include/msgpack/sbuffer.h | ||||||
|  |     include/msgpack/version.h | ||||||
|  |     include/msgpack/version_master.h | ||||||
|  |     include/msgpack/vrefbuffer.h | ||||||
|  |     include/msgpack/zbuffer.h | ||||||
|  |     include/msgpack/fbuffer.h | ||||||
|  |     include/msgpack/pack.h | ||||||
|  |     include/msgpack/unpack.h | ||||||
|  |     include/msgpack/object.h | ||||||
|  |     include/msgpack/zone.h | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/predef/*.h) | ||||||
|  |  | ||||||
|  | LIST (APPEND msgpackc_HEADERS ${PREDEF_FILES}) | ||||||
|  | LIST (APPEND msgpackc_HEADERS include/msgpack/predef.h) | ||||||
|  |  | ||||||
|  | IF (MSGPACK_ENABLE_CXX) | ||||||
|  |     LIST (APPEND msgpack_HEADERS | ||||||
|  |         include/msgpack.hpp | ||||||
|  |         include/msgpack/adaptor/adaptor_base.hpp | ||||||
|  |         include/msgpack/adaptor/array_ref.hpp | ||||||
|  |         include/msgpack/adaptor/bool.hpp | ||||||
|  |         include/msgpack/adaptor/boost/fusion.hpp | ||||||
|  |         include/msgpack/adaptor/boost/msgpack_variant.hpp | ||||||
|  |         include/msgpack/adaptor/boost/optional.hpp | ||||||
|  |         include/msgpack/adaptor/boost/string_ref.hpp | ||||||
|  |         include/msgpack/adaptor/char_ptr.hpp | ||||||
|  |         include/msgpack/adaptor/check_container_size.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/array.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/array_char.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/array_unsigned_char.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/forward_list.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/reference_wrapper.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/shared_ptr.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/tuple.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/unique_ptr.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/unordered_map.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/unordered_set.hpp | ||||||
|  |         include/msgpack/adaptor/define.hpp | ||||||
|  |         include/msgpack/adaptor/deque.hpp | ||||||
|  |         include/msgpack/adaptor/detail/cpp03_define_array.hpp | ||||||
|  |         include/msgpack/adaptor/detail/cpp03_define_map.hpp | ||||||
|  |         include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp | ||||||
|  |         include/msgpack/adaptor/detail/cpp11_define_array.hpp | ||||||
|  |         include/msgpack/adaptor/detail/cpp11_define_map.hpp | ||||||
|  |         include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp | ||||||
|  |         include/msgpack/adaptor/ext.hpp | ||||||
|  |         include/msgpack/adaptor/fixint.hpp | ||||||
|  |         include/msgpack/adaptor/float.hpp | ||||||
|  |         include/msgpack/adaptor/int.hpp | ||||||
|  |         include/msgpack/adaptor/list.hpp | ||||||
|  |         include/msgpack/adaptor/map.hpp | ||||||
|  |         include/msgpack/adaptor/msgpack_tuple.hpp | ||||||
|  |         include/msgpack/adaptor/nil.hpp | ||||||
|  |         include/msgpack/adaptor/pair.hpp | ||||||
|  |         include/msgpack/adaptor/raw.hpp | ||||||
|  |         include/msgpack/adaptor/v4raw.hpp | ||||||
|  |         include/msgpack/adaptor/set.hpp | ||||||
|  |         include/msgpack/adaptor/string.hpp | ||||||
|  |         include/msgpack/adaptor/tr1/unordered_map.hpp | ||||||
|  |         include/msgpack/adaptor/tr1/unordered_set.hpp | ||||||
|  |         include/msgpack/adaptor/vector.hpp | ||||||
|  |         include/msgpack/adaptor/vector_bool.hpp | ||||||
|  |         include/msgpack/adaptor/vector_char.hpp | ||||||
|  |         include/msgpack/adaptor/vector_unsigned_char.hpp | ||||||
|  |         include/msgpack/cpp_config.hpp | ||||||
|  |         include/msgpack/detail/cpp03_zone.hpp | ||||||
|  |         include/msgpack/detail/cpp11_zone.hpp | ||||||
|  |         include/msgpack/fbuffer.hpp | ||||||
|  |         include/msgpack/iterator.hpp | ||||||
|  |         include/msgpack/meta.hpp | ||||||
|  |         include/msgpack/object.hpp | ||||||
|  |         include/msgpack/object_fwd.hpp | ||||||
|  |         include/msgpack/pack.hpp | ||||||
|  |         include/msgpack/sbuffer.hpp | ||||||
|  |         include/msgpack/type.hpp | ||||||
|  |         include/msgpack/unpack.hpp | ||||||
|  |         include/msgpack/version.hpp | ||||||
|  |         include/msgpack/versioning.hpp | ||||||
|  |         include/msgpack/vrefbuffer.hpp | ||||||
|  |         include/msgpack/zbuffer.hpp | ||||||
|  |         include/msgpack/zone.hpp | ||||||
|  |     ) | ||||||
|  |     FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/preprocessor/*.hpp) | ||||||
|  |  | ||||||
|  |     LIST (APPEND msgpackc_HEADERS ${PREPROCESSOR_FILES}) | ||||||
|  |     LIST (APPEND msgpackc_HEADERS include/msgpack/preprocessor.hpp) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
| EXECUTE_PROCESS ( | EXECUTE_PROCESS ( | ||||||
|     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack |     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack | ||||||
| @@ -228,87 +250,28 @@ CONFIGURE_FILE ( | |||||||
|     @ONLY |     @ONLY | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | INCLUDE_DIRECTORIES ( | ||||||
|  |     ./ | ||||||
|  |     include/ | ||||||
|  |     ${CMAKE_CURRENT_BINARY_DIR}/include/ | ||||||
|  | ) | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) | IF (MSGPACK_ENABLE_SHARED) | ||||||
|     ADD_LIBRARY (msgpackc |     ADD_LIBRARY (msgpackc SHARED | ||||||
|         ${msgpackc_SOURCES} |         ${msgpackc_SOURCES} | ||||||
|         ${msgpackc_HEADERS} |         ${msgpackc_HEADERS} | ||||||
|     ) |     ) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
|  | ADD_LIBRARY (msgpackc-static STATIC | ||||||
|  |     ${msgpackc_SOURCES} | ||||||
|  |     ${msgpackc_HEADERS} | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc") | ||||||
|  | IF (MSGPACK_ENABLE_SHARED) | ||||||
|  |     SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX "_import.lib") | ||||||
|     SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0) |     SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0) | ||||||
|  |  | ||||||
|     TARGET_INCLUDE_DIRECTORIES (msgpackc |  | ||||||
|         PUBLIC |  | ||||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |  | ||||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> |  | ||||||
|             $<INSTALL_INTERFACE:include> |  | ||||||
|         PRIVATE |  | ||||||
|             ${CMAKE_CURRENT_SOURCE_DIR} |  | ||||||
|     ) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| 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) |  | ||||||
|     ADD_LIBRARY (msgpackc-static STATIC |  | ||||||
|         ${msgpackc_SOURCES} |  | ||||||
|         ${msgpackc_HEADERS} |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|     TARGET_INCLUDE_DIRECTORIES (msgpackc-static |  | ||||||
|         PUBLIC |  | ||||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |  | ||||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> |  | ||||||
|             $<INSTALL_INTERFACE:include> |  | ||||||
|         PRIVATE |  | ||||||
|             ${CMAKE_CURRENT_SOURCE_DIR} |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|     SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc") |  | ||||||
|  |  | ||||||
|     IF (MSGPACK_ENABLE_SHARED) |  | ||||||
|         IF (MSVC) |  | ||||||
|             SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX "_import.lib") |  | ||||||
|         ELSEIF (MINGW) |  | ||||||
|             SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX ".dll.a") |  | ||||||
|         ENDIF () |  | ||||||
|     ENDIF () |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| # enable regression testing |  | ||||||
| IF ("${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON" AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |  | ||||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}") |  | ||||||
|    SET (Boost_USE_MULTITHREADED      ON) |  | ||||||
|    SET (Boost_USE_STATIC_RUNTIME    OFF) |  | ||||||
|  |  | ||||||
|    enable_testing () |  | ||||||
|    ADD_SUBDIRECTORY (fuzz) |  | ||||||
|    SET (MSGPACK_BUILD_EXAMPLES OFF) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| IF (MSGPACK_GEN_COVERAGE) |  | ||||||
|     IF (NOT MSGPACK_BUILD_TESTS) |  | ||||||
|         MESSAGE(FATAL_ERROR "Coverage requires -DMSGPACK_BUILD_TESTS=ON") |  | ||||||
|     ENDIF () |  | ||||||
|     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 () |  | ||||||
|  |  | ||||||
|     INCLUDE(CodeCoverage) |  | ||||||
|     SET (CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} ${COVERAGE_FLAGS}") |  | ||||||
|     SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_FLAGS}") |  | ||||||
|  |  | ||||||
|     SETUP_TARGET_FOR_COVERAGE(coverage make coverage test) |  | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_BUILD_TESTS) | IF (MSGPACK_BUILD_TESTS) | ||||||
| @@ -321,20 +284,20 @@ IF (MSGPACK_BUILD_TESTS) | |||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|     IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) |     IF (MSGPACK_ENABLE_SHARED) | ||||||
|         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC") |         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 -DPIC") | ||||||
|     ENDIF () |  | ||||||
|     IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) |  | ||||||
|        SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra" ) |  | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |     SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3" ) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|     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 () |  | ||||||
|     IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") |     IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR | ||||||
|  |         (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION})) | ||||||
|  |     SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|     ENDIF () |     ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| @@ -346,26 +309,9 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | |||||||
|     ENDIF () |     ENDIF () | ||||||
| ENDIF () | 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 () |  | ||||||
|  |  | ||||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10") | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10") | ||||||
|     SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX) |     SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX) | ||||||
| ENDIF () | ENDIF() | ||||||
|  |  | ||||||
| IF ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "sparc") |  | ||||||
|     SET (CMAKE_C_FLAGS   "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_C_FLAGS}") |  | ||||||
|     SET (CMAKE_CXX_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_CXX_FLAGS}") |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| IF (NOT DEFINED CMAKE_INSTALL_BINDIR) |  | ||||||
|     SET(CMAKE_INSTALL_BINDIR bin) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| IF (NOT DEFINED CMAKE_INSTALL_LIBDIR) | IF (NOT DEFINED CMAKE_INSTALL_LIBDIR) | ||||||
|     SET(CMAKE_INSTALL_LIBDIR lib) |     SET(CMAKE_INSTALL_LIBDIR lib) | ||||||
| @@ -375,28 +321,15 @@ IF (MSGPACK_BUILD_EXAMPLES) | |||||||
|     ADD_SUBDIRECTORY (example) |     ADD_SUBDIRECTORY (example) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) | IF (MSGPACK_ENABLE_SHARED) | ||||||
|     SET (MSGPACK_INSTALLTARGETS msgpackc) |     SET (MSGPACK_INSTALLTARGETS msgpackc msgpackc-static) | ||||||
|  | ELSE() | ||||||
|  |     SET (MSGPACK_INSTALLTARGETS msgpackc-static) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSION VERSION_EQUAL 3.0))) | INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} DESTINATION ${CMAKE_INSTALL_LIBDIR}) | ||||||
|     LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-cxx) | INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX}) | ||||||
| ENDIF () | IF (NOT MSVC) | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) |  | ||||||
|     LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets |  | ||||||
|     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |  | ||||||
|     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |  | ||||||
|     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |  | ||||||
| ) |  | ||||||
| FOREACH (file ${msgpackc_HEADERS}) |  | ||||||
|     GET_FILENAME_COMPONENT (dir ${file} PATH) |  | ||||||
|     INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir}) |  | ||||||
| ENDFOREACH () |  | ||||||
| IF (NOT MSGPACK_CXX_ONLY AND 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 () | ||||||
|  |  | ||||||
| @@ -410,7 +343,6 @@ IF (DOXYGEN_FOUND) | |||||||
|         COMMAND ${CMAKE_COMMAND} -E echo "INPUT              = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c |         COMMAND ${CMAKE_COMMAND} -E echo "INPUT              = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c | ||||||
|         COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL        = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c |         COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL        = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c | ||||||
|         COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME       = \"MessagePack for C\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c |         COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME       = \"MessagePack for C\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c | ||||||
|         COMMAND ${CMAKE_COMMAND} -E echo "STRIP_FROM_PATH    = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c |  | ||||||
|     ) |     ) | ||||||
|     IF (DOXYGEN_DOT_FOUND) |     IF (DOXYGEN_DOT_FOUND) | ||||||
|         LIST (APPEND Doxyfile_c_CONTENT |         LIST (APPEND Doxyfile_c_CONTENT | ||||||
| @@ -429,7 +361,6 @@ IF (DOXYGEN_FOUND) | |||||||
|         COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY   = doc_cpp" >> ${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 "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 "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) |     IF (DOXYGEN_DOT_FOUND) | ||||||
|         LIST (APPEND Doxyfile_cpp_CONTENT |         LIST (APPEND Doxyfile_cpp_CONTENT | ||||||
| @@ -448,41 +379,3 @@ IF (DOXYGEN_FOUND) | |||||||
|         DEPENDS doxygen_c doxygen_cpp |         DEPENDS doxygen_c doxygen_cpp | ||||||
|     ) |     ) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| INCLUDE (CMakePackageConfigHelpers) |  | ||||||
|  |  | ||||||
| SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpack") |  | ||||||
|  |  | ||||||
| WRITE_BASIC_PACKAGE_VERSION_FILE ( |  | ||||||
|     msgpack-config-version.cmake |  | ||||||
|     VERSION ${VERSION} |  | ||||||
|     COMPATIBILITY SameMajorVersion |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| IF (NOT CMAKE_VERSION VERSION_LESS 3.0) |  | ||||||
|     EXPORT (EXPORT msgpack-targets |  | ||||||
|         FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpack-targets.cmake" |  | ||||||
|     ) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in |  | ||||||
|     msgpack-config.cmake |  | ||||||
|     INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| IF (NOT MSGPACK_CXX_ONLY) |  | ||||||
|     INSTALL (EXPORT msgpack-targets |  | ||||||
|         FILE |  | ||||||
|             msgpack-targets.cmake |  | ||||||
|         DESTINATION |  | ||||||
|             "${CMAKE_INSTALL_CMAKEDIR}" |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|     INSTALL ( |  | ||||||
|         FILES |  | ||||||
|             "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake" |  | ||||||
|             "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake" |  | ||||||
|         DESTINATION |  | ||||||
|             "${CMAKE_INSTALL_CMAKEDIR}" |  | ||||||
|     ) |  | ||||||
| ENDIF () |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								Doxyfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Doxyfile
									
									
									
									
									
								
							| @@ -281,7 +281,7 @@ TYPEDEF_HIDES_STRUCT   = NO | |||||||
| # causing a significant performance penality. | # causing a significant performance penality. | ||||||
| # If the system has enough physical memory increasing the cache will improve the | # If the system has enough physical memory increasing the cache will improve the | ||||||
| # performance by keeping more symbols in memory. Note that the value works on | # performance by keeping more symbols in memory. Note that the value works on | ||||||
| # a logarithmic scale so increasing the size by one will roughly double the | # a logarithmic scale so increasing the size by one will rougly double the | ||||||
| # memory usage. The cache size is given by this formula: | # memory usage. The cache size is given by this formula: | ||||||
| # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, | # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, | ||||||
| # corresponding to a cache size of 2^16 = 65536 symbols | # corresponding to a cache size of 2^16 = 65536 symbols | ||||||
|   | |||||||
							
								
								
									
										762
									
								
								Files.cmake
									
									
									
									
									
								
							
							
						
						
									
										762
									
								
								Files.cmake
									
									
									
									
									
								
							| @@ -1,762 +0,0 @@ | |||||||
| LIST (APPEND msgpackc_SOURCES |  | ||||||
|     src/objectc.c |  | ||||||
|     src/unpack.c |  | ||||||
|     src/version.c |  | ||||||
|     src/vrefbuffer.c |  | ||||||
|     src/zone.c |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| # For both C and C++ libraries |  | ||||||
| LIST (APPEND msgpackc_HEADERS |  | ||||||
|     include/msgpack/fbuffer.h |  | ||||||
|     include/msgpack/object.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/sysdep.h |  | ||||||
|     include/msgpack/unpack_define.h |  | ||||||
|     include/msgpack/version_master.h |  | ||||||
|     include/msgpack/zbuffer.h |  | ||||||
|     include/msgpack/zone.h |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| IF (NOT MSGPACK_CXX_ONLY) |  | ||||||
|     # Only for C library |  | ||||||
|     LIST (APPEND msgpackc_HEADERS |  | ||||||
|         include/msgpack.h |  | ||||||
|         include/msgpack/gcc_atomic.h |  | ||||||
|         include/msgpack/pack.h |  | ||||||
|         include/msgpack/pack_define.h |  | ||||||
|         include/msgpack/pack_template.h |  | ||||||
|         include/msgpack/sbuffer.h |  | ||||||
|         include/msgpack/timestamp.h |  | ||||||
|         include/msgpack/unpack.h |  | ||||||
|         include/msgpack/unpack_template.h |  | ||||||
|         include/msgpack/util.h |  | ||||||
|         include/msgpack/version.h |  | ||||||
|         include/msgpack/vrefbuffer.h |  | ||||||
|     ) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_CXX) |  | ||||||
|     # Only for C++ library |  | ||||||
|     LIST (APPEND msgpackc_HEADERS |  | ||||||
|         include/msgpack.hpp |  | ||||||
|         include/msgpack/adaptor/adaptor_base.hpp |  | ||||||
|         include/msgpack/adaptor/adaptor_base_decl.hpp |  | ||||||
|         include/msgpack/adaptor/array_ref.hpp |  | ||||||
|         include/msgpack/adaptor/array_ref_decl.hpp |  | ||||||
|         include/msgpack/adaptor/bool.hpp |  | ||||||
|         include/msgpack/adaptor/boost/fusion.hpp |  | ||||||
|         include/msgpack/adaptor/boost/msgpack_variant.hpp |  | ||||||
|         include/msgpack/adaptor/boost/msgpack_variant_decl.hpp |  | ||||||
|         include/msgpack/adaptor/boost/optional.hpp |  | ||||||
|         include/msgpack/adaptor/boost/string_ref.hpp |  | ||||||
|         include/msgpack/adaptor/boost/string_view.hpp |  | ||||||
|         include/msgpack/adaptor/carray.hpp |  | ||||||
|         include/msgpack/adaptor/char_ptr.hpp |  | ||||||
|         include/msgpack/adaptor/check_container_size.hpp |  | ||||||
|         include/msgpack/adaptor/check_container_size_decl.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/array.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/array_char.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/array_unsigned_char.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/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 () |  | ||||||
							
								
								
									
										20
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | SUBDIRS = src test | ||||||
|  |  | ||||||
|  | DOC_FILES = \ | ||||||
|  | 		Doxyfile \ | ||||||
|  | 		README.md \ | ||||||
|  | 		LICENSE_1_0.txt \ | ||||||
|  | 		NOTICE \ | ||||||
|  | 		msgpack_vc8.vcproj \ | ||||||
|  | 		msgpack_vc8.sln | ||||||
|  |  | ||||||
|  | EXTRA_DIST = \ | ||||||
|  | 		$(DOC_FILES) CMakeLists.txt test/CMakeLists.txt example | ||||||
|  |  | ||||||
|  | pkgconfigdir = $(libdir)/pkgconfig | ||||||
|  | pkgconfig_DATA = msgpack.pc | ||||||
|  |  | ||||||
|  | doxygen: | ||||||
|  | 	./preprocess clean | ||||||
|  | 	cd src && $(MAKE) doxygen | ||||||
|  | 	./preprocess | ||||||
| @@ -6,11 +6,10 @@ Currently, RPC implementation is not available. | |||||||
|  |  | ||||||
| # Install | # Install | ||||||
|  |  | ||||||
| ## Install with package manager |  | ||||||
|  |  | ||||||
| ### MacOS with MacPorts | ## Mac OS X with MacPorts | ||||||
|  |  | ||||||
| On MacOS, you can install MessagePack for C using MacPorts. | On Mac OS X, you can install MessagePack for C using MacPorts. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ sudo port install msgpack | $ sudo port install msgpack | ||||||
| @@ -21,47 +20,51 @@ You might need to run `sudo port selfupdate` before installing to update the pac | |||||||
| You can also install via Homebrew. | You can also install via Homebrew. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ brew install msgpack | $ sudo 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. | ||||||
|  |  | ||||||
| ### Windows with vcpkg | ## Other UNIX-like platform with ./configure | ||||||
|  |  | ||||||
| There are several package managers available, and vcpkg is typical. | On the other UNIX-like platforms, download source package from [Releases|http://msgpack.org/releases/cpp/] and run `./configure && make && make install`. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ vcpkg install msgpack:x64-windows | $ wget http://msgpack.org/releases/cpp/msgpack-1.3.0.tar.gz | ||||||
| ``` |  | ||||||
| ## 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 | ||||||
| $ ./bootstrap  # If the 'configure' script already exists, you can omit this step. | $ ./configure | ||||||
|  | $ 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 | ||||||
| @@ -93,7 +96,7 @@ int main(void) { | |||||||
|         /* deserializes it. */ |         /* deserializes it. */ | ||||||
|         msgpack_unpacked msg; |         msgpack_unpacked msg; | ||||||
|         msgpack_unpacked_init(&msg); |         msgpack_unpacked_init(&msg); | ||||||
|         msgpack_unpack_return ret = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); |         bool success = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); | ||||||
|  |  | ||||||
|         /* prints the deserialized object. */ |         /* prints the deserialized object. */ | ||||||
|         msgpack_object obj = msg.data; |         msgpack_object obj = msg.data; | ||||||
| @@ -134,7 +137,7 @@ int main(void) { | |||||||
|            /* deserializes it. */ |            /* deserializes it. */ | ||||||
|            msgpack_unpacked msg; |            msgpack_unpacked msg; | ||||||
|            msgpack_unpacked_init(&msg); |            msgpack_unpacked_init(&msg); | ||||||
|            msgpack_unpack_return ret = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); |            bool success = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); | ||||||
|  |  | ||||||
|            /* prints the deserialized object. */ |            /* prints the deserialized object. */ | ||||||
|            msgpack_object obj = msg.data; |            msgpack_object obj = msg.data; | ||||||
|   | |||||||
| @@ -31,11 +31,11 @@ int main(void) { | |||||||
|         msgpack::pack(sbuf, vec); |         msgpack::pack(sbuf, vec); | ||||||
|  |  | ||||||
|         // deserialize it. |         // deserialize it. | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked msg; | ||||||
|             msgpack::unpack(sbuf.data(), sbuf.size()); |         msgpack::unpack(&msg, sbuf.data(), sbuf.size()); | ||||||
|  |  | ||||||
|         // print the deserialized object. |         // print the deserialized object. | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = msg.get(); | ||||||
|         std::cout << obj << std::endl;  //=> ["Hello", "MessagePack"] |         std::cout << obj << std::endl;  //=> ["Hello", "MessagePack"] | ||||||
|  |  | ||||||
|         // convert it into statically typed object. |         // convert it into statically typed object. | ||||||
| @@ -47,11 +47,13 @@ int main(void) { | |||||||
| Compile it as follows: | Compile it as follows: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ g++ -Ipath_to_msgpack/include hello.cc -o hello | $ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT hello.cc -o hello | ||||||
| $ ./hello | $ ./hello | ||||||
| ["Hello", "MessagePack"] | ["Hello", "MessagePack"] | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140). | ||||||
|  |  | ||||||
| ## Streaming feature | ## Streaming feature | ||||||
|  |  | ||||||
| ```cpp | ```cpp | ||||||
| @@ -59,7 +61,7 @@ $ ./hello | |||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <string> | #include <string> | ||||||
|  |  | ||||||
| int main() { | int main(void) { | ||||||
|         // serializes multiple objects using msgpack::packer. |         // serializes multiple objects using msgpack::packer. | ||||||
|         msgpack::sbuffer buffer; |         msgpack::sbuffer buffer; | ||||||
|  |  | ||||||
| @@ -77,13 +79,13 @@ int main() { | |||||||
|         pac.buffer_consumed(buffer.size()); |         pac.buffer_consumed(buffer.size()); | ||||||
|  |  | ||||||
|         // now starts streaming deserialization. |         // now starts streaming deserialization. | ||||||
|         msgpack::object_handle oh; |         msgpack::unpacked result; | ||||||
|         while(pac.next(oh)) { |         while(pac.next(&result)) { | ||||||
|             std::cout << oh.get() << std::endl; |             std::cout << result.get() << std::endl; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // results: |         // results: | ||||||
|         // $ g++ -Ipath_to_msgpack/include stream.cc -o stream |         // $ g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT stream.cc -o stream | ||||||
|         // $ ./stream |         // $ ./stream | ||||||
|         // "Log message ... 1" |         // "Log message ... 1" | ||||||
|         // "Log message ... 2" |         // "Log message ... 2" | ||||||
| @@ -91,6 +93,8 @@ int main() { | |||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140). | ||||||
|  |  | ||||||
| ### Streaming into an array or map | ### Streaming into an array or map | ||||||
|  |  | ||||||
| ```cpp | ```cpp | ||||||
| @@ -98,7 +102,7 @@ int main() { | |||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <string> | #include <string> | ||||||
|  |  | ||||||
| int main() { | int main(void) { | ||||||
|         // serializes multiple objects into one message containing an array using msgpack::packer. |         // serializes multiple objects into one message containing an array using msgpack::packer. | ||||||
|         msgpack::sbuffer buffer; |         msgpack::sbuffer buffer; | ||||||
|  |  | ||||||
| @@ -139,7 +143,7 @@ public: | |||||||
|     MSGPACK_DEFINE(m_str, m_vec); |     MSGPACK_DEFINE(m_str, m_vec); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| int main() { | int main(void) { | ||||||
|         std::vector<myclass> vec; |         std::vector<myclass> vec; | ||||||
|         // add some elements into vec... |         // add some elements into vec... | ||||||
|  |  | ||||||
| @@ -147,10 +151,10 @@ int main() { | |||||||
|         msgpack::sbuffer sbuf; |         msgpack::sbuffer sbuf; | ||||||
|         msgpack::pack(sbuf, vec); |         msgpack::pack(sbuf, vec); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked msg; | ||||||
|             msgpack::unpack(sbuf.data(), sbuf.size()); |         msgpack::unpack(&msg, sbuf.data(), sbuf.size()); | ||||||
|  |  | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = msg.get(); | ||||||
|  |  | ||||||
|         // you can convert object to myclass directly |         // you can convert object to myclass directly | ||||||
|         std::vector<myclass> rvec; |         std::vector<myclass> rvec; | ||||||
|   | |||||||
							
								
								
									
										71
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,10 +1,9 @@ | |||||||
| `msgpack` for C/C++ | `msgpack` for C/C++ | ||||||
| =================== | =================== | ||||||
|  |  | ||||||
| Version 3.3.0 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) | Version 1.4.1 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) | ||||||
| [](https://codecov.io/gh/msgpack/msgpack-c) |  | ||||||
|  |  | ||||||
| It's like JSON but smaller and faster. | It's like JSON but small and fast. | ||||||
|  |  | ||||||
| Overview | Overview | ||||||
| -------- | -------- | ||||||
| @@ -12,7 +11,7 @@ Overview | |||||||
| [MessagePack](http://msgpack.org/) is an efficient binary serialization | [MessagePack](http://msgpack.org/) is an efficient binary serialization | ||||||
| format, which lets you exchange data among multiple languages like JSON, | format, which lets you exchange data among multiple languages like JSON, | ||||||
| except that it's faster and smaller. Small integers are encoded into a | except that it's faster and smaller. Small integers are encoded into a | ||||||
| single byte and short strings require only one extra byte in | single byte while typical short strings require only one extra byte in | ||||||
| addition to the strings themselves. | addition to the strings themselves. | ||||||
|  |  | ||||||
| Example | Example | ||||||
| @@ -69,7 +68,7 @@ In C++: | |||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  |  | ||||||
| int main() | int main(void) | ||||||
| { | { | ||||||
|     msgpack::type::tuple<int, bool, std::string> src(1, true, "example"); |     msgpack::type::tuple<int, bool, std::string> src(1, true, "example"); | ||||||
|  |  | ||||||
| @@ -84,11 +83,12 @@ int main() | |||||||
|     // deserialize the buffer into msgpack::object instance. |     // deserialize the buffer into msgpack::object instance. | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh = |     msgpack::unpacked result; | ||||||
|         msgpack::unpack(str.data(), str.size()); |  | ||||||
|  |  | ||||||
|     // deserialized object is valid during the msgpack::object_handle instance is alive. |     msgpack::unpack(result, str.data(), str.size()); | ||||||
|     msgpack::object deserialized = oh.get(); |  | ||||||
|  |     // deserialized object is valid during the msgpack::unpacked instance alive. | ||||||
|  |     msgpack::object deserialized = result.get(); | ||||||
|  |  | ||||||
|     // msgpack::object supports ostream. |     // msgpack::object supports ostream. | ||||||
|     std::cout << deserialized << std::endl; |     std::cout << deserialized << std::endl; | ||||||
| @@ -98,10 +98,6 @@ int main() | |||||||
|     msgpack::type::tuple<int, bool, std::string> dst; |     msgpack::type::tuple<int, bool, std::string> dst; | ||||||
|     deserialized.convert(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; |     return 0; | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
| @@ -113,10 +109,12 @@ Usage | |||||||
|  |  | ||||||
| ### C++ Header Only Library | ### C++ Header Only Library | ||||||
|  |  | ||||||
| When you use msgpack on C++, you can just add | When you use msgpack on C++03 and C++11, you can just add | ||||||
| msgpack-c/include to your include path: | msgpack-c/include to your include path: | ||||||
|  |  | ||||||
|     g++ -I msgpack-c/include your_source_file.cpp |     g++ -I msgpack-c/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT your_source_file.cpp | ||||||
|  |  | ||||||
|  | See [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140) and [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140). | ||||||
|  |  | ||||||
| If you want to use C version of msgpack, you need to build it. You can | If you want to use C version of msgpack, you need to build it. You can | ||||||
| also install the C and C++ versions of msgpack. | also install the C and C++ versions of msgpack. | ||||||
| @@ -125,7 +123,36 @@ also install the C and C++ versions of msgpack. | |||||||
|  |  | ||||||
| #### Install from git repository | #### Install from git repository | ||||||
|  |  | ||||||
| ##### Using the Terminal (CLI) | ##### Using autotools | ||||||
|  |  | ||||||
|  | You will need: | ||||||
|  |  | ||||||
|  |  - `gcc >= 4.1.0` or `clang >= 3.3.0` | ||||||
|  |  - `autoconf >= 2.60` | ||||||
|  |  - `automake >= 1.10` | ||||||
|  |  - `libtool >= 2.2.4` | ||||||
|  |  | ||||||
|  | The build steps below are for C and C++03. If compiling for C++11, | ||||||
|  | add `-std=c++11` to the environmental variable `CXXFLAGS` with | ||||||
|  | `export CXXFLAGS="$CXXFLAGS -std=c++11"` prior to following the | ||||||
|  | directions below. | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | $ git clone https://github.com/msgpack/msgpack-c | ||||||
|  | $ cd msgpack-c | ||||||
|  | $ ./bootstrap | ||||||
|  | $ ./configure | ||||||
|  | $ make | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | You can install the resulting library like this: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | $ sudo make install | ||||||
|  | ``` | ||||||
|  | ##### Using cmake | ||||||
|  |  | ||||||
|  | ###### Using the Terminal (CLI) | ||||||
|  |  | ||||||
| You will need: | You will need: | ||||||
|  |  | ||||||
| @@ -140,19 +167,15 @@ C and C++03: | |||||||
|     $ make |     $ make | ||||||
|     $ sudo make install |     $ sudo make install | ||||||
|  |  | ||||||
| If you want to setup C++11 or C++17 version of msgpack instead, | If you want to setup C++11 version of msgpack instead, | ||||||
| execute the following commands: | execute the following commands: | ||||||
|  |  | ||||||
|     $ git clone https://github.com/msgpack/msgpack-c.git |     $ git clone https://github.com/msgpack/msgpack-c.git | ||||||
|     $ cd msgpack-c |     $ cd msgpack-c | ||||||
|     $ cmake -DMSGPACK_CXX[11|17]=ON . |     $ cmake -DMSGPACK_CXX11=ON . | ||||||
|     $ sudo make install |     $ 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. | ##### GUI on Windows | ||||||
|  |  | ||||||
| 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 |  | ||||||
|  |  | ||||||
| Clone msgpack-c git repository. | Clone msgpack-c git repository. | ||||||
|  |  | ||||||
| @@ -179,7 +202,7 @@ the binaries:' text box. | |||||||
|  |  | ||||||
| ### Documentation | ### Documentation | ||||||
|  |  | ||||||
| You can get additional information including the tutorial on the | You can get addtional information on the | ||||||
| [wiki](https://github.com/msgpack/msgpack-c/wiki). | [wiki](https://github.com/msgpack/msgpack-c/wiki). | ||||||
|  |  | ||||||
| Contributing | Contributing | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -1,62 +1,42 @@ | |||||||
| version: 3.3.0.{build} | version: 1.1.0.{build} | ||||||
|  | before_build: | ||||||
| branches: | - appveyor DownloadFile http://googletest.googlecode.com/files/gtest-1.7.0.zip -FileName gtest-1.7.0.zip | ||||||
|   only: | - 7z x gtest-1.7.0.zip > NUL | ||||||
|   - master | - cd gtest-1.7.0 | ||||||
|  |  | ||||||
| image: |  | ||||||
| - Visual Studio 2015 |  | ||||||
| environment: |  | ||||||
|   global: |  | ||||||
|     BOOST_ROOT: C:\Libraries\boost_1_67_0 |  | ||||||
|   matrix: |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
|       msvc: '"Visual Studio 10 2010"' |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
|       msvc: '"Visual Studio 11 2012"' |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
|       msvc: '"Visual Studio 12 2013"' |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=ON |  | ||||||
|       boost: -DMSGPACK_BOOST=ON |  | ||||||
|       msvc: '"Visual Studio 14 2015"' |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=ON |  | ||||||
|       msvc: '"Visual Studio 14 2015"' |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=ON |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
|       msvc: '"Visual Studio 14 2015"' |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
|       msvc: '"Visual Studio 14 2015"' |  | ||||||
| build_script: |  | ||||||
| - appveyor DownloadFile https://github.com/google/googletest/archive/release-1.7.0.zip -FileName googletest-release-1.7.0.zip |  | ||||||
| - 7z x googletest-release-1.7.0.zip > NUL |  | ||||||
| - cd googletest-release-1.7.0 |  | ||||||
| - md build | - md build | ||||||
| - cd build | - cd build | ||||||
| - cmake -G %msvc% -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_FLAGS=/D_VARIADIC_MAX=10 .. | - cmake -DBUILD_SHARED_LIBS=ON .. | ||||||
| - 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.8.tar.gz -FileName zlib-1.2.8.tar.gz | ||||||
| - 7z x zlib-1.2.11.tar.gz > NUL | - 7z x zlib-1.2.8.tar.gz > NUL | ||||||
| - 7z x zlib-1.2.11.tar > NUL | - 7z x zlib-1.2.8.tar > NUL | ||||||
| - cd zlib-1.2.11 | - cd zlib-1.2.8 | ||||||
| - md build | - md build | ||||||
| - cd build | - cd build | ||||||
| - cmake -G %msvc% .. | - cmake .. | ||||||
| - cmake --build . --config Release | - cmake --build . --config Release | ||||||
| - copy zconf.h .. | - copy zconf.h .. | ||||||
| - cd .. | - cd .. | ||||||
| - cd .. | - cd .. | ||||||
|  |  | ||||||
|  | environment: | ||||||
|  |   matrix: | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=ON | ||||||
|  |       boost: -DMSGPACK_BOOST=ON | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=ON | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=ON | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  | build_script: | ||||||
| - md build | - md build | ||||||
| - cd build | - cd build | ||||||
| - cmake -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 %cpp11% %boost% -DMSGPACK_BOOST_DIR=C:\Libraries\\boost_1_58_0 -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8 .. | ||||||
| - cmake --build . --config Release -v | - cmake --build . --config Release | ||||||
|  |  | ||||||
| test_script: | test_script: | ||||||
| - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release | - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release | ||||||
| - ctest -V | - ctest -V | ||||||
|   | |||||||
							
								
								
									
										121
									
								
								bootstrap
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										121
									
								
								bootstrap
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,121 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # vim:ts=4:sw=4 | ||||||
|  | # Calls autotools to build configure script and Makefile.in. | ||||||
|  | # Generated automatically using bootstrapper 0.2.1 | ||||||
|  | # http://bootstrapper.sourceforge.net/ | ||||||
|  | # | ||||||
|  | # Copyright (C) 2002 Anthony Ventimiglia | ||||||
|  | # | ||||||
|  | # This bootstrap script is free software; you can redistribute  | ||||||
|  | # it and/or modify it under the terms of the GNU General Public  | ||||||
|  | # License as published by the Free Software Foundation; either  | ||||||
|  | # version 2 of the License, or (at your option) any later version. | ||||||
|  | # | ||||||
|  | # | ||||||
|  | # Calls proper programs to create configure script and Makefile.in files. | ||||||
|  | # if run with the --clean option, bootstrap removes files it generates. To | ||||||
|  | # clean all autogenerated files (eg: for cvs imports) first run  | ||||||
|  | # make distclean, then bootstrap --clean | ||||||
|  | # see bootstrapper(1) for more infor | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if test x"$1" = x"--help"; then | ||||||
|  | 	echo "$0: automatic bootstrapping utility for GNU Autotools" | ||||||
|  | 	echo "		cleans up old autogenerated files and runs autoconf," | ||||||
|  | 	echo "		automake and aclocal on local directory" | ||||||
|  | 	echo  | ||||||
|  | 	echo "		--clean		clean up auto-generated files without" | ||||||
|  | 	echo "					creating new scripts" | ||||||
|  | 	echo  | ||||||
|  | 	exit 0 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | mkdir -p ac | ||||||
|  | test -f AUTHORS   || touch AUTHORS | ||||||
|  | test -f COPYING   || touch COPYING | ||||||
|  | test -f ChangeLog || cp -f CHANGELOG.md ChangeLog | ||||||
|  | test -f NEWS      || touch NEWS | ||||||
|  | test -f NOTICE    || touch NOTICE | ||||||
|  | test -f README    || cp -f README.md README | ||||||
|  |  | ||||||
|  | ACLOCAL="aclocal" | ||||||
|  | ACLOCAL_FILES="aclocal.m4" | ||||||
|  | ALWAYS_CLEAN="config.status config.log config.cache libtool" | ||||||
|  | AUTOCONF="autoconf" | ||||||
|  | AUTOCONF_FILES="configure" | ||||||
|  | AUTOHEADER="autoheader" | ||||||
|  | AUTOHEADER_FILES="" | ||||||
|  | AUTOMAKE="automake --add-missing --copy" | ||||||
|  | AUTOMAKE_FILES="config.sub stamp-h.in ltmain.sh missing mkinstalldirs install-sh config.guess" | ||||||
|  | CONFIG_AUX_DIR="." | ||||||
|  | CONFIG_FILES="stamp-h ltconfig" | ||||||
|  | CONFIG_HEADER="" | ||||||
|  | if [ x`uname` = x"Darwin" ]; then | ||||||
|  | 	LIBTOOLIZE="glibtoolize --force --copy" | ||||||
|  | else | ||||||
|  | 	LIBTOOLIZE="libtoolize --force --copy" | ||||||
|  | fi | ||||||
|  | LIBTOOLIZE_FILES="config.sub ltmain.sh config.guess" | ||||||
|  | RM="rm" | ||||||
|  | SUBDIRS="[]" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # These are files created by configure, so we'll always clean them | ||||||
|  | for i in $ALWAYS_CLEAN; do | ||||||
|  | 	test -f $i && \ | ||||||
|  | 	$RM $i | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if test x"$1" = x"--clean"; then | ||||||
|  | 	# | ||||||
|  | 	#Clean Files left by previous bootstrap run | ||||||
|  | 	# | ||||||
|  | 	if test -n "$CONFIG_AUX_DIR";  | ||||||
|  | 		then CONFIG_AUX_DIR="$CONFIG_AUX_DIR/" | ||||||
|  | 	fi | ||||||
|  | 	# Clean Libtoolize generated files | ||||||
|  | 	for cf in $LIBTOOLIZE_FILES; do | ||||||
|  | 		cf="$CONFIG_AUX_DIR$cf" | ||||||
|  | 		test -f $cf && \ | ||||||
|  | 		$RM $cf | ||||||
|  | 	done | ||||||
|  | 	#aclocal.m4 created by aclocal | ||||||
|  | 	test -f $ACLOCAL_FILES && $RM $ACLOCAL_FILES | ||||||
|  | 	#Clean Autoheader Generated files | ||||||
|  | 	for cf in $AUTOHEADER_FILES; do | ||||||
|  | 		cf=$CONFIG_AUX_DIR$cf | ||||||
|  | 		test -f $cf && \ | ||||||
|  | 		$RM $cf | ||||||
|  | 	done | ||||||
|  | 	# remove config header (Usaually config.h) | ||||||
|  | 	test -n "$CONFIG_HEADER" && test -f $CONFIG_HEADER && $RM $CONFIG_HEADER | ||||||
|  | 	#Clean Automake generated files | ||||||
|  | 	for cf in $AUTOMAKE_FILES; do | ||||||
|  | 		cf=$CONFIG_AUX_DIR$cf | ||||||
|  | 		test -f $cf && \ | ||||||
|  | 		$RM $cf | ||||||
|  | 	done | ||||||
|  | 	for i in $SUBDIRS; do | ||||||
|  | 		test -f $i/Makefile.in && \ | ||||||
|  | 		$RM $i/Makefile.in | ||||||
|  | 	done | ||||||
|  | 	#Autoconf generated files | ||||||
|  | 	for cf in $AUTOCONF_FILES; do | ||||||
|  | 		test -f $cf && \ | ||||||
|  | 		$RM $cf | ||||||
|  | 	done | ||||||
|  | 	for cf in $CONFIG_FILES; do | ||||||
|  | 		cf="$CONFIG_AUX_DIR$cf" | ||||||
|  | 		test -f $cf && \ | ||||||
|  | 		$RM $cf | ||||||
|  | 	done | ||||||
|  | else | ||||||
|  | 	$LIBTOOLIZE | ||||||
|  | 	$ACLOCAL | ||||||
|  | 	$AUTOHEADER | ||||||
|  | 	$AUTOMAKE | ||||||
|  | 	$AUTOCONF | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								ci/build_autotools.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								ci/build_autotools.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | ./bootstrap | ||||||
|  | ret=$? | ||||||
|  | if [ $ret -ne 0 ] | ||||||
|  | then | ||||||
|  |     exit $ret | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ $1 = "cpp11" ] | ||||||
|  | then | ||||||
|  |     cpp11="-std=c++11" | ||||||
|  | else | ||||||
|  |     cpp11="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ $2 = "32" ] | ||||||
|  | then | ||||||
|  |     bit32="-m32" | ||||||
|  | else | ||||||
|  |     bit32="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ $3 = "boost" ] | ||||||
|  | then | ||||||
|  |     boost="-DMSGPACK_USE_BOOST" | ||||||
|  | else | ||||||
|  |     boost="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | ./configure CFLAGS="$bit32 -f${CHAR_SIGN}-char" CXXFLAGS="$bit32 -f${CHAR_SIGN}-char $cpp11 $boost -I$4" | ||||||
|  |  | ||||||
|  | ret=$? | ||||||
|  | if [ $ret -ne 0 ] | ||||||
|  | then | ||||||
|  |     exit $ret | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | make | ||||||
|  |  | ||||||
|  | ret=$? | ||||||
|  | if [ $ret -ne 0 ] | ||||||
|  | then | ||||||
|  |     exit $ret | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | make check | ||||||
|  |  | ||||||
|  | ret=$? | ||||||
|  | if [ $ret -ne 0 ] | ||||||
|  | then | ||||||
|  |     exit $ret | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | make install DESTDIR=`pwd`/build/install | ||||||
|  |  | ||||||
|  | ret=$? | ||||||
|  | if [ $ret -ne 0 ] | ||||||
|  | then | ||||||
|  |     exit $ret | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | exit 0 | ||||||
| @@ -16,16 +16,42 @@ then | |||||||
|     exit $ret |     exit $ret | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ "${ARCH}" == "32" ] | if [ $1 = "cpp11" ] | ||||||
| then | then | ||||||
|     export BIT32="ON" |     cpp11="-DMSGPACK_CXX11=ON" | ||||||
|     export ARCH_FLAG="-m32" |  | ||||||
| else | else | ||||||
|     export BIT32="OFF" |     cpp11="" | ||||||
|     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} -DCMAKE_CXX_FLAGS=${ARCH_FLAG} .. | if [ $2 = "32" ] | ||||||
|  | then | ||||||
|  |     bit32="-DMSGPACK_32BIT=ON" | ||||||
|  | else | ||||||
|  |     bit32="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ $3 = "boost" ] | ||||||
|  | then | ||||||
|  |     boost="-DMSGPACK_BOOST=ON" | ||||||
|  | else | ||||||
|  |     boost="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ "$4" != "" ] | ||||||
|  | then | ||||||
|  |     boost_dir="-DMSGPACK_BOOST_DIR=$4" | ||||||
|  | else | ||||||
|  |     boost_dir="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ "$5" = "OFF" ] | ||||||
|  | then | ||||||
|  |     shared="-DMSGPACK_ENABLE_SHARED=OFF" | ||||||
|  | else | ||||||
|  |     shared="" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | cmake $cpp11 $bit32 $boost $boost_dir $shared -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} .. | ||||||
|  |  | ||||||
| ret=$? | ret=$? | ||||||
| if [ $ret -ne 0 ] | if [ $ret -ne 0 ] | ||||||
| @@ -41,7 +67,7 @@ then | |||||||
|     exit $ret |     exit $ret | ||||||
| fi | fi | ||||||
|  |  | ||||||
| ctest -VV | make test | ||||||
|  |  | ||||||
| ret=$? | ret=$? | ||||||
| if [ $ret -ne 0 ] | if [ $ret -ne 0 ] | ||||||
| @@ -57,7 +83,7 @@ then | |||||||
|     exit $ret |     exit $ret | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ "${ARCH}" != "32" ] && [ `uname` = "Linux" ] | if [ "$2" != "32" ] | ||||||
| then | then | ||||||
|     ctest -T memcheck | tee memcheck.log |     ctest -T memcheck | tee memcheck.log | ||||||
|  |  | ||||||
| @@ -74,39 +100,4 @@ then | |||||||
|     fi |     fi | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ "${ARCH}" != "32" ] |  | ||||||
| then |  | ||||||
|     mkdir install-test |  | ||||||
|  |  | ||||||
|     ret=$? |  | ||||||
|     if [ $ret -ne 0 ] |  | ||||||
|     then |  | ||||||
|         exit $ret |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     cd install-test |  | ||||||
|  |  | ||||||
|     ret=$? |  | ||||||
|     if [ $ret -ne 0 ] |  | ||||||
|     then |  | ||||||
|         exit $ret |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     cmake -DCMAKE_PREFIX_PATH=`pwd`/../install/usr/local/lib/cmake ../../example/cmake |  | ||||||
|  |  | ||||||
|     ret=$? |  | ||||||
|     if [ $ret -ne 0 ] |  | ||||||
|     then |  | ||||||
|         exit $ret |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     make |  | ||||||
|  |  | ||||||
|     ret=$? |  | ||||||
|     if [ $ret -ne 0 ] |  | ||||||
|     then |  | ||||||
|         exit $ret |  | ||||||
|     fi |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exit 0 | exit 0 | ||||||
|   | |||||||
| @@ -1,59 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cd example/cmake |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| rm -f msgpack-c |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| ln -s ../.. msgpack-c |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| mkdir build |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cd build |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cmake -DEXAMPLE_MSGPACK_EMBEDDED=ON .. |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| make example example-static |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exit 0 |  | ||||||
| @@ -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 |  | ||||||
| @@ -1,55 +0,0 @@ | |||||||
| # 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) |  | ||||||
| 	# 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}" STREQUAL "Clang" AND NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") |  | ||||||
| 		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() |  | ||||||
							
								
								
									
										36
									
								
								codecov.yml
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								codecov.yml
									
									
									
									
									
								
							| @@ -1,36 +0,0 @@ | |||||||
| 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" |  | ||||||
							
								
								
									
										98
									
								
								configure.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								configure.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | |||||||
|  | AC_INIT(msgpack, m4_esyscmd([cat include/msgpack/version_master.h | tr -d "\n" | sed -e 's/#define MSGPACK_VERSION_MAJOR[[:space:]]*\([[:alnum:]]*\)/\1./g' -e 's/#define MSGPACK_VERSION_MINOR[[:space:]]*\([[:alnum:]]*\)/\1./g' -e 's/#define MSGPACK_VERSION_REVISION[[:space:]]*\([[:alnum:]]*\)/\1/g' | tr -d "\n"])) | ||||||
|  | AC_CONFIG_AUX_DIR(ac) | ||||||
|  | AM_INIT_AUTOMAKE | ||||||
|  | AC_CONFIG_HEADER(config.h) | ||||||
|  | AC_SUBST(CFLAGS) | ||||||
|  | CFLAGS="-O3 -Wall -Wextra -Werror $CFLAGS" | ||||||
|  |  | ||||||
|  | AC_SUBST(CXXFLAGS) | ||||||
|  | CXXFLAGS="-O3 -Wall -Wextra -Wno-mismatched-tags -Werror $CXXFLAGS" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_PROG_CC | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_MSG_CHECKING([if C++ API is enabled]) | ||||||
|  | AC_ARG_ENABLE(cxx, | ||||||
|  |     AS_HELP_STRING([--disable-cxx], | ||||||
|  |                    [don't build C++ API]) )   #' | ||||||
|  | AC_MSG_RESULT([$enable_cxx]) | ||||||
|  | if test "$enable_cxx" != "no"; then | ||||||
|  |     AC_PROG_CXX | ||||||
|  |     AM_PROG_CC_C_O | ||||||
|  | fi | ||||||
|  | AM_CONDITIONAL(ENABLE_CXX, test "$enable_cxx" != "no") | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_PROG_LIBTOOL | ||||||
|  | AM_PROG_AS | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_MSG_CHECKING([if debug option is enabled]) | ||||||
|  | AC_ARG_ENABLE(debug, | ||||||
|  |     AS_HELP_STRING([--disable-debug], | ||||||
|  |                    [disable assert macros and omit -g option]) ) | ||||||
|  | AC_MSG_RESULT([$enable_debug]) | ||||||
|  | if test "$enable_debug" != "no"; then | ||||||
|  |     CXXFLAGS="$CXXFLAGS -g" | ||||||
|  |     CFLAGS="$CFLAGS -g" | ||||||
|  | else | ||||||
|  |     CXXFLAGS="$CXXFLAGS -DNDEBUG" | ||||||
|  |     CFLAGS="$CFLAGS -DNDEBUG" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_CACHE_CHECK([for __sync_* atomic operations], msgpack_cv_atomic_ops, [ | ||||||
|  |     AC_TRY_LINK([ | ||||||
|  |         int atomic_sub(int i) { return __sync_sub_and_fetch(&i, 1); } | ||||||
|  |         int atomic_add(int i) { return __sync_add_and_fetch(&i, 1); } | ||||||
|  |     ], [atomic_sub(1); atomic_add(1);], msgpack_cv_atomic_ops="yes") | ||||||
|  | ]) | ||||||
|  | if test "$msgpack_cv_atomic_ops" != "yes"; then | ||||||
|  |     if test "$enable_cxx" = "no"; then | ||||||
|  |         AC_MSG_ERROR([__sync_* atomic operations are not found. Try to enable C++ support. | ||||||
|  | If you are using gcc >= 4.1 and the default target CPU architecture is "i386", try to | ||||||
|  | add CFLAGS="-march=i686" and CXXFLAGS="-march=i686" options to ./configure as follows: | ||||||
|  |  | ||||||
|  |   $ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686" | ||||||
|  |         ]) | ||||||
|  |     fi | ||||||
|  |  | ||||||
|  |     AC_LANG_PUSH([C++]) | ||||||
|  |     AC_CACHE_CHECK([for __gnu_cxx::__exchange_and_add], msgpack_cv_gcc_cxx_atomic_ops, [ | ||||||
|  |         AC_TRY_LINK([ | ||||||
|  |             #include <bits/atomicity.h> | ||||||
|  |             int atomic_sub(int i) { return __gnu_cxx::__exchange_and_add(&i, -1) - 1; } | ||||||
|  |             int atomic_add(int i) { return __gnu_cxx::__exchange_and_add(&i, 1) + 1; } | ||||||
|  |         ], [atomic_sub(1); atomic_add(1);], msgpack_cv_gcc_cxx_atomic_ops="yes") | ||||||
|  |     ]) | ||||||
|  |     AC_LANG_POP([C++]) | ||||||
|  |  | ||||||
|  |     if test "$msgpack_cv_gcc_cxx_atomic_ops" != "yes"; then | ||||||
|  |         AC_MSG_ERROR([__sync_* atomic operations nor __gnu_cxx::__exchange_and_add are not found. | ||||||
|  |  | ||||||
|  | If you are using gcc >= 4.1 and the default target CPU architecture is "i386", try to | ||||||
|  | add CFLAGS="-march=i686" and CXXFLAGS="-march=i686" options to ./configure as follows: | ||||||
|  |  | ||||||
|  |   $ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686" | ||||||
|  |         ]) | ||||||
|  |  | ||||||
|  |     else | ||||||
|  |         enable_gcc_cxx_atomic=yes | ||||||
|  |     fi | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | AM_CONDITIONAL(ENABLE_GCC_CXX_ATOMIC, test "$enable_gcc_cxx_atomic" = "yes") | ||||||
|  |  | ||||||
|  | major=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\1/'` | ||||||
|  | minor=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\2/'` | ||||||
|  | revision=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\3/'` | ||||||
|  | AC_SUBST(VERSION_MAJOR, $major) | ||||||
|  | AC_SUBST(VERSION_MINOR, $minor) | ||||||
|  | AC_SUBST(VERSION_REVISION, $revision) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | AC_OUTPUT([Makefile | ||||||
|  |            msgpack.pc | ||||||
|  |            src/Makefile | ||||||
|  |            test/Makefile]) | ||||||
| @@ -1,27 +1,91 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2009 FURUHASHI Sadayuki | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| #ifndef MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP | #ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP | ||||||
| #define MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP | #define MSGPACK_CPP03_DEFINE_ARRAY_HPP | ||||||
| 
 | 
 | ||||||
| #include "msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp" | #include "msgpack/versioning.hpp" | ||||||
| #include "msgpack/adaptor/msgpack_tuple.hpp" | #include "msgpack/adaptor/msgpack_tuple.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
| #include "msgpack/object_fwd.hpp" | #include "msgpack/object_fwd.hpp" | ||||||
| 
 | 
 | ||||||
|  | #define MSGPACK_DEFINE_ARRAY(...) \ | ||||||
|  |     template <typename Packer> \ | ||||||
|  |     void msgpack_pack(Packer& pk) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ | ||||||
|  |     } \ | ||||||
|  |     void msgpack_unpack(msgpack::object const& o) \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ | ||||||
|  |     }\ | ||||||
|  |     template <typename MSGPACK_OBJECT> \ | ||||||
|  |     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this))) | ||||||
|  | 
 | ||||||
|  | // MSGPACK_ADD_ENUM must be used in the global namespace. | ||||||
|  | #define MSGPACK_ADD_ENUM(enum_name) \ | ||||||
|  |   namespace msgpack { \ | ||||||
|  |   /** @cond */ \ | ||||||
|  |   MSGPACK_API_VERSION_NAMESPACE(v1) { \ | ||||||
|  |   /** @endcond */ \ | ||||||
|  |   namespace adaptor { \ | ||||||
|  |     template<> \ | ||||||
|  |     struct convert<enum_name> { \ | ||||||
|  |       msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\ | ||||||
|  |         int tmp; \ | ||||||
|  |         o >> tmp; \ | ||||||
|  |         v = static_cast<enum_name>(tmp); \ | ||||||
|  |         return o; \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |     template<> \ | ||||||
|  |     struct object<enum_name> { \ | ||||||
|  |       void operator()(msgpack::object& o, const enum_name& v) const {\ | ||||||
|  |         o << static_cast<int>(v); \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |     template<> \ | ||||||
|  |     struct object_with_zone<enum_name> { \ | ||||||
|  |       void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \ | ||||||
|  |         o << static_cast<int>(v); \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |     template<> \ | ||||||
|  |     struct pack<enum_name> { \ | ||||||
|  |       template <typename Stream> \ | ||||||
|  |       msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \ | ||||||
|  |         return o << static_cast<int>(v); \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |   } \ | ||||||
|  |   /** @cond */ \ | ||||||
|  |   } \ | ||||||
|  |   /** @endcond */ \ | ||||||
|  |   } | ||||||
|  | 
 | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| /// @cond | /// @cond | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
| /// @endcond | /// @endcond | ||||||
| namespace type { | namespace type { | ||||||
| 
 | 
 | ||||||
|  | /// @cond | ||||||
| <% GENERATION_LIMIT = 31 %> | <% GENERATION_LIMIT = 31 %> | ||||||
|  | template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> | ||||||
|  | struct define_array; | ||||||
|  | /// @endcond | ||||||
|  | 
 | ||||||
| template <> | template <> | ||||||
| struct define_array<> { | struct define_array<> { | ||||||
|     typedef define_array<> value_type; |     typedef define_array<> value_type; | ||||||
| @@ -38,7 +102,7 @@ struct define_array<> { | |||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone&) const |     void msgpack_object(msgpack::object* o, msgpack::zone&) const | ||||||
|     { |     { | ||||||
|         o->type = msgpack::type::ARRAY; |         o->type = msgpack::type::ARRAY; | ||||||
|         o->via.array.ptr = MSGPACK_NULLPTR; |         o->via.array.ptr = nullptr; | ||||||
|         o->via.array.size = 0; |         o->via.array.size = 0; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -66,16 +130,14 @@ struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | |||||||
|             msgpack::object *ptr = o.via.array.ptr; |             msgpack::object *ptr = o.via.array.ptr; | ||||||
|             switch(size) { |             switch(size) { | ||||||
|             default:<%(i).downto(0) {|j|%> |             default:<%(i).downto(0) {|j|%> | ||||||
|             case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>); |             case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>);<%}%> | ||||||
|             // fallthrough |  | ||||||
| <%}%> |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone& z) const |     void msgpack_object(msgpack::object* o, msgpack::zone& z) const | ||||||
|     { |     { | ||||||
|         o->type = msgpack::type::ARRAY; |         o->type = msgpack::type::ARRAY; | ||||||
|         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object))); |         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>)); | ||||||
|         o->via.array.size = <%=i+1%>; |         o->via.array.size = <%=i+1%>; | ||||||
|         <%0.upto(i) {|j|%> |         <%0.upto(i) {|j|%> | ||||||
|         o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%> |         o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%> | ||||||
| @@ -107,4 +169,5 @@ inline define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_array(A0& a0 | |||||||
| /// @endcond | /// @endcond | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP | 
 | ||||||
|  | #endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP | ||||||
| @@ -1,21 +1,70 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015-2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| #ifndef MSGPACK_V1_CPP03_DEFINE_MAP_HPP | #ifndef MSGPACK_CPP03_DEFINE_MAP_HPP | ||||||
| #define MSGPACK_V1_CPP03_DEFINE_MAP_HPP | #define MSGPACK_CPP03_DEFINE_MAP_HPP | ||||||
| 
 | 
 | ||||||
| #include "msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp" | // BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp | ||||||
|  | // http://www.boost.org/libs/preprocessor/doc/ref/variadics.html | ||||||
|  | // However, supporting compiler detection is not complete. msgpack-c requires | ||||||
|  | // variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly. | ||||||
|  | #if !defined(MSGPACK_PP_VARIADICS) | ||||||
|  | #define MSGPACK_PP_VARIADICS | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include <msgpack/preprocessor.hpp> | ||||||
|  | 
 | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
| #include "msgpack/adaptor/msgpack_tuple.hpp" | #include "msgpack/adaptor/msgpack_tuple.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
| #include "msgpack/object_fwd.hpp" | #include "msgpack/object_fwd.hpp" | ||||||
| 
 | 
 | ||||||
| #include <map> | #define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \ | ||||||
|  |     MSGPACK_PP_IF( \ | ||||||
|  |         MSGPACK_PP_IS_BEGIN_PARENS(elem), \ | ||||||
|  |         elem, \ | ||||||
|  |         (MSGPACK_PP_STRINGIZE(elem))(elem) \ | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | #define MSGPACK_DEFINE_MAP_IMPL(...) \ | ||||||
|  |     MSGPACK_PP_SEQ_TO_TUPLE( \ | ||||||
|  |         MSGPACK_PP_SEQ_FOR_EACH( \ | ||||||
|  |             MSGPACK_DEFINE_MAP_EACH_PROC, \ | ||||||
|  |             0, \ | ||||||
|  |             MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ | ||||||
|  |         ) \ | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | #define MSGPACK_DEFINE_MAP(...) \ | ||||||
|  |     template <typename Packer> \ | ||||||
|  |     void msgpack_pack(Packer& pk) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_map \ | ||||||
|  |             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||||
|  |             .msgpack_pack(pk); \ | ||||||
|  |     } \ | ||||||
|  |     void msgpack_unpack(msgpack::object const& o) \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_map \ | ||||||
|  |             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||||
|  |             .msgpack_unpack(o); \ | ||||||
|  |     }\ | ||||||
|  |     template <typename MSGPACK_OBJECT> \ | ||||||
|  |     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_map \ | ||||||
|  |             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||||
|  |             .msgpack_object(o, z); \ | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | #define MSGPACK_BASE_MAP(base) \ | ||||||
|  |     (MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this))) | ||||||
| 
 | 
 | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| /// @cond | /// @cond | ||||||
| @@ -23,7 +72,12 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { | |||||||
| /// @endcond | /// @endcond | ||||||
| namespace type { | namespace type { | ||||||
| 
 | 
 | ||||||
|  | /// @cond | ||||||
| <% GENERATION_LIMIT = 31 %> | <% GENERATION_LIMIT = 31 %> | ||||||
|  | template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> | ||||||
|  | struct define_map; | ||||||
|  | /// @endcond | ||||||
|  | 
 | ||||||
| template <> | template <> | ||||||
| struct define_map<> { | struct define_map<> { | ||||||
|     template <typename Packer> |     template <typename Packer> | ||||||
| @@ -38,7 +92,7 @@ struct define_map<> { | |||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone&) const |     void msgpack_object(msgpack::object* o, msgpack::zone&) const | ||||||
|     { |     { | ||||||
|         o->type = msgpack::type::MAP; |         o->type = msgpack::type::MAP; | ||||||
|         o->via.map.ptr = MSGPACK_NULLPTR; |         o->via.map.ptr = nullptr; | ||||||
|         o->via.map.size = 0; |         o->via.map.size = 0; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -61,7 +115,6 @@ struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | |||||||
|         if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } |         if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } | ||||||
|         std::map<std::string, msgpack::object const*> kvmap; |         std::map<std::string, msgpack::object const*> kvmap; | ||||||
|         for (uint32_t i = 0; i < o.via.map.size; ++i) { |         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( |             kvmap.insert( | ||||||
|                 std::map<std::string, msgpack::object const*>::value_type( |                 std::map<std::string, msgpack::object const*>::value_type( | ||||||
|                     std::string( |                     std::string( | ||||||
| @@ -83,7 +136,7 @@ struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | |||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone& z) const |     void msgpack_object(msgpack::object* o, msgpack::zone& z) const | ||||||
|     { |     { | ||||||
|         o->type = msgpack::type::MAP; |         o->type = msgpack::type::MAP; | ||||||
|         o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv))); |         o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>)); | ||||||
|         o->via.map.size = <%=(i+1)/2%>; |         o->via.map.size = <%=(i+1)/2%>; | ||||||
|         <%0.step(i,2) {|j|%> |         <%0.step(i,2) {|j|%> | ||||||
|         o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z); |         o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z); | ||||||
| @@ -117,4 +170,4 @@ inline define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1. | |||||||
| /// @endcond | /// @endcond | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_V1_CPP03_DEFINE_MAP_HPP | #endif // MSGPACK_CPP03_DEFINE_MAP_HPP | ||||||
| @@ -1,16 +1,18 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| #ifndef MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP | #ifndef MSGPACK_CPP03_MSGPACK_TUPLE_HPP | ||||||
| #define MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP | #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP | ||||||
| 
 | 
 | ||||||
| #include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/object.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
| 
 | 
 | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| 
 | 
 | ||||||
| @@ -24,6 +26,17 @@ namespace type { | |||||||
| // FIXME operator!= | // FIXME operator!= | ||||||
| <% GENERATION_LIMIT = 31 %> | <% GENERATION_LIMIT = 31 %> | ||||||
| 
 | 
 | ||||||
|  | /// @cond | ||||||
|  | template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> | ||||||
|  | struct tuple; | ||||||
|  | /// @endcond | ||||||
|  | 
 | ||||||
|  | template <typename Tuple, int N> | ||||||
|  | struct tuple_element; | ||||||
|  | 
 | ||||||
|  | template <typename Tuple, int N> | ||||||
|  | struct const_tuple_element; | ||||||
|  | 
 | ||||||
| template <typename T> | template <typename T> | ||||||
| struct tuple_type { | struct tuple_type { | ||||||
|     typedef T type; |     typedef T type; | ||||||
| @@ -83,7 +96,6 @@ struct tuple<> { | |||||||
|     tuple() {} |     tuple() {} | ||||||
|     tuple(msgpack::object const& o) { o.convert(*this); } |     tuple(msgpack::object const& o) { o.convert(*this); } | ||||||
|     typedef tuple<> value_type; |     typedef tuple<> value_type; | ||||||
|     std::size_t size() const { return 0; } |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /// @cond | /// @cond | ||||||
| @@ -91,7 +103,6 @@ struct tuple<> { | |||||||
| template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
| struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | ||||||
|     typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type; |     typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type; | ||||||
|     std::size_t size() const { return <%=i+1%>; } |  | ||||||
|     tuple() {} |     tuple() {} | ||||||
|     tuple(typename tuple_type<A0>::transparent_reference _a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference _a<%=j%><%}%>) : |     tuple(typename tuple_type<A0>::transparent_reference _a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference _a<%=j%><%}%>) : | ||||||
|         a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {} |         a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {} | ||||||
| @@ -121,7 +132,7 @@ inline tuple<> make_tuple() | |||||||
| /// @cond | /// @cond | ||||||
| <%0.upto(GENERATION_LIMIT) {|i|%> | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
| template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | 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%><%}%>) | inline tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>) | ||||||
| { | { | ||||||
|     return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); |     return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); | ||||||
| } | } | ||||||
| @@ -150,10 +161,10 @@ struct convert<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > { | |||||||
|         msgpack::object const& o, |         msgpack::object const& o, | ||||||
|         type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { |         type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         if(o.via.array.size < <%=i+1%>) { throw msgpack::type_error(); } | ||||||
|         <%0.upto(i) {|j|%> |         <%0.upto(i) {|j|%> | ||||||
|         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. |         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. | ||||||
|         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%>>());<%}%> | ||||||
|             o.via.array.ptr[<%=j%>].msgpack::object::convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%> |  | ||||||
|         return o; |         return o; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -194,7 +205,7 @@ struct object_with_zone<type::tuple<> > { | |||||||
|         msgpack::object::with_zone& o, |         msgpack::object::with_zone& o, | ||||||
|         const type::tuple<>&) const { |         const type::tuple<>&) const { | ||||||
|         o.type = msgpack::type::ARRAY; |         o.type = msgpack::type::ARRAY; | ||||||
|         o.via.array.ptr = MSGPACK_NULLPTR; |         o.via.array.ptr = nullptr; | ||||||
|         o.via.array.size = 0; |         o.via.array.size = 0; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -207,7 +218,7 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > { | |||||||
|         msgpack::object::with_zone& o, |         msgpack::object::with_zone& o, | ||||||
|         const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { |         const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { | ||||||
|         o.type = msgpack::type::ARRAY; |         o.type = msgpack::type::ARRAY; | ||||||
|         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object))); |         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>)); | ||||||
|         o.via.array.size = <%=i+1%>; |         o.via.array.size = <%=i+1%>; | ||||||
|         <%0.upto(i) {|j|%> |         <%0.upto(i) {|j|%> | ||||||
|         o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> |         o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> | ||||||
| @@ -224,4 +235,4 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > { | |||||||
| 
 | 
 | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP | #endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP | ||||||
| @@ -1,16 +1,28 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ memory pool | // MessagePack for C++ memory pool | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2010 FURUHASHI Sadayuki | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| #ifndef MSGPACK_V1_CPP03_ZONE_HPP | #ifndef MSGPACK_CPP03_ZONE_HPP | ||||||
| #define MSGPACK_V1_CPP03_ZONE_HPP | #define MSGPACK_CPP03_ZONE_HPP | ||||||
| 
 | 
 | ||||||
| #include "msgpack/zone_decl.hpp" | #include <cstdlib> | ||||||
|  | #include <memory> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  | 
 | ||||||
|  | #ifndef MSGPACK_ZONE_CHUNK_SIZE | ||||||
|  | #define MSGPACK_ZONE_CHUNK_SIZE 8192 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifndef MSGPACK_ZONE_ALIGN | ||||||
|  | #define MSGPACK_ZONE_ALIGN sizeof(void*) | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| <% GENERATION_LIMIT = 15 %> | <% GENERATION_LIMIT = 15 %> | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| @@ -27,7 +39,7 @@ class zone { | |||||||
|         void* m_data; |         void* m_data; | ||||||
|     }; |     }; | ||||||
|     struct finalizer_array { |     struct finalizer_array { | ||||||
|         finalizer_array():m_tail(MSGPACK_NULLPTR), m_end(MSGPACK_NULLPTR), m_array(MSGPACK_NULLPTR) {} |         finalizer_array():m_tail(nullptr), m_end(nullptr), m_array(nullptr) {} | ||||||
|         void call() { |         void call() { | ||||||
|             finalizer* fin = m_tail; |             finalizer* fin = m_tail; | ||||||
|             for(; fin != m_array; --fin) (*(fin-1))(); |             for(; fin != m_array; --fin) (*(fin-1))(); | ||||||
| @@ -55,7 +67,7 @@ class zone { | |||||||
|             ++m_tail; |             ++m_tail; | ||||||
|         } |         } | ||||||
|         void push_expand(void (*func)(void*), void* data) { |         void push_expand(void (*func)(void*), void* data) { | ||||||
|             const size_t nused = static_cast<size_t>(m_end - m_array); |             const size_t nused = m_end - m_array; | ||||||
|             size_t nnext; |             size_t nnext; | ||||||
|             if(nused == 0) { |             if(nused == 0) { | ||||||
|                 nnext = (sizeof(finalizer) < 72/2) ? |                 nnext = (sizeof(finalizer) < 72/2) ? | ||||||
| @@ -93,7 +105,7 @@ class zone { | |||||||
|             m_head = c; |             m_head = c; | ||||||
|             m_free = chunk_size; |             m_free = chunk_size; | ||||||
|             m_ptr  = reinterpret_cast<char*>(c) + sizeof(chunk); |             m_ptr  = reinterpret_cast<char*>(c) + sizeof(chunk); | ||||||
|             c->m_next = MSGPACK_NULLPTR; |             c->m_next = nullptr; | ||||||
|         } |         } | ||||||
|         ~chunk_list() |         ~chunk_list() | ||||||
|         { |         { | ||||||
| @@ -113,11 +125,10 @@ class zone { | |||||||
|                     ::free(c); |                     ::free(c); | ||||||
|                     c = n; |                     c = n; | ||||||
|                 } else { |                 } else { | ||||||
|                     m_head = c; |  | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             m_head->m_next = MSGPACK_NULLPTR; |             m_head->m_next = nullptr; | ||||||
|             m_free = chunk_size; |             m_free = chunk_size; | ||||||
|             m_ptr  = reinterpret_cast<char*>(m_head) + sizeof(chunk); |             m_ptr  = reinterpret_cast<char*>(m_head) + sizeof(chunk); | ||||||
|         } |         } | ||||||
| @@ -178,9 +189,7 @@ private: | |||||||
|     template <typename T> |     template <typename T> | ||||||
|     static void object_delete(void* obj); |     static void object_delete(void* obj); | ||||||
| 
 | 
 | ||||||
|     static char* get_aligned(char* ptr, size_t align); |     void* allocate_expand(size_t size); | ||||||
| 
 |  | ||||||
|     char* allocate_expand(size_t size); |  | ||||||
| private: | private: | ||||||
|     zone(const zone&); |     zone(const zone&); | ||||||
|     zone& operator=(const zone&); |     zone& operator=(const zone&); | ||||||
| @@ -190,42 +199,37 @@ inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_ | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 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) | inline void* zone::allocate_align(size_t size, size_t align) | ||||||
| { | { | ||||||
|     char* aligned = get_aligned(m_chunk_list.m_ptr, align); |     char* aligned = | ||||||
|     size_t adjusted_size = size + static_cast<size_t>(aligned - m_chunk_list.m_ptr); |         reinterpret_cast<char*>( | ||||||
|     if (m_chunk_list.m_free < adjusted_size) { |             reinterpret_cast<size_t>( | ||||||
|         size_t enough_size = size + align - 1; |                 (m_chunk_list.m_ptr + (align - 1))) / align * align); | ||||||
|         char* ptr = allocate_expand(enough_size); |     size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr); | ||||||
|         aligned = get_aligned(ptr, align); |     if(m_chunk_list.m_free >= adjusted_size) { | ||||||
|         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; | ||||||
|     } |     } | ||||||
|     m_chunk_list.m_free -= adjusted_size; |     return reinterpret_cast<char*>( | ||||||
|     m_chunk_list.m_ptr  += adjusted_size; |         reinterpret_cast<size_t>( | ||||||
|     return aligned; |             allocate_expand(size + (align - 1))) / align * align); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void* zone::allocate_no_align(size_t size) | inline void* zone::allocate_no_align(size_t size) | ||||||
| { | { | ||||||
|     char* ptr = m_chunk_list.m_ptr; |  | ||||||
|     if(m_chunk_list.m_free < size) { |     if(m_chunk_list.m_free < size) { | ||||||
|         ptr = allocate_expand(size); |         return allocate_expand(size); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     char* ptr = m_chunk_list.m_ptr; | ||||||
|     m_chunk_list.m_free -= size; |     m_chunk_list.m_free -= size; | ||||||
|     m_chunk_list.m_ptr  += size; |     m_chunk_list.m_ptr  += size; | ||||||
| 
 | 
 | ||||||
|     return ptr; |     return ptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline char* zone::allocate_expand(size_t size) | inline void* zone::allocate_expand(size_t size) | ||||||
| { | { | ||||||
|     chunk_list* const cl = &m_chunk_list; |     chunk_list* const cl = &m_chunk_list; | ||||||
| 
 | 
 | ||||||
| @@ -247,8 +251,8 @@ inline char* zone::allocate_expand(size_t size) | |||||||
| 
 | 
 | ||||||
|     c->m_next  = cl->m_head; |     c->m_next  = cl->m_head; | ||||||
|     cl->m_head = c; |     cl->m_head = c; | ||||||
|     cl->m_free = sz; |     cl->m_free = sz - size; | ||||||
|     cl->m_ptr  = ptr; |     cl->m_ptr  = ptr + size; | ||||||
| 
 | 
 | ||||||
|     return ptr; |     return ptr; | ||||||
| } | } | ||||||
| @@ -298,7 +302,7 @@ inline void zone::undo_allocate(size_t size) | |||||||
| 
 | 
 | ||||||
| inline std::size_t aligned_size( | inline std::size_t aligned_size( | ||||||
|     std::size_t size, |     std::size_t size, | ||||||
|     std::size_t align) { |     std::size_t align = MSGPACK_ZONE_ALIGN) { | ||||||
|     return (size + align - 1) / align * align; |     return (size + align - 1) / align * align; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -307,7 +311,7 @@ inline std::size_t aligned_size( | |||||||
| template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
| T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) | T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) | ||||||
| { | { | ||||||
|     void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T)); |     void* x = allocate_align(sizeof(T)); | ||||||
|     try { |     try { | ||||||
|         m_finalizer_array.push(&zone::object_destruct<T>, x); |         m_finalizer_array.push(&zone::object_destruct<T>, x); | ||||||
|     } catch (...) { |     } catch (...) { | ||||||
| @@ -331,4 +335,4 @@ T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) | |||||||
| 
 | 
 | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_V1_CPP03_ZONE_HPP | #endif // MSGPACK_CPP03_ZONE_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,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,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,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,9 +1,4 @@ | |||||||
| IF (NOT MSGPACK_CXX_ONLY) | ADD_SUBDIRECTORY (c) | ||||||
|     ADD_SUBDIRECTORY (c) | ADD_SUBDIRECTORY (cpp03) | ||||||
| ENDIF () | ADD_SUBDIRECTORY (cpp11) | ||||||
| IF (MSGPACK_ENABLE_CXX) | ADD_SUBDIRECTORY (boost) | ||||||
|     ADD_SUBDIRECTORY (cpp03) |  | ||||||
|     ADD_SUBDIRECTORY (cpp11) |  | ||||||
|     ADD_SUBDIRECTORY (boost) |  | ||||||
|     ADD_SUBDIRECTORY (x3) |  | ||||||
| ENDIF () |  | ||||||
|   | |||||||
| @@ -3,20 +3,6 @@ IF (MSGPACK_BOOST) | |||||||
|         msgpack_variant_capitalize.cpp |         msgpack_variant_capitalize.cpp | ||||||
|         msgpack_variant_mapbased.cpp |         msgpack_variant_mapbased.cpp | ||||||
|     ) |     ) | ||||||
|     IF (MSGPACK_CXX11 OR MSGPACK_CXX17) |  | ||||||
|         FIND_PACKAGE (Threads REQUIRED) |  | ||||||
|         LIST (APPEND exec_PROGRAMS |  | ||||||
|             asio_send_recv.cpp |  | ||||||
|         ) |  | ||||||
|         IF (ZLIB_FOUND) |  | ||||||
|             INCLUDE_DIRECTORIES ( |  | ||||||
|                 ${ZLIB_INCLUDE_DIRS} |  | ||||||
|             ) |  | ||||||
|             LIST (APPEND exec_PROGRAMS |  | ||||||
|                 asio_send_recv_zlib.cpp |  | ||||||
|             ) |  | ||||||
|         ENDIF () |  | ||||||
|     ENDIF () |  | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| FOREACH (source_file ${exec_PROGRAMS}) | FOREACH (source_file ${exec_PROGRAMS}) | ||||||
| @@ -25,27 +11,21 @@ FOREACH (source_file ${exec_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} |  | ||||||
|         PRIVATE |  | ||||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> |  | ||||||
|     ) |  | ||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |  | ||||||
|         ${Boost_SYSTEM_LIBRARY} |  | ||||||
|         ${CMAKE_THREAD_LIBS_INIT} |  | ||||||
|     ) |  | ||||||
|     IF (ZLIB_FOUND) |  | ||||||
|         TARGET_LINK_LIBRARIES (${source_file_we} |  | ||||||
|             ${ZLIB_LIBRARIES} |  | ||||||
|         ) |  | ||||||
|     ENDIF() |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|  |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |         IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR | ||||||
|  |             (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION})) | ||||||
|  |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |         ENDIF () | ||||||
|  |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
| @@ -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(); |  | ||||||
| } |  | ||||||
| @@ -73,8 +73,8 @@ int main() { | |||||||
|     msgpack::pack(ss1, u); |     msgpack::pack(ss1, u); | ||||||
|     print(ss1.str()); |     print(ss1.str()); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh1 = msgpack::unpack(ss1.str().data(), ss1.str().size()); |     msgpack::unpacked unp1 = msgpack::unpack(ss1.str().data(), ss1.str().size()); | ||||||
|     msgpack::object const& obj1 = oh1.get(); |     msgpack::object const& obj1 = unp1.get(); | ||||||
|     std::cout << "Unpacked msgpack object." << std::endl; |     std::cout << "Unpacked msgpack object." << std::endl; | ||||||
|     std::cout << obj1 << std::endl; |     std::cout << obj1 << std::endl; | ||||||
|  |  | ||||||
| @@ -87,8 +87,8 @@ int main() { | |||||||
|     msgpack::pack(ss2, v); |     msgpack::pack(ss2, v); | ||||||
|     print(ss2.str()); |     print(ss2.str()); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh2 = msgpack::unpack(ss2.str().data(), ss2.str().size()); |     msgpack::unpacked unp2 = msgpack::unpack(ss2.str().data(), ss2.str().size()); | ||||||
|     msgpack::object const& obj2 = oh2.get(); |     msgpack::object const& obj2 = unp2.get(); | ||||||
|     std::cout << "Modified msgpack object." << std::endl; |     std::cout << "Modified msgpack object." << std::endl; | ||||||
|     std::cout << obj2 << std::endl; |     std::cout << obj2 << std::endl; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -45,11 +45,7 @@ struct proc:boost::static_visitor<void> { | |||||||
|                 // You can remove key-value pair from msgpack::type::variant_ref |                 // You can remove key-value pair from msgpack::type::variant_ref | ||||||
|  |  | ||||||
| #if defined(MSGPACK_USE_CPP03) | #if defined(MSGPACK_USE_CPP03) | ||||||
| #  if MSGPACK_LIB_STD_CXX |  | ||||||
|                 v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it++)); |  | ||||||
| #  else  // MSGPACK_LIB_STD_CXX |  | ||||||
|                 v.erase(it++); |                 v.erase(it++); | ||||||
| #  endif // MSGPACK_LIB_STD_CXX |  | ||||||
| #else  // defined(MSGPACK_USE_CPP03) | #else  // defined(MSGPACK_USE_CPP03) | ||||||
| #  if MSGPACK_LIB_STD_CXX | #  if MSGPACK_LIB_STD_CXX | ||||||
|                 it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it)); |                 it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it)); | ||||||
| @@ -83,9 +79,8 @@ int main() { | |||||||
|     u.address = "Tokyo"; |     u.address = "Tokyo"; | ||||||
|     msgpack::pack(ss, u); |     msgpack::pack(ss, u); | ||||||
|  |  | ||||||
|     std::string const& str = ss.str(); |     msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     msgpack::object_handle oh = msgpack::unpack(str.data(), str.size()); |     msgpack::object const& obj = unp.get(); | ||||||
|     msgpack::object const& obj = oh.get(); |  | ||||||
|     std::cout << "Unpacked msgpack object." << std::endl; |     std::cout << "Unpacked msgpack object." << std::endl; | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>(); |     msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>(); | ||||||
|   | |||||||
| @@ -1,16 +1,14 @@ | |||||||
| FIND_PACKAGE (cJSON) | INCLUDE_DIRECTORIES ( | ||||||
|  |     ../include | ||||||
|  | ) | ||||||
|  |  | ||||||
| LIST (APPEND exec_PROGRAMS | LIST (APPEND exec_PROGRAMS | ||||||
|     boundary.c |  | ||||||
|     lib_buffer_unpack.c |     lib_buffer_unpack.c | ||||||
|     simple_c.c |     simple_c.c | ||||||
|     speed_test_uint32_array.c |     speed_test_uint32_array.c | ||||||
|     speed_test_uint64_array.c |     speed_test_uint64_array.c | ||||||
|     user_buffer_unpack.c |     user_buffer_unpack.c | ||||||
| ) | ) | ||||||
| IF (cJSON_FOUND) |  | ||||||
|     LIST (APPEND exec_PROGRAMS jsonconv.c) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| FOREACH (source_file ${exec_PROGRAMS}) | FOREACH (source_file ${exec_PROGRAMS}) | ||||||
|     GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) |     GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) | ||||||
| @@ -21,24 +19,26 @@ FOREACH (source_file ${exec_PROGRAMS}) | |||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|         msgpackc |         msgpackc | ||||||
|     ) |     ) | ||||||
|     IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         IF (CMAKE_C_FLAGS MATCHES "/W[0-4]") |         IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR | ||||||
|             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") |             (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION})) | ||||||
|  |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |         ENDIF () | ||||||
|  |     ENDIF () | ||||||
|  |  | ||||||
|  |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|  |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|  |             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|         ELSE () |         ELSE () | ||||||
|             SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX") |             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX") | ||||||
|         ENDIF () |         ENDIF () | ||||||
|     ENDIF () |     ENDIF () | ||||||
| ENDFOREACH () | ENDFOREACH () | ||||||
|  |  | ||||||
| IF (cJSON_FOUND) |  | ||||||
|     TARGET_LINK_LIBRARIES (jsonconv ${CJSON_LIBRARIES}) |  | ||||||
|     TARGET_INCLUDE_DIRECTORIES(jsonconv PRIVATE ${CJSON_INCLUDE_DIRS}) |  | ||||||
| ENDIF () |  | ||||||
|   | |||||||
| @@ -1,296 +0,0 @@ | |||||||
| /* 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,419 +0,0 @@ | |||||||
| #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; |  | ||||||
| } |  | ||||||
| @@ -44,14 +44,13 @@ size_t receiver_recv(receiver *r, char* buf, size_t try_size) { | |||||||
| size_t receiver_to_unpacker(receiver* r, size_t request_size, | size_t receiver_to_unpacker(receiver* r, size_t request_size, | ||||||
|         msgpack_unpacker *unpacker) |         msgpack_unpacker *unpacker) | ||||||
| { | { | ||||||
|     size_t recv_len; |  | ||||||
|     // make sure there's enough room, or expand the unpacker accordingly |     // make sure there's enough room, or expand the unpacker accordingly | ||||||
|     if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) { |     if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) { | ||||||
|         msgpack_unpacker_reserve_buffer(unpacker, request_size); |         msgpack_unpacker_reserve_buffer(unpacker, request_size); | ||||||
|         assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size); |         assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size); | ||||||
|     } |     } | ||||||
|     recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker), |     size_t recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker), | ||||||
|                              request_size); |                                     request_size); | ||||||
|     msgpack_unpacker_buffer_consumed(unpacker, recv_len); |     msgpack_unpacker_buffer_consumed(unpacker, recv_len); | ||||||
|     return recv_len; |     return recv_len; | ||||||
| } | } | ||||||
| @@ -71,11 +70,7 @@ void unpack(receiver* r) { | |||||||
|     while (true) { |     while (true) { | ||||||
|         recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp); |         recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp); | ||||||
|         if (recv_len == 0) break; // (reached end of input) |         if (recv_len == 0) break; // (reached end of input) | ||||||
| #if defined(_MSC_VER) || defined(__MINGW32__) |  | ||||||
|         printf("receive count: %d %Id bytes received.\n", recv_count++, recv_len); |  | ||||||
| #else // defined(_MSC_VER) || defined(__MINGW32__) |  | ||||||
|         printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len); |         printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len); | ||||||
| #endif // defined(_MSC_VER) || defined(__MINGW32__) |  | ||||||
|         ret = msgpack_unpacker_next(unp, &result); |         ret = msgpack_unpacker_next(unp, &result); | ||||||
|         while (ret == MSGPACK_UNPACK_SUCCESS) { |         while (ret == MSGPACK_UNPACK_SUCCESS) { | ||||||
|             msgpack_object obj = result.data; |             msgpack_object obj = result.data; | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| #include <msgpack.h> | #include <msgpack.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  |  | ||||||
| void print(char const* buf,size_t len) | void print(char const* buf, unsigned int len) | ||||||
| { | { | ||||||
|     size_t i = 0; |     size_t i = 0; | ||||||
|     for(; i < len ; ++i) |     for(; i < len ; ++i) | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ void test() | |||||||
|  |  | ||||||
|     msgpack_unpacked_init(&msg); |     msgpack_unpacked_init(&msg); | ||||||
|  |  | ||||||
|     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) { |     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos)) { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     msgpack_sbuffer_destroy(&buf); |     msgpack_sbuffer_destroy(&buf); | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ void test() | |||||||
|  |  | ||||||
|     msgpack_unpacked_init(&msg); |     msgpack_unpacked_init(&msg); | ||||||
|  |  | ||||||
|     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) { |     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos)) { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     msgpack_sbuffer_destroy(&buf); |     msgpack_sbuffer_destroy(&buf); | ||||||
|   | |||||||
| @@ -2,8 +2,6 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
|  |  | ||||||
| #define UNPACKED_BUFFER_SIZE 2048 |  | ||||||
|  |  | ||||||
| void prepare(msgpack_sbuffer* sbuf) { | void prepare(msgpack_sbuffer* sbuf) { | ||||||
|     msgpack_packer pk; |     msgpack_packer pk; | ||||||
|  |  | ||||||
| @@ -29,7 +27,6 @@ void unpack(char const* buf, size_t len) { | |||||||
|     size_t off = 0; |     size_t off = 0; | ||||||
|     msgpack_unpack_return ret; |     msgpack_unpack_return ret; | ||||||
|     int i = 0; |     int i = 0; | ||||||
|     char unpacked_buffer[UNPACKED_BUFFER_SIZE]; |  | ||||||
|     msgpack_unpacked_init(&result); |     msgpack_unpacked_init(&result); | ||||||
|     ret = msgpack_unpack_next(&result, buf, len, &off); |     ret = msgpack_unpack_next(&result, buf, len, &off); | ||||||
|     while (ret == MSGPACK_UNPACK_SUCCESS) { |     while (ret == MSGPACK_UNPACK_SUCCESS) { | ||||||
| @@ -39,8 +36,6 @@ void unpack(char const* buf, size_t len) { | |||||||
|         printf("Object no %d:\n", ++i); |         printf("Object no %d:\n", ++i); | ||||||
|         msgpack_object_print(stdout, obj); |         msgpack_object_print(stdout, obj); | ||||||
|         printf("\n"); |         printf("\n"); | ||||||
|         msgpack_object_print_buffer(unpacked_buffer, UNPACKED_BUFFER_SIZE, obj); |  | ||||||
|         printf("%s\n", unpacked_buffer); |  | ||||||
|         /* If you want to allocate something on the zone, you can use zone. */ |         /* If you want to allocate something on the zone, you can use zone. */ | ||||||
|         /* msgpack_zone* zone = result.zone; */ |         /* msgpack_zone* zone = result.zone; */ | ||||||
|         /* The lifetime of the obj and the zone,  */ |         /* The lifetime of the obj and the zone,  */ | ||||||
|   | |||||||
| @@ -1,17 +0,0 @@ | |||||||
| cmake_minimum_required (VERSION 3.0) |  | ||||||
| project (example) |  | ||||||
|  |  | ||||||
| if(EXAMPLE_MSGPACK_EMBEDDED) |  | ||||||
|     add_subdirectory(msgpack-c) |  | ||||||
|     set(msgpack_DIR ${CMAKE_CURRENT_BINARY_DIR}/msgpack-c) |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| find_package(msgpack REQUIRED) |  | ||||||
|  |  | ||||||
| add_executable (${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c) |  | ||||||
| target_link_libraries(${PROJECT_NAME} msgpackc) |  | ||||||
|  |  | ||||||
| if(TARGET msgpackc-static) |  | ||||||
|     add_executable (${PROJECT_NAME}-static ${CMAKE_CURRENT_LIST_DIR}/../c/simple_c.c) |  | ||||||
|     target_link_libraries(${PROJECT_NAME}-static msgpackc-static) |  | ||||||
| endif() |  | ||||||
| @@ -5,17 +5,12 @@ LIST (APPEND exec_PROGRAMS | |||||||
|     custom.cpp |     custom.cpp | ||||||
|     enum.cpp |     enum.cpp | ||||||
|     map_based_versionup.cpp |     map_based_versionup.cpp | ||||||
|  |     protocol.cpp | ||||||
|     protocol_new.cpp |     protocol_new.cpp | ||||||
|     reuse_zone.cpp |     reuse_zone.cpp | ||||||
|     simple.cpp |     simple.cpp | ||||||
| ) | ) | ||||||
|  |  | ||||||
| IF (MSGPACK_DEFAULT_API_VERSION EQUAL 1) |  | ||||||
|     LIST (APPEND exec_PROGRAMS |  | ||||||
|         protocol.cpp |  | ||||||
|     ) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| IF (NOT MSVC) | IF (NOT MSVC) | ||||||
|     LIST (APPEND with_pthread_PROGRAMS |     LIST (APPEND with_pthread_PROGRAMS | ||||||
|         stream.cpp |         stream.cpp | ||||||
| @@ -23,10 +18,12 @@ IF (NOT MSVC) | |||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_BOOST) | IF (MSGPACK_BOOST) | ||||||
|     LIST (APPEND with_boost_lib_PROGRAMS |     IF (NOT MSVC) | ||||||
|         speed_test.cpp |         LIST (APPEND with_boost_lib_PROGRAMS | ||||||
|         speed_test_nested_array.cpp |             speed_test.cpp | ||||||
|     ) |             speed_test_nested_array.cpp | ||||||
|  |         ) | ||||||
|  |     ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| FOREACH (source_file ${exec_PROGRAMS}) | FOREACH (source_file ${exec_PROGRAMS}) | ||||||
| @@ -35,12 +32,8 @@ FOREACH (source_file ${exec_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} |  | ||||||
|         PRIVATE |  | ||||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> |  | ||||||
|     ) |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
| @@ -57,15 +50,11 @@ FOREACH (source_file ${with_pthread_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} |  | ||||||
|         PRIVATE |  | ||||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> |  | ||||||
|     ) |  | ||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|         ${CMAKE_THREAD_LIBS_INIT} |         pthread | ||||||
|     ) |     ) | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 -pthread") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
| @@ -86,10 +75,6 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} |  | ||||||
|         PRIVATE |  | ||||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> |  | ||||||
|     ) |  | ||||||
|     LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) |     LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) | ||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|         ${Boost_TIMER_LIBRARY} |         ${Boost_TIMER_LIBRARY} | ||||||
| @@ -110,6 +95,13 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS}) | |||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|  |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |         IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR | ||||||
|  |             (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION})) | ||||||
|  |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |         ENDIF () | ||||||
|  |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
| @@ -82,12 +82,11 @@ int main() { | |||||||
|         std::stringstream ss; |         std::stringstream ss; | ||||||
|         msgpack::pack(ss, my); |         msgpack::pack(ss, my); | ||||||
|  |  | ||||||
|         std::string const& str = ss.str(); |         print(ss.str()); | ||||||
|         print(str); |  | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked unp; | ||||||
|             msgpack::unpack(str.data(), str.size()); |         msgpack::unpack(unp, ss.str().data(), ss.str().size()); | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = unp.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<my_class>() == my); |         assert(obj.as<my_class>() == my); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -59,10 +59,9 @@ int main() { | |||||||
|  |  | ||||||
|         print(ss.str()); |         print(ss.str()); | ||||||
|  |  | ||||||
|         std::string const& str = ss.str(); |         msgpack::unpacked unp; | ||||||
|         msgpack::object_handle oh = |         msgpack::unpack(unp, ss.str().data(), ss.str().size()); | ||||||
|             msgpack::unpack(str.data(), str.size()); |         msgpack::object obj = unp.get(); | ||||||
|         msgpack::object obj = oh.get(); |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<my_class>() == my); |         assert(obj.as<my_class>() == my); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ struct object_with_zone<my_class> { | |||||||
|         o.type = type::ARRAY; |         o.type = type::ARRAY; | ||||||
|         o.via.array.size = 2; |         o.via.array.size = 2; | ||||||
|         o.via.array.ptr = static_cast<msgpack::object*>( |         o.via.array.ptr = static_cast<msgpack::object*>( | ||||||
|             o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size, MSGPACK_ZONE_ALIGNOF(msgpack::object))); |             o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size)); | ||||||
|         o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone); |         o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone); | ||||||
|         o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); |         o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); | ||||||
|     } |     } | ||||||
| @@ -100,12 +100,11 @@ int main() { | |||||||
|         std::stringstream ss; |         std::stringstream ss; | ||||||
|         msgpack::pack(ss, my); |         msgpack::pack(ss, my); | ||||||
|  |  | ||||||
|         std::string const& str = ss.str(); |         print(ss.str()); | ||||||
|         print(str); |  | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked unp; | ||||||
|             msgpack::unpack(str.data(), str.size()); |         msgpack::unpack(unp, ss.str().data(), ss.str().size()); | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = unp.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<my_class>() == my); |         assert(obj.as<my_class>() == my); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -40,9 +40,9 @@ int main(void) | |||||||
|         std::stringstream sbuf; |         std::stringstream sbuf; | ||||||
|         msgpack::pack(sbuf, oc); |         msgpack::pack(sbuf, oc); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked result; | ||||||
|             msgpack::unpack(sbuf.str().data(), sbuf.str().size()); |         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size()); | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = result.get(); | ||||||
|  |  | ||||||
|         obj.convert(nc); |         obj.convert(nc); | ||||||
|  |  | ||||||
| @@ -56,9 +56,9 @@ int main(void) | |||||||
|         std::stringstream sbuf; |         std::stringstream sbuf; | ||||||
|         msgpack::pack(sbuf, nc); |         msgpack::pack(sbuf, nc); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked result; | ||||||
|             msgpack::unpack(sbuf.str().data(), sbuf.str().size()); |         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size()); | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = result.get(); | ||||||
|  |  | ||||||
|         obj.convert(oc); |         obj.convert(oc); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,20 +30,20 @@ int main(void) | |||||||
|         my_enum e3 = elem3; |         my_enum e3 = elem3; | ||||||
|         msgpack::pack(sbuf, e3); |         msgpack::pack(sbuf, e3); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh; |         msgpack::unpacked result; | ||||||
|         std::size_t off = 0; |         std::size_t off = 0; | ||||||
|  |  | ||||||
|         msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off); |         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off); | ||||||
|         std::cout << oh.get().as<my_enum>() << std::endl; |         std::cout << result.get().as<my_enum>() << std::endl; | ||||||
|         assert(oh.get().as<my_enum>() == elem1); |         assert(result.get().as<my_enum>() == elem1); | ||||||
|  |  | ||||||
|         msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off); |         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off); | ||||||
|         std::cout << oh.get().as<my_enum>() << std::endl; |         std::cout << result.get().as<my_enum>() << std::endl; | ||||||
|         assert(oh.get().as<my_enum>() == elem2); |         assert(result.get().as<my_enum>() == elem2); | ||||||
|  |  | ||||||
|         msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off); |         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off); | ||||||
|         std::cout << oh.get().as<my_enum>() << std::endl; |         std::cout << result.get().as<my_enum>() << std::endl; | ||||||
|         assert(oh.get().as<my_enum>() == elem3); |         assert(result.get().as<my_enum>() == elem3); | ||||||
|     } |     } | ||||||
|     {   // create object without zone |     {   // create object without zone | ||||||
|         msgpack::object obj(elem2); |         msgpack::object obj(elem2); | ||||||
|   | |||||||
| @@ -71,10 +71,9 @@ int main() { | |||||||
|  |  | ||||||
|         print(ss.str()); |         print(ss.str()); | ||||||
|  |  | ||||||
|         std::string const& str = ss.str(); |         msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|         msgpack::object_handle oh = msgpack::unpack(str.data(), str.size()); |  | ||||||
|  |  | ||||||
|         msgpack::object obj = oh.get(); |         msgpack::object obj = unp.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|  |  | ||||||
|         v2 newv = obj.as<v2>(); |         v2 newv = obj.as<v2>(); | ||||||
|   | |||||||
| @@ -57,9 +57,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked result; | ||||||
|             msgpack::unpack(buffer.data(), buffer.size()); |         msgpack::unpack(result, buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = oh.get(); |         msgpack::object o = result.get(); | ||||||
|  |  | ||||||
|         myprotocol::Get req; |         myprotocol::Get req; | ||||||
|         o.convert(req); |         o.convert(req); | ||||||
| @@ -85,9 +85,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked result; | ||||||
|             msgpack::unpack(buffer.data(), buffer.size()); |         msgpack::unpack(result, buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = oh.get(); |         msgpack::object o = result.get(); | ||||||
|  |  | ||||||
|  |  | ||||||
|         myprotocol::MultiGet req; |         myprotocol::MultiGet req; | ||||||
|   | |||||||
| @@ -44,9 +44,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked result; | ||||||
|             msgpack::unpack(buffer.data(), buffer.size()); |         msgpack::unpack(result, buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = oh.get(); |         msgpack::object o = result.get(); | ||||||
|  |  | ||||||
|         myprotocol::Get req; |         myprotocol::Get req; | ||||||
|         o.convert(req); |         o.convert(req); | ||||||
| @@ -72,9 +72,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh = |         msgpack::unpacked result; | ||||||
|             msgpack::unpack(buffer.data(), buffer.size()); |         msgpack::unpack(result, buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = oh.get(); |         msgpack::object o = result.get(); | ||||||
|  |  | ||||||
|  |  | ||||||
|         myprotocol::MultiGet req; |         myprotocol::MultiGet req; | ||||||
|   | |||||||
| @@ -31,13 +31,12 @@ int main() { | |||||||
|     std::size_t offset = 0; |     std::size_t offset = 0; | ||||||
|  |  | ||||||
|     // msgpack array is constructed on z. |     // msgpack array is constructed on z. | ||||||
|     std::string const& ps = ss.str(); |     msgpack::object obj = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset); | ||||||
|     msgpack::object obj = msgpack::unpack(z, ps.data(), ps.size(), offset); |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<std::vector<int> >() == v); |     assert(obj.as<std::vector<int> >() == v); | ||||||
|  |  | ||||||
|     // msgpack str is constructed on z. |     // msgpack str is constructed on z. | ||||||
|     std::string const& str = msgpack::unpack(z, ps.data(), ps.size(), offset).as<std::string>(); |     std::string const& str = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset).as<std::string>(); | ||||||
|     std::cout << str << std::endl; |     std::cout << str << std::endl; | ||||||
|     assert(str == s); |     assert(str == s); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -27,10 +27,12 @@ int main(void) | |||||||
|     // deserialize the buffer into msgpack::object instance. |     // deserialize the buffer into msgpack::object instance. | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh = msgpack::unpack(str.data(), str.size()); |     msgpack::unpacked result; | ||||||
|  |  | ||||||
|     // deserialized object is valid during the msgpack::object_handle instance alive. |     msgpack::unpack(result, str.data(), str.size()); | ||||||
|     msgpack::object deserialized = oh.get(); |  | ||||||
|  |     // deserialized object is valid during the msgpack::unpacked instance alive. | ||||||
|  |     msgpack::object deserialized = result.get(); | ||||||
|  |  | ||||||
|     // msgpack::object supports ostream. |     // msgpack::object supports ostream. | ||||||
|     std::cout << deserialized << std::endl; |     std::cout << deserialized << std::endl; | ||||||
|   | |||||||
| @@ -37,11 +37,11 @@ void test_map_pack_unpack() { | |||||||
|     buffer.seekg(0); |     buffer.seekg(0); | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh; |     msgpack::unpacked unpacked; | ||||||
|     std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl; |     std::cout << "Start unpacking...by void unpack(unpacked& result, const char* data, size_t len)" << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         msgpack::unpack(oh, str.data(), str.size()); |         msgpack::unpack(unpacked, str.data(), str.size()); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
| @@ -50,7 +50,7 @@ void test_map_pack_unpack() { | |||||||
|     std::cout << "Start converting..." << std::endl; |     std::cout << "Start converting..." << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         oh.get().convert(m2); |         unpacked.get().convert(m2); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -60,11 +60,11 @@ void test_array_of_array() { | |||||||
|     buffer.seekg(0); |     buffer.seekg(0); | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh; |     msgpack::unpacked unpacked; | ||||||
|     std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl; |     std::cout << "Start unpacking...by void unpack(unpacked& result, const char* data, size_t len)" << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         msgpack::unpack(oh, str.data(), str.size()); |         msgpack::unpack(unpacked, str.data(), str.size()); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
| @@ -73,7 +73,7 @@ void test_array_of_array() { | |||||||
|     std::cout << "Start converting..." << std::endl; |     std::cout << "Start converting..." << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         oh.get().convert(v2); |         unpacked.get().convert(v2); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -16,12 +16,6 @@ | |||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <pthread.h> | #include <pthread.h> | ||||||
|  |  | ||||||
| #if defined(_MSC_VER) || defined(__MINGW32__) |  | ||||||
| #include <io.h> |  | ||||||
| #include <fcntl.h> |  | ||||||
| #define pipe(fds) _pipe(fds, 4096, _O_BINARY) |  | ||||||
| #endif // _MSC_VER || __MINGW32__ |  | ||||||
|  |  | ||||||
| class Server { | class Server { | ||||||
| public: | public: | ||||||
|     Server(int sock) : m_sock(sock) { } |     Server(int sock) : m_sock(sock) { } | ||||||
| @@ -49,10 +43,10 @@ public: | |||||||
|  |  | ||||||
|         m_pac.buffer_consumed(count); |         m_pac.buffer_consumed(count); | ||||||
|  |  | ||||||
|         msgpack::object_handle oh; |         msgpack::unpacked result; | ||||||
|         while (m_pac.next(oh)) { |         while (m_pac.next(&result)) { | ||||||
|             msgpack::object msg = oh.get(); |             msgpack::object msg = result.get(); | ||||||
|             unique_zone& life = oh.zone(); |             unique_zone& life = result.zone(); | ||||||
|             process_message(msg, life); |             process_message(msg, life); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| IF (MSGPACK_CXX11 OR MSGPACK_CXX17) | IF (MSGPACK_CXX11) | ||||||
|     INCLUDE_DIRECTORIES ( |     INCLUDE_DIRECTORIES ( | ||||||
|         ../include |         ../include | ||||||
|     ) |     ) | ||||||
| @@ -8,30 +8,27 @@ IF (MSGPACK_CXX11 OR MSGPACK_CXX17) | |||||||
|         non_def_con_class.cpp |         non_def_con_class.cpp | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     IF ("${MSGPACK_DEFAULT_API_VERSION}" GREATER "1") |  | ||||||
|         LIST (APPEND exec_PROGRAMS |  | ||||||
|             socket_stream_example.cpp |  | ||||||
|         ) |  | ||||||
|     ENDIF () |  | ||||||
|  |  | ||||||
|     FOREACH (source_file ${exec_PROGRAMS}) |     FOREACH (source_file ${exec_PROGRAMS}) | ||||||
|         GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) |         GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) | ||||||
|         ADD_EXECUTABLE ( |         ADD_EXECUTABLE ( | ||||||
|             ${source_file_we} |             ${source_file_we} | ||||||
|             ${source_file} |             ${source_file} | ||||||
|         ) |         ) | ||||||
|         TARGET_INCLUDE_DIRECTORIES (${source_file_we} |  | ||||||
|             PRIVATE |  | ||||||
|                 $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> |  | ||||||
|         ) |  | ||||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 ") | ||||||
|         ENDIF () |         ENDIF () | ||||||
|  |  | ||||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|         ENDIF () |         ENDIF () | ||||||
|  |  | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |             IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION}) OR | ||||||
|  |                 (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_NO_MISMATCHED_TAGS_SUPPORT_VERSION})) | ||||||
|  |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |             ENDIF () | ||||||
|  |         ENDIF () | ||||||
|  |  | ||||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|             IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |             IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|                 STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |                 STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
| @@ -25,8 +25,8 @@ void array() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, a); |     msgpack::pack(ss, a); | ||||||
|  |  | ||||||
|     msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size()); |     msgpack::unpacked und = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     msgpack::object obj = oh.get(); |     msgpack::object obj = und.get(); | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert((obj.as<std::array<int, 5>>()) == a); |     assert((obj.as<std::array<int, 5>>()) == a); | ||||||
| @@ -37,9 +37,8 @@ void tuple() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, t); |     msgpack::pack(ss, t); | ||||||
|  |  | ||||||
|     auto const& str = ss.str(); |     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto oh = msgpack::unpack(str.data(), str.size()); |     auto obj = und.get(); | ||||||
|     auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<decltype(t)>() == t); |     assert(obj.as<decltype(t)>() == t); | ||||||
| @@ -50,9 +49,8 @@ void unordered_map() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, m); |     msgpack::pack(ss, m); | ||||||
|  |  | ||||||
|     auto const& str = ss.str(); |     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto oh = msgpack::unpack(str.data(), str.size()); |     msgpack::object obj = und.get(); | ||||||
|     msgpack::object obj = oh.get(); |  | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<decltype(m)>() == m); |     assert(obj.as<decltype(m)>() == m); | ||||||
| @@ -63,9 +61,8 @@ void unordered_set() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, s); |     msgpack::pack(ss, s); | ||||||
|  |  | ||||||
|     auto const& str = ss.str(); |     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto oh = msgpack::unpack(str.data(), str.size()); |     auto obj = und.get(); | ||||||
|     auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<decltype(s)>() == s); |     assert(obj.as<decltype(s)>() == s); | ||||||
| @@ -77,9 +74,8 @@ void forward_list() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, f); |     msgpack::pack(ss, f); | ||||||
|  |  | ||||||
|     auto const& str = ss.str(); |     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto oh = msgpack::unpack(str.data(), str.size()); |     auto obj = und.get(); | ||||||
|     auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<type>() == f); |     assert(obj.as<type>() == f); | ||||||
| @@ -102,45 +98,40 @@ void combi() { | |||||||
|     std::size_t offset = 0; |     std::size_t offset = 0; | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto const& str = ss.str(); |         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); |         auto obj = und.get(); | ||||||
|         auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(a)>() == a); |         assert(obj.as<decltype(a)>() == a); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto const& str = ss.str(); |         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); |         auto obj = und.get(); | ||||||
|         auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(t)>() == t); |         assert(obj.as<decltype(t)>() == t); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto const& str = ss.str(); |         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); |         auto obj = und.get(); | ||||||
|         auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(m)>() == m); |         assert(obj.as<decltype(m)>() == m); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto const& str = ss.str(); |         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); |         auto obj = und.get(); | ||||||
|         auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(s)>() == s); |         assert(obj.as<decltype(s)>() == s); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto const& str = ss.str(); |         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); |         auto obj = und.get(); | ||||||
|         auto obj = oh.get(); |  | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(f)>() == f); |         assert(obj.as<decltype(f)>() == f); | ||||||
|   | |||||||
| @@ -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); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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-cxx,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-cxx,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>>()); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										2
									
								
								external/boost/predef
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/boost/predef
									
									
									
									
										vendored
									
									
								
							 Submodule external/boost/predef updated: 560ff5298e...c14eafa3ef
									
								
							
							
								
								
									
										2
									
								
								external/boost/preprocessor
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/boost/preprocessor
									
									
									
									
										vendored
									
									
								
							 Submodule external/boost/preprocessor updated: 56090c56b5...9cb039ab8b
									
								
							| @@ -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.
										
									
								
							| @@ -11,11 +11,7 @@ | |||||||
| #include "msgpack/iterator.hpp" | #include "msgpack/iterator.hpp" | ||||||
| #include "msgpack/zone.hpp" | #include "msgpack/zone.hpp" | ||||||
| #include "msgpack/pack.hpp" | #include "msgpack/pack.hpp" | ||||||
| #include "msgpack/null_visitor.hpp" |  | ||||||
| #include "msgpack/parse.hpp" |  | ||||||
| #include "msgpack/unpack.hpp" | #include "msgpack/unpack.hpp" | ||||||
| #include "msgpack/x3_parse.hpp" |  | ||||||
| #include "msgpack/x3_unpack.hpp" |  | ||||||
| #include "msgpack/sbuffer.hpp" | #include "msgpack/sbuffer.hpp" | ||||||
| #include "msgpack/vrefbuffer.hpp" | #include "msgpack/vrefbuffer.hpp" | ||||||
| #include "msgpack/version.hpp" | #include "msgpack/version.hpp" | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015-2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,10 +10,75 @@ | |||||||
| #ifndef MSGPACK_ADAPTOR_BASE_HPP | #ifndef MSGPACK_ADAPTOR_BASE_HPP | ||||||
| #define MSGPACK_ADAPTOR_BASE_HPP | #define MSGPACK_ADAPTOR_BASE_HPP | ||||||
|  |  | ||||||
| #include "msgpack/adaptor/adaptor_base_decl.hpp" | #include "msgpack/object_fwd.hpp" | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | template <typename Stream> | ||||||
|  | class packer; | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | // Adaptor functors | ||||||
|  |  | ||||||
|  | template <typename T, typename Enabler = void> | ||||||
|  | struct convert { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, T& v) const; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, typename Enabler = void> | ||||||
|  | struct pack { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, T const& v) const; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, typename Enabler = void> | ||||||
|  | struct object { | ||||||
|  |     void operator()(msgpack::object& o, T const& v) const; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, typename Enabler = void> | ||||||
|  | struct object_with_zone { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, T const& v) const; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | // operators | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | inline | ||||||
|  | msgpack::object const& operator>> (msgpack::object const& o, T& v) { | ||||||
|  |     return adaptor::convert<T>()(o, v); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename Stream, typename T> | ||||||
|  | inline | ||||||
|  | msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, T const& v) { | ||||||
|  |     return adaptor::pack<T>()(o, v); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | inline | ||||||
|  | void operator<< (msgpack::object& o, T const& v) { | ||||||
|  |     adaptor::object<T>()(o, v); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | inline | ||||||
|  | void operator<< (msgpack::object::with_zone& o, T const& v) { | ||||||
|  |     adaptor::object_with_zone<T>()(o, v); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/v2/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/v3/adaptor/adaptor_base.hpp" |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_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,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2009 FURUHASHI Sadayuki | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,8 +10,165 @@ | |||||||
| #ifndef MSGPACK_TYPE_ARRAY_REF_HPP | #ifndef MSGPACK_TYPE_ARRAY_REF_HPP | ||||||
| #define MSGPACK_TYPE_ARRAY_REF_HPP | #define MSGPACK_TYPE_ARRAY_REF_HPP | ||||||
|  |  | ||||||
| #include "msgpack/adaptor/array_ref_decl.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  | #include <cstring> | ||||||
|  | #include <string> | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/array_ref.hpp" | namespace msgpack { | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_ARRAY_REFL_HPP | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace type { | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct array_ref { | ||||||
|  |     array_ref() : data(nullptr) {} | ||||||
|  |     array_ref(T& t) : data(&t) {} | ||||||
|  |  | ||||||
|  |     T* data; | ||||||
|  |  | ||||||
|  |     template <typename U> | ||||||
|  |     bool operator==(array_ref<U> const& t) const { | ||||||
|  |         return *data == *t.data; | ||||||
|  |     } | ||||||
|  |     template <typename U> | ||||||
|  |     bool operator!=(array_ref<U> const& t) const { | ||||||
|  |         return !(*data == *t.data); | ||||||
|  |     } | ||||||
|  |     template <typename U> | ||||||
|  |     bool operator< (array_ref<U> const& t) const | ||||||
|  |     { | ||||||
|  |         return *data < *t.data; | ||||||
|  |     } | ||||||
|  |     template <typename U> | ||||||
|  |     bool operator> (array_ref<U> const& t) const | ||||||
|  |     { | ||||||
|  |         return *t.data < *data; | ||||||
|  |     } | ||||||
|  |     template <typename U> | ||||||
|  |     bool operator<= (array_ref<U> const& t) const | ||||||
|  |     { | ||||||
|  |         return !(*t.data < *data); | ||||||
|  |     } | ||||||
|  |     template <typename U> | ||||||
|  |     bool operator>= (array_ref<U> const& t) const | ||||||
|  |     { | ||||||
|  |         return !(*data < *t.data); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | inline array_ref<T const> make_array_ref(T const& t) { | ||||||
|  |     return array_ref<T const>(t); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | inline array_ref<T> make_array_ref(T& t) { | ||||||
|  |     return array_ref<T>(t); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace type | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct convert<msgpack::type::array_ref<T> > { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<T>& v) const { | ||||||
|  |         if (!v.data) { throw msgpack::type_error(); } | ||||||
|  |         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         if (v.data->size() < o.via.bin.size) { throw msgpack::type_error(); } | ||||||
|  |         if (o.via.array.size > 0) { | ||||||
|  |             msgpack::object* p = o.via.array.ptr; | ||||||
|  |             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; | ||||||
|  |             typename T::iterator it = v.data->begin(); | ||||||
|  |             do { | ||||||
|  |                 p->convert(*it); | ||||||
|  |                 ++p; | ||||||
|  |                 ++it; | ||||||
|  |             } while(p < pend); | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct convert<msgpack::type::array_ref<std::vector<T> > > { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<std::vector<T> >& v) const { | ||||||
|  |         if (!v.data) { throw msgpack::type_error(); } | ||||||
|  |         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         v.data->resize(o.via.bin.size); | ||||||
|  |         if (o.via.array.size > 0) { | ||||||
|  |             msgpack::object* p = o.via.array.ptr; | ||||||
|  |             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; | ||||||
|  |             typename std::vector<T>::iterator it = v.data->begin(); | ||||||
|  |             do { | ||||||
|  |                 p->convert(*it); | ||||||
|  |                 ++p; | ||||||
|  |                 ++it; | ||||||
|  |             } while(p < pend); | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct pack<msgpack::type::array_ref<T> > { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::array_ref<T>& v) const { | ||||||
|  |         if (!v.data) { throw msgpack::type_error(); } | ||||||
|  |         uint32_t size = checked_get_container_size(v.data->size()); | ||||||
|  |         o.pack_array(size); | ||||||
|  |         for (typename T::const_iterator it(v.data->begin()), it_end(v.data->end()); | ||||||
|  |             it != it_end; ++it) { | ||||||
|  |             o.pack(*it); | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object_with_zone<msgpack::type::array_ref<T> > { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const msgpack::type::array_ref<T>& v) const { | ||||||
|  |         if (!v.data) { throw msgpack::type_error(); } | ||||||
|  |         o.type = msgpack::type::ARRAY; | ||||||
|  |         if (v.data->empty()) { | ||||||
|  |             o.via.array.ptr = nullptr; | ||||||
|  |             o.via.array.size = 0; | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             uint32_t size = checked_get_container_size(v.data->size()); | ||||||
|  |             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); | ||||||
|  |             msgpack::object* const pend = p + size; | ||||||
|  |             o.via.array.ptr = p; | ||||||
|  |             o.via.array.size = size; | ||||||
|  |             typename T::const_iterator it(v.data->begin()); | ||||||
|  |             do { | ||||||
|  | #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) | ||||||
|  | #pragma GCC diagnostic push | ||||||
|  | #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" | ||||||
|  | #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) | ||||||
|  |                 *p = msgpack::object(*it, o.zone); | ||||||
|  | #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) | ||||||
|  | #pragma GCC diagnostic pop | ||||||
|  | #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) | ||||||
|  |                 ++p; | ||||||
|  |                 ++it; | ||||||
|  |             } while(p < pend); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_ARRAY_REF_HPP | ||||||
|   | |||||||
| @@ -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,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2009 FURUHASHI Sadayuki | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,6 +10,57 @@ | |||||||
| #ifndef MSGPACK_TYPE_BOOL_HPP | #ifndef MSGPACK_TYPE_BOOL_HPP | ||||||
| #define MSGPACK_TYPE_BOOL_HPP | #define MSGPACK_TYPE_BOOL_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/bool.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct convert<bool> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, bool& v) const { | ||||||
|  |         if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); } | ||||||
|  |         v = o.via.boolean; | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct pack<bool> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const bool& v) const { | ||||||
|  |         if(v) { o.pack_true(); } | ||||||
|  |         else { o.pack_false(); } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object<bool> { | ||||||
|  |     void operator()(msgpack::object& o, bool v) const { | ||||||
|  |         o.type = msgpack::type::BOOLEAN; | ||||||
|  |         o.via.boolean = v; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object_with_zone<bool> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, bool v) const { | ||||||
|  |         static_cast<msgpack::object&>(o) << v; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOL_HPP | #endif // MSGPACK_TYPE_BOOL_HPP | ||||||
|   | |||||||
| @@ -10,6 +10,151 @@ | |||||||
| #ifndef MSGPACK_TYPE_BOOST_FUSION_HPP | #ifndef MSGPACK_TYPE_BOOST_FUSION_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_FUSION_HPP | #define MSGPACK_TYPE_BOOST_FUSION_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/boost/fusion.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  | #include "msgpack/meta.hpp" | ||||||
|  |  | ||||||
|  | #if !defined (MSGPACK_USE_CPP03) | ||||||
|  | #include "msgpack/adaptor/cpp11/tuple.hpp" | ||||||
|  | #endif // #if !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  | #include <boost/fusion/support/is_sequence.hpp> | ||||||
|  | #include <boost/fusion/sequence/intrinsic/size.hpp> | ||||||
|  | #include <boost/fusion/algorithm/iteration/for_each.hpp> | ||||||
|  | #include <boost/fusion/sequence/intrinsic/at.hpp> | ||||||
|  | #include <boost/fusion/include/mpl.hpp> | ||||||
|  | #include <boost/mpl/size.hpp> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | #if !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct as< | ||||||
|  |     T, | ||||||
|  |     typename msgpack::enable_if< | ||||||
|  |         boost::fusion::traits::is_sequence<T>::value && | ||||||
|  |         boost::mpl::fold< | ||||||
|  |             T, | ||||||
|  |             boost::mpl::bool_<true>, | ||||||
|  |             boost::mpl::if_ < | ||||||
|  |                 boost::mpl::and_< | ||||||
|  |                     boost::mpl::_1, | ||||||
|  |                     msgpack::has_as<boost::mpl::_2> | ||||||
|  |                 >, | ||||||
|  |                 boost::mpl::bool_<true>, | ||||||
|  |                 boost::mpl::bool_<false> | ||||||
|  |             > | ||||||
|  |         >::type::value | ||||||
|  |     >::type | ||||||
|  | > { | ||||||
|  |     T operator()(msgpack::object const& o) const { | ||||||
|  |         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         if (o.via.array.size != checked_get_container_size(boost::mpl::size<T>::value)) { | ||||||
|  |             throw msgpack::type_error(); | ||||||
|  |         } | ||||||
|  |         using tuple_t = decltype(to_tuple(std::declval<T>(), gen_seq<boost::mpl::size<T>::value>())); | ||||||
|  |         return to_t( | ||||||
|  |             o.as<tuple_t>(), | ||||||
|  |             msgpack::gen_seq<boost::mpl::size<T>::value>()); | ||||||
|  |     } | ||||||
|  |     template<std::size_t... Is, typename U> | ||||||
|  |     static std::tuple< | ||||||
|  |         typename std::remove_reference< | ||||||
|  |             typename boost::fusion::result_of::at_c<T, Is>::type | ||||||
|  |         >::type...> | ||||||
|  |     to_tuple(U const& u, seq<Is...>) { | ||||||
|  |         return std::make_tuple(boost::fusion::at_c<Is>(u)...); | ||||||
|  |     } | ||||||
|  |     template<std::size_t... Is, typename U> | ||||||
|  |     static T to_t(U const& u, seq<Is...>) { | ||||||
|  |         return T(std::get<Is>(u)...); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif // !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct convert<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, T& v) const { | ||||||
|  |         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) { | ||||||
|  |             throw msgpack::type_error(); | ||||||
|  |         } | ||||||
|  |         uint32_t index = 0; | ||||||
|  |         boost::fusion::for_each(v, convert_imp(o, index)); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | private: | ||||||
|  |     struct convert_imp { | ||||||
|  |         convert_imp(msgpack::object const& obj, uint32_t& index):obj_(obj), index_(index) {} | ||||||
|  |         template <typename U> | ||||||
|  |         void operator()(U& v) const { | ||||||
|  |             msgpack::adaptor::convert<U>()(obj_.via.array.ptr[index_++], v); | ||||||
|  |         } | ||||||
|  |     private: | ||||||
|  |         msgpack::object const& obj_; | ||||||
|  |         uint32_t& index_; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct pack<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(boost::fusion::size(v)); | ||||||
|  |         o.pack_array(size); | ||||||
|  |         boost::fusion::for_each(v, pack_imp<Stream>(o)); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | private: | ||||||
|  |     template <typename Stream> | ||||||
|  |     struct pack_imp { | ||||||
|  |         pack_imp(msgpack::packer<Stream>& stream):stream_(stream) {} | ||||||
|  |         template <typename U> | ||||||
|  |         void operator()(U const& v) const { | ||||||
|  |             stream_.pack(v); | ||||||
|  |         } | ||||||
|  |     private: | ||||||
|  |         msgpack::packer<Stream>& stream_; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object_with_zone<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const T& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(boost::fusion::size(v)); | ||||||
|  |         o.type = msgpack::type::ARRAY; | ||||||
|  |         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); | ||||||
|  |         o.via.array.size = size; | ||||||
|  |         uint32_t count = 0; | ||||||
|  |         boost::fusion::for_each(v, with_zone_imp(o, count)); | ||||||
|  |     } | ||||||
|  | private: | ||||||
|  |     struct with_zone_imp { | ||||||
|  |         with_zone_imp(msgpack::object::with_zone const& obj, uint32_t& count):obj_(obj), count_(count) {} | ||||||
|  |         template <typename U> | ||||||
|  |         void operator()(U const& v) const { | ||||||
|  |             obj_.via.array.ptr[count_++] = msgpack::object(v, obj_.zone); | ||||||
|  |         } | ||||||
|  |         msgpack::object::with_zone const& obj_; | ||||||
|  |         uint32_t& count_; | ||||||
|  |     }; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_FUSION_HPP | #endif // MSGPACK_TYPE_BOOST_FUSION_HPP | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015-2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,9 +10,421 @@ | |||||||
| #ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | #ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | #define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | ||||||
|  |  | ||||||
| #include "msgpack/adaptor/boost/msgpack_variant_decl.hpp" | #if defined(MSGPACK_USE_BOOST) | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/boost/msgpack_variant.hpp" | #include "msgpack/versioning.hpp" | ||||||
| //#include "msgpack/v2/adaptor/boost/msgpack_variant.hpp" | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  | #include "msgpack/adaptor/boost/string_ref.hpp" | ||||||
|  |  | ||||||
|  | #include "msgpack/adaptor/nil.hpp" | ||||||
|  | #include "msgpack/adaptor/bool.hpp" | ||||||
|  | #include "msgpack/adaptor/int.hpp" | ||||||
|  | #include "msgpack/adaptor/float.hpp" | ||||||
|  | #include "msgpack/adaptor/string.hpp" | ||||||
|  | #include "msgpack/adaptor/vector_char.hpp" | ||||||
|  | #include "msgpack/adaptor/raw.hpp" | ||||||
|  | #include "msgpack/adaptor/ext.hpp" | ||||||
|  | #include "msgpack/adaptor/vector.hpp" | ||||||
|  | #include "msgpack/adaptor/map.hpp" | ||||||
|  |  | ||||||
|  | #include <boost/variant.hpp> | ||||||
|  | #include <boost/operators.hpp> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace type { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | struct basic_variant : | ||||||
|  |     boost::variant< | ||||||
|  |         nil_t,             // NIL | ||||||
|  |         bool,              // BOOL | ||||||
|  |         int64_t,           // NEGATIVE_INTEGER | ||||||
|  |         uint64_t,          // POSITIVE_INTEGER | ||||||
|  |         double,            // FLOAT | ||||||
|  |         std::string,       // STR | ||||||
|  | #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |         boost::string_ref, // STR | ||||||
|  | #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |         std::vector<char>, // BIN | ||||||
|  |         msgpack::type::raw_ref, // BIN | ||||||
|  |         ext,               // EXT | ||||||
|  |         ext_ref,           // EXT | ||||||
|  |         boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >, // ARRAY | ||||||
|  |         boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >, // MAP | ||||||
|  |         boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >// MAP | ||||||
|  |     >, | ||||||
|  |     private boost::totally_ordered<basic_variant<STR, BIN, EXT> > { | ||||||
|  |     typedef boost::variant< | ||||||
|  |         nil_t,             // NIL | ||||||
|  |         bool,              // BOOL | ||||||
|  |         int64_t,           // NEGATIVE_INTEGER | ||||||
|  |         uint64_t,          // POSITIVE_INTEGER | ||||||
|  |         double,            // FLOAT | ||||||
|  |         std::string,       // STR | ||||||
|  | #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |         boost::string_ref, // STR | ||||||
|  | #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |         std::vector<char>, // BIN | ||||||
|  |         msgpack::type::raw_ref, // BIN | ||||||
|  |         ext,               // EXT | ||||||
|  |         ext_ref,           // EXT | ||||||
|  |         boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >, // ARRAY | ||||||
|  |         boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >, // MAP | ||||||
|  |         boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >// MAP | ||||||
|  |     > base; | ||||||
|  |     basic_variant() {} | ||||||
|  |     template <typename T> | ||||||
|  |     basic_variant(T const& t):base(t) {} | ||||||
|  |     basic_variant(char const* p):base(std::string(p)) {} | ||||||
|  |     basic_variant(char v) { | ||||||
|  |         int_init(v); | ||||||
|  |     } | ||||||
|  |     basic_variant(signed char v) { | ||||||
|  |         int_init(v); | ||||||
|  |     } | ||||||
|  |     basic_variant(unsigned char v):base(uint64_t(v)) {} | ||||||
|  |     basic_variant(signed int v) { | ||||||
|  |         int_init(v); | ||||||
|  |     } | ||||||
|  |     basic_variant(unsigned int v):base(uint64_t(v)) {} | ||||||
|  |     basic_variant(signed long v) { | ||||||
|  |         int_init(v); | ||||||
|  |     } | ||||||
|  |     basic_variant(unsigned long v):base(uint64_t(v)) {} | ||||||
|  |     basic_variant(signed long long v) { | ||||||
|  |         int_init(v); | ||||||
|  |     } | ||||||
|  |     basic_variant(unsigned long long v):base(uint64_t(v)) {} | ||||||
|  |  | ||||||
|  |     bool is_nil() const { | ||||||
|  |         return boost::get<msgpack::type::nil_t>(this); | ||||||
|  |     } | ||||||
|  |     bool is_bool() const { | ||||||
|  |         return boost::get<bool>(this); | ||||||
|  |     } | ||||||
|  |     bool is_int64_t() const { | ||||||
|  |         return boost::get<int64_t>(this); | ||||||
|  |     } | ||||||
|  |     bool is_uint64_t() const { | ||||||
|  |         return boost::get<uint64_t>(this); | ||||||
|  |     } | ||||||
|  |     bool is_double() const { | ||||||
|  |         return boost::get<double>(this); | ||||||
|  |     } | ||||||
|  |     bool is_string() const { | ||||||
|  |         return boost::get<std::string>(this); | ||||||
|  |     } | ||||||
|  | #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     bool is_boost_string_ref() const { | ||||||
|  |         return boost::get<boost::string_ref>(this); | ||||||
|  |     } | ||||||
|  | #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     bool is_vector_char() const { | ||||||
|  |         return boost::get<std::vector<char> >(this); | ||||||
|  |     } | ||||||
|  |     bool is_vector_char() { | ||||||
|  |         return boost::get<std::vector<char> >(this); | ||||||
|  |     } | ||||||
|  |     bool is_raw_ref() const { | ||||||
|  |         return boost::get<raw_ref>(this); | ||||||
|  |     } | ||||||
|  |     bool is_ext() const { | ||||||
|  |         return boost::get<ext>(this); | ||||||
|  |     } | ||||||
|  |     bool is_ext_ref() const { | ||||||
|  |         return boost::get<ext_ref>(this); | ||||||
|  |     } | ||||||
|  |     bool is_vector() const { | ||||||
|  |         return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(this); | ||||||
|  |     } | ||||||
|  |     bool is_map() const { | ||||||
|  |         return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(this); | ||||||
|  |     } | ||||||
|  |     bool is_multimap() const { | ||||||
|  |         return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(this); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     bool as_bool() const { | ||||||
|  |         return boost::get<bool>(*this); | ||||||
|  |     } | ||||||
|  |     int64_t as_int64_t() const { | ||||||
|  |         return boost::get<int64_t>(*this); | ||||||
|  |     } | ||||||
|  |     int64_t& as_int64_t() { | ||||||
|  |         return boost::get<int64_t>(*this); | ||||||
|  |     } | ||||||
|  |     uint64_t as_uint64_t() const { | ||||||
|  |         return boost::get<uint64_t>(*this); | ||||||
|  |     } | ||||||
|  |     uint64_t& as_uint64_t() { | ||||||
|  |         return boost::get<uint64_t>(*this); | ||||||
|  |     } | ||||||
|  |     double as_double() const { | ||||||
|  |         return boost::get<double>(*this); | ||||||
|  |     } | ||||||
|  |     double& as_double() { | ||||||
|  |         return boost::get<double>(*this); | ||||||
|  |     } | ||||||
|  |     std::string const& as_string() const { | ||||||
|  |         return boost::get<std::string>(*this); | ||||||
|  |     } | ||||||
|  |     std::string& as_string() { | ||||||
|  |         return boost::get<std::string>(*this); | ||||||
|  |     } | ||||||
|  | #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     boost::string_ref const& as_boost_string_ref() const { | ||||||
|  |         return boost::get<boost::string_ref>(*this); | ||||||
|  |     } | ||||||
|  |     boost::string_ref& as_boost_string_ref() { | ||||||
|  |         return boost::get<boost::string_ref>(*this); | ||||||
|  |     } | ||||||
|  | #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     std::vector<char> const& as_vector_char() const { | ||||||
|  |         return boost::get<std::vector<char> >(*this); | ||||||
|  |     } | ||||||
|  |     std::vector<char>& as_vector_char() { | ||||||
|  |         return boost::get<std::vector<char> >(*this); | ||||||
|  |     } | ||||||
|  |     raw_ref const& as_raw_ref() const { | ||||||
|  |         return boost::get<raw_ref>(*this); | ||||||
|  |     } | ||||||
|  |     ext const& as_ext() const { | ||||||
|  |         return boost::get<ext>(*this); | ||||||
|  |     } | ||||||
|  |     ext& as_ext() { | ||||||
|  |         return boost::get<ext>(*this); | ||||||
|  |     } | ||||||
|  |     ext_ref const& as_ext_ref() const { | ||||||
|  |         return boost::get<ext_ref>(*this); | ||||||
|  |     } | ||||||
|  |     std::vector<basic_variant<STR, BIN, EXT> > const& as_vector() const { | ||||||
|  |         return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this); | ||||||
|  |     } | ||||||
|  |     std::vector<basic_variant<STR, BIN, EXT> >& as_vector() { | ||||||
|  |         return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this); | ||||||
|  |     } | ||||||
|  |     std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > const& as_map() const { | ||||||
|  |         return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); | ||||||
|  |     } | ||||||
|  |     std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> >& as_map() { | ||||||
|  |         return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); | ||||||
|  |     } | ||||||
|  |     std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > const& as_multimap() const { | ||||||
|  |         return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); | ||||||
|  |     } | ||||||
|  |     std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> >& as_multimap() { | ||||||
|  |         return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); | ||||||
|  |     } | ||||||
|  | private: | ||||||
|  |     template <typename T> | ||||||
|  |     void int_init(T v) { | ||||||
|  |         if (v < 0) { | ||||||
|  |             static_cast<base&>(*this) = int64_t(v); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             static_cast<base&>(*this) = uint64_t(v); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | inline bool operator<(basic_variant<STR, BIN, EXT> const& lhs, basic_variant<STR, BIN, EXT> const& rhs) { | ||||||
|  |     return | ||||||
|  |         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(lhs) < | ||||||
|  |         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(rhs); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | inline bool operator==(basic_variant<STR, BIN, EXT> const& lhs, basic_variant<STR, BIN, EXT> const& rhs) { | ||||||
|  |     return | ||||||
|  |         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(lhs) == | ||||||
|  |         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(rhs); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | typedef basic_variant<std::string, std::vector<char>, ext> variant; | ||||||
|  | typedef basic_variant< | ||||||
|  | #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     boost::string_ref, | ||||||
|  | #else  // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     std::string, | ||||||
|  | #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |     raw_ref, ext_ref> variant_ref; | ||||||
|  |  | ||||||
|  | } // namespace type | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | #if !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | struct as<msgpack::type::basic_variant<STR, BIN, EXT> > { | ||||||
|  |     msgpack::type::basic_variant<STR, BIN, EXT> operator()(msgpack::object const& o) const { | ||||||
|  |         switch(o.type) { | ||||||
|  |         case type::NIL: | ||||||
|  |             return o.as<msgpack::type::nil_t>(); | ||||||
|  |         case type::BOOLEAN: | ||||||
|  |             return o.as<bool>(); | ||||||
|  |         case type::POSITIVE_INTEGER: | ||||||
|  |             return o.as<uint64_t>(); | ||||||
|  |         case type::NEGATIVE_INTEGER: | ||||||
|  |             return o.as<int64_t>(); | ||||||
|  |         case type::FLOAT: | ||||||
|  |             return o.as<double>(); | ||||||
|  |         case type::STR: | ||||||
|  |             return o.as<STR>(); | ||||||
|  |         case type::BIN: | ||||||
|  |             return o.as<BIN>(); | ||||||
|  |         case type::EXT: | ||||||
|  |             return o.as<EXT>(); | ||||||
|  |         case type::ARRAY: | ||||||
|  |             return o.as<std::vector<msgpack::type::basic_variant<STR, BIN, EXT> > >(); | ||||||
|  |         case type::MAP: | ||||||
|  |             return o.as<std::multimap<msgpack::type::basic_variant<STR, BIN, EXT>, msgpack::type::basic_variant<STR, BIN, EXT> > >(); | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         return msgpack::type::basic_variant<STR, BIN, EXT>(); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif // !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | struct convert<msgpack::type::basic_variant<STR, BIN, EXT> > { | ||||||
|  |     msgpack::object const& operator()( | ||||||
|  |         msgpack::object const& o, | ||||||
|  |         msgpack::type::basic_variant<STR, BIN, EXT>& v) const { | ||||||
|  |         switch(o.type) { | ||||||
|  |         case type::NIL: | ||||||
|  |             v = o.as<msgpack::type::nil_t>(); | ||||||
|  |             break; | ||||||
|  |         case type::BOOLEAN: | ||||||
|  |             v = o.as<bool>(); | ||||||
|  |             break; | ||||||
|  |         case type::POSITIVE_INTEGER: | ||||||
|  |             v = o.as<uint64_t>(); | ||||||
|  |             break; | ||||||
|  |         case type::NEGATIVE_INTEGER: | ||||||
|  |             v = o.as<int64_t>(); | ||||||
|  |             break; | ||||||
|  |         case type::FLOAT: | ||||||
|  |             v = o.as<double>(); | ||||||
|  |             break; | ||||||
|  |         case type::STR: | ||||||
|  |             v = o.as<STR>(); | ||||||
|  |             break; | ||||||
|  |         case type::BIN: | ||||||
|  |             v = o.as<BIN>(); | ||||||
|  |             break; | ||||||
|  |         case type::EXT: | ||||||
|  |             v = o.as<EXT>(); | ||||||
|  |             break; | ||||||
|  |         case type::ARRAY: | ||||||
|  |             v = o.as<std::vector<msgpack::type::basic_variant<STR, BIN, EXT> > >(); | ||||||
|  |             break; | ||||||
|  |         case type::MAP: | ||||||
|  |             v = o.as<std::multimap<msgpack::type::basic_variant<STR, BIN, EXT>, msgpack::type::basic_variant<STR, BIN, EXT> > >(); | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | namespace detail { | ||||||
|  |  | ||||||
|  | template <typename Stream> | ||||||
|  | struct pack_imp : boost::static_visitor<void> { | ||||||
|  |     template <typename T> | ||||||
|  |     void operator()(T const& value) const { | ||||||
|  |         pack<T>()(o_, value); | ||||||
|  |     } | ||||||
|  |     pack_imp(packer<Stream>& o):o_(o) {} | ||||||
|  |     packer<Stream>& o_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace detail | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | struct pack<msgpack::type::basic_variant<STR, BIN, EXT> > { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const { | ||||||
|  |         boost::apply_visitor(detail::pack_imp<Stream>(o), v); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | namespace detail { | ||||||
|  |  | ||||||
|  | struct object_imp : boost::static_visitor<void> { | ||||||
|  |     void operator()(msgpack::type::nil_t const& v) const { | ||||||
|  |         object<msgpack::type::nil_t>()(o_, v); | ||||||
|  |     } | ||||||
|  |     void operator()(bool const& v) const { | ||||||
|  |         object<bool>()(o_, v); | ||||||
|  |     } | ||||||
|  |     void operator()(uint64_t const& v) const { | ||||||
|  |         object<uint64_t>()(o_, v); | ||||||
|  |     } | ||||||
|  |     void operator()(int64_t const& v) const { | ||||||
|  |         object<int64_t>()(o_, v); | ||||||
|  |     } | ||||||
|  |     void operator()(double const& v) const { | ||||||
|  |         object<double>()(o_, v); | ||||||
|  |     } | ||||||
|  |     template <typename T> | ||||||
|  |     void operator()(T const&) const { | ||||||
|  |         throw msgpack::type_error(); | ||||||
|  |     } | ||||||
|  |     object_imp(msgpack::object& o):o_(o) {} | ||||||
|  |     msgpack::object& o_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace detail | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | struct object<msgpack::type::basic_variant<STR, BIN, EXT> > { | ||||||
|  |     void operator()(msgpack::object& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const { | ||||||
|  |         boost::apply_visitor(detail::object_imp(o), v); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | namespace detail { | ||||||
|  |  | ||||||
|  | struct object_with_zone_imp : boost::static_visitor<void> { | ||||||
|  |     template <typename T> | ||||||
|  |     void operator()(T const& v) const { | ||||||
|  |         object_with_zone<T>()(o_, v); | ||||||
|  |     } | ||||||
|  |     object_with_zone_imp(msgpack::object::with_zone& o):o_(o) {} | ||||||
|  |     msgpack::object::with_zone& o_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace detail | ||||||
|  |  | ||||||
|  | template <typename STR, typename BIN, typename EXT> | ||||||
|  | struct object_with_zone<msgpack::type::basic_variant<STR, BIN, EXT> > { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const { | ||||||
|  |         boost::apply_visitor(detail::object_with_zone_imp(o), v); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_USE_BOOST | ||||||
| #endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | #endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | ||||||
|   | |||||||
| @@ -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,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,6 +10,87 @@ | |||||||
| #ifndef MSGPACK_TYPE_BOOST_OPTIONAL_HPP | #ifndef MSGPACK_TYPE_BOOST_OPTIONAL_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_OPTIONAL_HPP | #define MSGPACK_TYPE_BOOST_OPTIONAL_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/boost/optional.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
|  | // To suppress warning on Boost.1.58.0 | ||||||
|  | #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) | ||||||
|  | #pragma GCC diagnostic push | ||||||
|  | #pragma GCC diagnostic ignored "-Wunused-parameter" | ||||||
|  | #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) | ||||||
|  |  | ||||||
|  | #include <boost/optional.hpp> | ||||||
|  |  | ||||||
|  | #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) | ||||||
|  | #pragma GCC diagnostic pop | ||||||
|  | #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | #if !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct as<boost::optional<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> { | ||||||
|  |     boost::optional<T> operator()(msgpack::object const& o) const { | ||||||
|  |         if(o.is_nil()) return boost::none; | ||||||
|  |         return o.as<T>(); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif // !defined (MSGPACK_USE_CPP03) | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct convert<boost::optional<T> > { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, boost::optional<T>& v) const { | ||||||
|  |         if(o.is_nil()) v = boost::none; | ||||||
|  |         else { | ||||||
|  |             T t; | ||||||
|  |             msgpack::adaptor::convert<T>()(o, t); | ||||||
|  |             v = t; | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct pack<boost::optional<T> > { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::optional<T>& v) const { | ||||||
|  |         if (v) o.pack(*v); | ||||||
|  |         else o.pack_nil(); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object<boost::optional<T> > { | ||||||
|  |     void operator()(msgpack::object& o, const boost::optional<T>& v) const { | ||||||
|  |         if (v) msgpack::adaptor::object<T>()(o, *v); | ||||||
|  |         else o.type = msgpack::type::NIL; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object_with_zone<boost::optional<T> > { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const boost::optional<T>& v) const { | ||||||
|  |         if (v) msgpack::adaptor::object_with_zone<T>()(o, *v); | ||||||
|  |         else o.type = msgpack::type::NIL; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP | #endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,6 +10,78 @@ | |||||||
| #ifndef MSGPACK_TYPE_BOOST_STRING_REF_HPP | #ifndef MSGPACK_TYPE_BOOST_STRING_REF_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_STRING_REF_HPP | #define MSGPACK_TYPE_BOOST_STRING_REF_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/boost/string_ref.hpp" | #include <boost/version.hpp> | ||||||
|  | #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |  | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
|  | #include <boost/utility/string_ref.hpp> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct convert<boost::string_ref> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, boost::string_ref& v) const { | ||||||
|  |         switch (o.type) { | ||||||
|  |         case msgpack::type::BIN: | ||||||
|  |             v = boost::string_ref(o.via.bin.ptr, o.via.bin.size); | ||||||
|  |             break; | ||||||
|  |         case msgpack::type::STR: | ||||||
|  |             v = boost::string_ref(o.via.str.ptr, o.via.str.size); | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             throw msgpack::type_error(); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct pack<boost::string_ref> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::string_ref& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.pack_str(size); | ||||||
|  |         o.pack_str_body(v.data(), size); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object<boost::string_ref> { | ||||||
|  |     void operator()(msgpack::object& o, const boost::string_ref& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         o.via.str.ptr = v.data(); | ||||||
|  |         o.via.str.size = size; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object_with_zone<boost::string_ref> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const boost::string_ref& v) const { | ||||||
|  |         static_cast<msgpack::object&>(o) << v; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP | #endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP | ||||||
|   | |||||||
| @@ -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,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2014-2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,6 +10,148 @@ | |||||||
| #ifndef MSGPACK_TYPE_CHAR_PTR_HPP | #ifndef MSGPACK_TYPE_CHAR_PTR_HPP | ||||||
| #define MSGPACK_TYPE_CHAR_PTR_HPP | #define MSGPACK_TYPE_CHAR_PTR_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/char_ptr.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/object_fwd.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
|  | #include <cstring> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct pack<const char*> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.pack_str(size); | ||||||
|  |         o.pack_str_body(v, size); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object_with_zone<const char*> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); | ||||||
|  |         o.via.str.ptr = ptr; | ||||||
|  |         o.via.str.size = size; | ||||||
|  |         std::memcpy(ptr, v, size); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object<const char*> { | ||||||
|  |     void operator()(msgpack::object& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         o.via.str.ptr = v; | ||||||
|  |         o.via.str.size = size; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct pack<char*> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     packer<Stream>& operator()(packer<Stream>& o, char* v) const { | ||||||
|  |         return o << static_cast<const char*>(v); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object_with_zone<char*> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, char* v) const { | ||||||
|  |         o << static_cast<const char*>(v); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct object<char*> { | ||||||
|  |     void operator()(msgpack::object& o, char* v) const { | ||||||
|  |         o << static_cast<const char*>(v); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct pack<char[N]> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.pack_str(size); | ||||||
|  |         o.pack_str_body(v, size); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object_with_zone<char[N]> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); | ||||||
|  |         o.via.str.ptr = ptr; | ||||||
|  |         o.via.str.size = size; | ||||||
|  |         std::memcpy(ptr, v, size); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object<char[N]> { | ||||||
|  |     void operator()(msgpack::object& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         o.via.str.ptr = v; | ||||||
|  |         o.via.str.size = size; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct pack<const char[N]> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.pack_str(size); | ||||||
|  |         o.pack_str_body(v, size); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object_with_zone<const char[N]> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); | ||||||
|  |         o.via.str.ptr = ptr; | ||||||
|  |         o.via.str.size = size; | ||||||
|  |         std::memcpy(ptr, v, size); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object<const char[N]> { | ||||||
|  |     void operator()(msgpack::object& o, const char* v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::strlen(v)); | ||||||
|  |         o.type = msgpack::type::STR; | ||||||
|  |         o.via.str.ptr = v; | ||||||
|  |         o.via.str.size = size; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CHAR_PTR_HPP | #endif // MSGPACK_TYPE_CHAR_PTR_HPP | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015-2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| @@ -10,8 +10,58 @@ | |||||||
| #ifndef MSGPACK_CHECK_CONTAINER_SIZE_HPP | #ifndef MSGPACK_CHECK_CONTAINER_SIZE_HPP | ||||||
| #define MSGPACK_CHECK_CONTAINER_SIZE_HPP | #define MSGPACK_CHECK_CONTAINER_SIZE_HPP | ||||||
|  |  | ||||||
| #include "msgpack/adaptor/check_container_size_decl.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include <stdexcept> | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/check_container_size.hpp" | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | struct container_size_overflow : public std::runtime_error { | ||||||
|  |     explicit container_size_overflow(const std::string& msg) | ||||||
|  |         :std::runtime_error(msg) {} | ||||||
|  | #if !defined(MSGPACK_USE_CPP03) | ||||||
|  |     explicit container_size_overflow(const char* msg): | ||||||
|  |         std::runtime_error(msg) {} | ||||||
|  | #endif // !defined(MSGPACK_USE_CPP03) | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | namespace detail { | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | inline void check_container_size(std::size_t size) { | ||||||
|  |     if (size > 0xffffffff) throw container_size_overflow("container size overflow"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | inline void check_container_size<4>(std::size_t /*size*/) { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | inline void check_container_size_for_ext(std::size_t size) { | ||||||
|  |     if (size > 0xffffffff) throw container_size_overflow("container size overflow"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | inline void check_container_size_for_ext<4>(std::size_t size) { | ||||||
|  |     if (size > 0xfffffffe) throw container_size_overflow("container size overflow"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace detail | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | inline uint32_t checked_get_container_size(T size) { | ||||||
|  |     detail::check_container_size<sizeof(T)>(size); | ||||||
|  |     return static_cast<uint32_t>(size); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
| #endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP | #endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP | ||||||
|   | |||||||
| @@ -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 +1,138 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2014-2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_TYPE_CPP11_ARRAY_HPP | #ifndef MSGPACK_CPP11_ARRAY_HPP | ||||||
| #define MSGPACK_TYPE_CPP11_ARRAY_HPP | #define MSGPACK_CPP11_ARRAY_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/cpp11/array.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  | #include "msgpack/meta.hpp" | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CPP11_ARRAY_HPP | #include <array> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | namespace detail { | ||||||
|  |  | ||||||
|  | namespace array { | ||||||
|  |  | ||||||
|  | template<typename T, std::size_t N1, std::size_t... I1, std::size_t N2, std::size_t... I2> | ||||||
|  | inline std::array<T, N1+N2> concat( | ||||||
|  |     std::array<T, N1>&& a1, | ||||||
|  |     std::array<T, N2>&& a2, | ||||||
|  |     msgpack::seq<I1...>, | ||||||
|  |     msgpack::seq<I2...>) { | ||||||
|  |     return {{ std::move(a1[I1])..., std::move(a2[I2])... }}; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template<typename T, std::size_t N1, std::size_t N2> | ||||||
|  | inline std::array<T, N1+N2> concat(std::array<T, N1>&& a1, std::array<T, N2>&& a2) { | ||||||
|  |     return concat(std::move(a1), std::move(a2), msgpack::gen_seq<N1>(), msgpack::gen_seq<N2>()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename T, std::size_t N> | ||||||
|  | struct as_impl { | ||||||
|  |     static std::array<T, N> as(msgpack::object const& o) { | ||||||
|  |         msgpack::object* p = o.via.array.ptr + N - 1; | ||||||
|  |         return concat(as_impl<T, N-1>::as(o), std::array<T, 1>{{p->as<T>()}}); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct as_impl<T, 1> { | ||||||
|  |     static std::array<T, 1> as(msgpack::object const& o) { | ||||||
|  |         msgpack::object* p = o.via.array.ptr; | ||||||
|  |         return std::array<T, 1>{{p->as<T>()}}; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct as_impl<T, 0> { | ||||||
|  |     static std::array<T, 0> as(msgpack::object const&) { | ||||||
|  |         return std::array<T, 0>(); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace array | ||||||
|  |  | ||||||
|  | } // namespace detail | ||||||
|  |  | ||||||
|  | template <typename T, std::size_t N> | ||||||
|  | struct as<std::array<T, N>, typename std::enable_if<msgpack::has_as<T>::value>::type> { | ||||||
|  |     std::array<T, N> operator()(msgpack::object const& o) const { | ||||||
|  |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         if(o.via.array.size != N) { throw msgpack::type_error(); } | ||||||
|  |         return detail::array::as_impl<T, N>::as(o); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, std::size_t N> | ||||||
|  | struct convert<std::array<T, N>> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, std::array<T, N>& v) const { | ||||||
|  |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         if(o.via.array.size != N) { throw msgpack::type_error(); } | ||||||
|  |         if(o.via.array.size > 0) { | ||||||
|  |             msgpack::object* p = o.via.array.ptr; | ||||||
|  |             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; | ||||||
|  |             T* it = &v[0]; | ||||||
|  |             do { | ||||||
|  |                 p->convert(*it); | ||||||
|  |                 ++p; | ||||||
|  |                 ++it; | ||||||
|  |             } while(p < pend); | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, std::size_t N> | ||||||
|  | struct pack<std::array<T, N>> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<T, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.pack_array(size); | ||||||
|  |         for(auto const& e : v) o.pack(e); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, std::size_t N> | ||||||
|  | struct object_with_zone<std::array<T, N>> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const std::array<T, N>& v) const { | ||||||
|  |         o.type = msgpack::type::ARRAY; | ||||||
|  |         if(v.empty()) { | ||||||
|  |             o.via.array.ptr = nullptr; | ||||||
|  |             o.via.array.size = 0; | ||||||
|  |         } else { | ||||||
|  |             uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); | ||||||
|  |             o.via.array.size = size; | ||||||
|  |             o.via.array.ptr = p; | ||||||
|  |             for (auto const& e : v) *p++ = msgpack::object(e, o.zone); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_CPP11_ARRAY_HPP | ||||||
|   | |||||||
| @@ -1,16 +1,89 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2014-2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
|  | #ifndef MSGPACK_TYPE_ARRAY_CHAR_HPP | ||||||
|  | #define MSGPACK_TYPE_ARRAY_CHAR_HPP | ||||||
|  |  | ||||||
| #ifndef MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP | #include "msgpack/versioning.hpp" | ||||||
| #define MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/cpp11/array_char.hpp" | #include <array> | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct convert<std::array<char, N>> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, std::array<char, N>& v) const { | ||||||
|  |         switch (o.type) { | ||||||
|  |         case msgpack::type::BIN: | ||||||
|  |             if(o.via.bin.size != N) { throw msgpack::type_error(); } | ||||||
|  |             std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); | ||||||
|  |             break; | ||||||
|  |         case msgpack::type::STR: | ||||||
|  |             if(o.via.str.size != N) { throw msgpack::type_error(); } | ||||||
|  |             std::memcpy(v.data(), o.via.str.ptr, N); | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             throw msgpack::type_error(); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct pack<std::array<char, N>> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<char, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.pack_bin(size); | ||||||
|  |         o.pack_bin_body(v.data(), size); | ||||||
|  |  | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object<std::array<char, N>> { | ||||||
|  |     void operator()(msgpack::object& o, const std::array<char, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.type = msgpack::type::BIN; | ||||||
|  |         o.via.bin.ptr = v.data(); | ||||||
|  |         o.via.bin.size = size; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object_with_zone<std::array<char, N>> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const std::array<char, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.type = msgpack::type::BIN; | ||||||
|  |         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); | ||||||
|  |         o.via.bin.ptr = ptr; | ||||||
|  |         o.via.bin.size = size; | ||||||
|  |         std::memcpy(ptr, v.data(), size); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_ARRAY_CHAR_HPP | ||||||
|   | |||||||
| @@ -1,16 +1,89 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2014-2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
|  | #ifndef MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP | ||||||
|  | #define MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP | ||||||
|  |  | ||||||
| #ifndef MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP | #include "msgpack/versioning.hpp" | ||||||
| #define MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp" | #include <array> | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct convert<std::array<unsigned char, N>> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, std::array<unsigned char, N>& v) const { | ||||||
|  |         switch (o.type) { | ||||||
|  |         case msgpack::type::BIN: | ||||||
|  |             if(o.via.bin.size != N) { throw msgpack::type_error(); } | ||||||
|  |             std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); | ||||||
|  |             break; | ||||||
|  |         case msgpack::type::STR: | ||||||
|  |             if(o.via.str.size != N) { throw msgpack::type_error(); } | ||||||
|  |             std::memcpy(v.data(), o.via.str.ptr, N); | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             throw msgpack::type_error(); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct pack<std::array<unsigned char, N>> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<unsigned char, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.pack_bin(size); | ||||||
|  |         o.pack_bin_body(reinterpret_cast<char const*>(v.data()), size); | ||||||
|  |  | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object<std::array<unsigned char, N>> { | ||||||
|  |     void operator()(msgpack::object& o, const std::array<unsigned char, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.type = msgpack::type::BIN; | ||||||
|  |         o.via.bin.ptr = reinterpret_cast<char const*>(v.data()); | ||||||
|  |         o.via.bin.size = size; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <std::size_t N> | ||||||
|  | struct object_with_zone<std::array<unsigned char, N>> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const std::array<unsigned char, N>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(v.size()); | ||||||
|  |         o.type = msgpack::type::BIN; | ||||||
|  |         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); | ||||||
|  |         o.via.bin.ptr = ptr; | ||||||
|  |         o.via.bin.size = size; | ||||||
|  |         std::memcpy(ptr, v.data(), size); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP | ||||||
|   | |||||||
| @@ -1,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 +1,94 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2014 KONDO-2015 Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP | #ifndef MSGPACK_CPP11_FORWARD_LIST_HPP | ||||||
| #define MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP | #define MSGPACK_CPP11_FORWARD_LIST_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/cpp11/forward_list.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP | #include <forward_list> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <typename T, typename Alloc> | ||||||
|  |     struct as<std::forward_list<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> { | ||||||
|  |     std::forward_list<T, Alloc> operator()(msgpack::object const& o) const { | ||||||
|  |         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         std::forward_list<T, Alloc> v; | ||||||
|  |         msgpack::object* p = o.via.array.ptr + o.via.array.size; | ||||||
|  |         msgpack::object* const pend = o.via.array.ptr; | ||||||
|  |         while (p != pend) { | ||||||
|  |             --p; | ||||||
|  |             v.push_front(p->as<T>()); | ||||||
|  |         } | ||||||
|  |         return v; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, typename Alloc> | ||||||
|  | struct convert<std::forward_list<T, Alloc>> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, std::forward_list<T, Alloc>& v) const { | ||||||
|  |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         v.resize(o.via.array.size); | ||||||
|  |         msgpack::object* p = o.via.array.ptr; | ||||||
|  |         for (auto &e : v) { | ||||||
|  |             p->convert(e); | ||||||
|  |             ++p; | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, typename Alloc> | ||||||
|  | struct pack<std::forward_list<T, Alloc>> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::forward_list<T, Alloc>& v) const { | ||||||
|  |         uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); | ||||||
|  |         o.pack_array(size); | ||||||
|  |         for(auto const& e : v) o.pack(e); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T, typename Alloc> | ||||||
|  | struct object_with_zone<std::forward_list<T, Alloc>> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const std::forward_list<T, Alloc>& v) const { | ||||||
|  |         o.type = msgpack::type::ARRAY; | ||||||
|  |         if(v.empty()) { | ||||||
|  |             o.via.array.ptr = nullptr; | ||||||
|  |             o.via.array.size = 0; | ||||||
|  |         } else { | ||||||
|  |             uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); | ||||||
|  |             o.via.array.size = size; | ||||||
|  |             msgpack::object* p = static_cast<msgpack::object*>( | ||||||
|  |                 o.zone.allocate_align(sizeof(msgpack::object)*size)); | ||||||
|  |             o.via.array.ptr = p; | ||||||
|  |             for(auto const& e : v) *p++ = msgpack::object(e, o.zone); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_CPP11_FORWARD_LIST_HPP | ||||||
|   | |||||||
| @@ -1,16 +1,68 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP | #ifndef MSGPACK_CPP11_REFERENCE_WRAPPER_HPP | ||||||
| #define MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP | #define MSGPACK_CPP11_REFERENCE_WRAPPER_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/cpp11/reference_wrapper.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP | #include <memory> | ||||||
|  | #include <type_traits> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct convert<std::reference_wrapper<T>> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, std::reference_wrapper<T>& v) const { | ||||||
|  |         msgpack::adaptor::convert<T>()(o, v.get()); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct pack<std::reference_wrapper<T>> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::reference_wrapper<T>& v) const { | ||||||
|  |         o.pack(v.get()); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object<std::reference_wrapper<T> > { | ||||||
|  |     void operator()(msgpack::object& o, const std::reference_wrapper<T>& v) const { | ||||||
|  |         msgpack::adaptor::object<typename std::remove_const<T>::type>()(o, v.get()); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object_with_zone<std::reference_wrapper<T>> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const std::reference_wrapper<T>& v) const { | ||||||
|  |         msgpack::adaptor::object_with_zone<typename std::remove_const<T>::type>()(o, v.get()); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_CPP11_REFERENCE_WRAPPER_HPP | ||||||
|   | |||||||
| @@ -1,16 +1,82 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2016 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Distributed under the Boost Software License, Version 1.0. | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    http://www.boost.org/LICENSE_1_0.txt) | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_TYPE_CPP11_SHARED_PTR_HPP | #ifndef MSGPACK_CPP11_SHARED_PTR_HPP | ||||||
| #define MSGPACK_TYPE_CPP11_SHARED_PTR_HPP | #define MSGPACK_CPP11_SHARED_PTR_HPP | ||||||
|  |  | ||||||
| #include "msgpack/v1/adaptor/cpp11/shared_ptr.hpp" | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CPP11_SHARED_PTR_HPP | #include <memory> | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace adaptor { | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct as<std::shared_ptr<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> { | ||||||
|  |     std::shared_ptr<T> operator()(msgpack::object const& o) const { | ||||||
|  |         if(o.is_nil()) return nullptr; | ||||||
|  |         return std::make_shared<T>(o.as<T>()); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct convert<std::shared_ptr<T>> { | ||||||
|  |     msgpack::object const& operator()(msgpack::object const& o, std::shared_ptr<T>& v) const { | ||||||
|  |         if(o.is_nil()) v.reset(); | ||||||
|  |         else { | ||||||
|  |             v = std::make_shared<T>(); | ||||||
|  |             msgpack::adaptor::convert<T>()(o, *v); | ||||||
|  |         } | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct pack<std::shared_ptr<T>> { | ||||||
|  |     template <typename Stream> | ||||||
|  |     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::shared_ptr<T>& v) const { | ||||||
|  |         if (v) o.pack(*v); | ||||||
|  |         else o.pack_nil(); | ||||||
|  |         return o; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object<std::shared_ptr<T> > { | ||||||
|  |     void operator()(msgpack::object& o, const std::shared_ptr<T>& v) const { | ||||||
|  |         if (v) msgpack::adaptor::object<T>()(o, *v); | ||||||
|  |         else o.type = msgpack::type::NIL; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct object_with_zone<std::shared_ptr<T>> { | ||||||
|  |     void operator()(msgpack::object::with_zone& o, const std::shared_ptr<T>& v) const { | ||||||
|  |         if (v) msgpack::adaptor::object_with_zone<T>()(o, *v); | ||||||
|  |         else o.type = msgpack::type::NIL; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace adaptor | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | } // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | } // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_CPP11_SHARED_PTR_HPP | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user