mirror of
				https://github.com/msgpack/msgpack-c.git
				synced 2025-10-22 08:02:08 +02:00 
			
		
		
		
	Compare commits
	
		
			260 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 6e7deb8091 | ||
|   | 66fa561256 | ||
|   | 243fb27c3c | ||
|   | 746e983bf3 | ||
|   | 766afb90ed | ||
|   | 403567c1c5 | ||
|   | f3fe1b801e | ||
|   | 4fdbc7518f | ||
|   | 0dbdb3d974 | ||
|   | d7d5be414f | ||
|   | 4d36456799 | ||
|   | b1725d4007 | ||
|   | 102dba8e24 | ||
|   | 1a372058a6 | ||
|   | f8b691f622 | ||
|   | 7893d4d8c9 | ||
|   | 9a3cd0c951 | ||
|   | 46684265d5 | ||
|   | 9e0d87b725 | ||
|   | bbc03b2b0a | ||
|   | b4d28c3d9d | ||
|   | cc1098998f | ||
|   | d9c5978958 | ||
|   | d05daa1df6 | ||
|   | 534466894e | ||
|   | d04520044f | ||
|   | c0fb6b3b8c | ||
|   | 19df3314f4 | ||
|   | b530b7f21a | ||
|   | ed49ea3c95 | ||
|   | 7918c19f8f | ||
|   | 0d7caecdb5 | ||
|   | f8b0ad1766 | ||
|   | 7ed7af90b6 | ||
|   | 4a94f836a7 | ||
|   | b36e548db2 | ||
|   | e6c276edf3 | ||
|   | befc3cdd0c | ||
|   | 2e2e93ba2e | ||
|   | 3b2bb56243 | ||
|   | 9c4562382b | ||
|   | 08b0c88c21 | ||
|   | d105f97ea0 | ||
|   | bd0665bed3 | ||
|   | 8dc865d92d | ||
|   | 8085ab8721 | ||
|   | b36e75a42e | ||
|   | f17f8d79c4 | ||
|   | f89f05b883 | ||
|   | bd5f814cb2 | ||
|   | bf6cc035c7 | ||
|   | a6bf728a5c | ||
|   | 698a482b67 | ||
|   | fbf5b9d74c | ||
|   | 65c35caab2 | ||
|   | ff9f14742b | ||
|   | 4b4eb83cd1 | ||
|   | 7761497778 | ||
|   | 6046d5c666 | ||
|   | 83eb70d718 | ||
|   | 70f950ac05 | ||
|   | 3129326432 | ||
|   | 799cd15107 | ||
|   | 942965ee87 | ||
|   | a123053823 | ||
|   | c7603fbbd1 | ||
|   | 6954e01338 | ||
|   | 7e23ec496a | ||
| ![박진형2 [ungeziefer]](/assets/img/avatar_default.png)  | bae148bd76 | ||
|   | 3fcecf7099 | ||
|   | 7d994630d2 | ||
|   | 29b9505cb7 | ||
|   | e07d774004 | ||
|   | ff77227e10 | ||
|   | de99222801 | ||
|   | 7cdc5b88e3 | ||
|   | fbdf16db09 | ||
|   | 41b2af8884 | ||
|   | 9389912eaf | ||
|   | d5242a7d8c | ||
|   | d3fecce359 | ||
|   | 7a70d74971 | ||
|   | fcf89fe901 | ||
|   | ec8c0bc1c1 | ||
|   | a2f3689865 | ||
|   | 2d54c0e918 | ||
|   | ce088e7e0a | ||
|   | a1b86507da | ||
|   | 9235d1acae | ||
|   | 12172e7dc7 | ||
|   | 6a08446b3d | ||
|   | c93a42b5f4 | ||
|   | 8febbfd9f5 | ||
|   | 33a8d8c30f | ||
|   | ef5bcadd95 | ||
|   | fadc615f4e | ||
|   | eff6f5a2fd | ||
|   | ed30252bdc | ||
|   | 2deed25da0 | ||
|   | 419877cf3a | ||
|   | 17267ed475 | ||
|   | b759f5bdf7 | ||
|   | f72372314e | ||
|   | 530561eec0 | ||
|   | aec88c06a0 | ||
|   | 09e06a8cb7 | ||
|   | 084db3fcf1 | ||
|   | 709d6f4fdd | ||
|   | 27cf578e8c | ||
|   | 7001679959 | ||
|   | daa78b4606 | ||
|   | b893f7750c | ||
|   | 8792f42f8d | ||
|   | 4f9ec65713 | ||
|   | db54c78ed4 | ||
|   | 1155babda8 | ||
|   | 83a82e3eb5 | ||
|   | aa9c73352c | ||
|   | df9e003b35 | ||
|   | f6ddc9b85a | ||
|   | 11cfeeec92 | ||
|   | d72765870a | ||
|   | 349c133171 | ||
|   | c056026dad | ||
|   | 0421dabc1e | ||
|   | 60930f4b12 | ||
|   | b3dfe28be4 | ||
|   | e703d8a2f7 | ||
|   | 801f61c12c | ||
|   | a3e75a0709 | ||
|   | 92d34cbd79 | ||
|   | c99fd62ae6 | ||
|   | a3986b3bdc | ||
|   | 7fed49e6fe | ||
|   | 005e06e00a | ||
|   | b6d4bb5cb0 | ||
|   | f57bfd998b | ||
|   | e8d3387a04 | ||
|   | 53d2ea9ad3 | ||
|   | b6803a5fec | ||
|   | 210d3ce390 | ||
|   | a350e0714e | ||
|   | 72757feae4 | ||
|   | fe2346efa1 | ||
|   | 43ae287be3 | ||
|   | b804e12dec | ||
|   | 99c221ad01 | ||
|   | 3a615bcf44 | ||
|   | 87863c1696 | ||
|   | 45defd565a | ||
|   | f1726cef0d | ||
|   | 8a788f3a48 | ||
|   | 7710868556 | ||
|   | 0b53833856 | ||
|   | 43c643bab6 | ||
|   | ac64fcace8 | ||
|   | 84ba0c7b4b | ||
|   | f79606d9ff | ||
|   | 3aaadb9b12 | ||
|   | 8a3a11f123 | ||
|   | 32f1f0edf2 | ||
|   | 5bd75905cb | ||
|   | eebdc007a9 | ||
|   | 3aae588a6a | ||
|   | cb2dcb19b9 | ||
|   | c58a565366 | ||
|   | 93b944eec4 | ||
|   | 7340f1e9c8 | ||
|   | 0a65c443a2 | ||
|   | bae6a8db57 | ||
|   | ddb320197a | ||
|   | dc51f6493b | ||
|   | c027909acc | ||
|   | 2bd56533fa | ||
|   | c07452a7a2 | ||
|   | 8701aeec30 | ||
|   | 2c4f2b890e | ||
|   | f1acd78e54 | ||
|   | 49d22b7d28 | ||
|   | 96133c8dd9 | ||
|   | bd18a36dae | ||
|   | 3fe630769e | ||
|   | 2f80758889 | ||
|   | 9f3efe9e54 | ||
|   | 6e44edf290 | ||
|   | d28cbf32b9 | ||
|   | 48d226e97c | ||
|   | 64698e8e8c | ||
|   | e0d098641c | ||
|   | 06f4b05487 | ||
|   | 122fce5aee | ||
|   | e3f5281903 | ||
|   | 88e94e3776 | ||
|   | 95275ff16e | ||
|   | 4cb938ed18 | ||
|   | 5f3e62461e | ||
|   | ec239933db | ||
|   | de59b393c7 | ||
|   | b02371efe5 | ||
|   | f34289fdfd | ||
|   | 584478a4f1 | ||
|   | 700ec688f7 | ||
|   | a133c1d393 | ||
|   | 6ba9a58648 | ||
|   | bb92d326c8 | ||
|   | 1e13dadf1f | ||
|   | 7b271c2af2 | ||
|   | c3f4e52bdb | ||
|   | 458b4c0363 | ||
|   | f8dc0f0d04 | ||
|   | 347658cdc1 | ||
|   | 427a6e7313 | ||
|   | 7f76a3caf0 | ||
|   | 40539727e6 | ||
|   | 30e56d0a45 | ||
|   | 8eef2a245b | ||
|   | 2bcfe2fdb0 | ||
|   | 2b49e62b3c | ||
|   | bf70a36a1d | ||
|   | eb92058cf4 | ||
|   | 423eaf25fb | ||
|   | 280abe852c | ||
|   | c91307aaa1 | ||
|   | 88ffd08087 | ||
|   | bd337129c6 | ||
|   | 1f5cb86366 | ||
|   | 0d39c577d8 | ||
|   | 7e66dc28f0 | ||
|   | bec47a59f0 | ||
|   | 064f854ddf | ||
|   | a05d92ae85 | ||
|   | 1fdfde5d5f | ||
|   | b1620f1f6a | ||
|   | f789635ddc | ||
|   | f65c26e280 | ||
|   | 579212996f | ||
|   | 208595b262 | ||
|   | 83a4b89818 | ||
|   | d46f220737 | ||
|   | b4db293181 | ||
|   | d1eac600e9 | ||
|   | 7e758ca053 | ||
|   | db6d4f2003 | ||
|   | 1ba46a30ce | ||
|   | 5ece2ef2c7 | ||
|   | 9513734040 | ||
|   | d452625ed1 | ||
|   | b02c6beb4d | ||
|   | 06c2896def | ||
|   | 724db8ed89 | ||
|   | fa48078a52 | ||
|   | d8ad85fa8c | ||
|   | cc3b895449 | ||
|   | 384242e5eb | ||
|   | 7a98138f27 | ||
|   | cd4e0bda57 | ||
|   | 1ad2db0c42 | ||
|   | 96a76a7a5c | ||
|   | bc964bd847 | ||
|   | 12604b5c8e | 
							
								
								
									
										56
									
								
								.github/depends/boost.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										56
									
								
								.github/depends/boost.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| #!/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
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								.github/workflows/coverage.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| 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
									
									
										Normal file
									
								
							
							
						
						
									
										304
									
								
								.github/workflows/gha.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,304 @@ | ||||
| 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 | ||||
							
								
								
									
										206
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										206
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,206 +0,0 @@ | ||||
| language: cpp | ||||
| sudo: false | ||||
|  | ||||
| install: | ||||
|  - export BASE=`pwd` | ||||
|  - mkdir ${BASE}/usr | ||||
|  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget --no-check-certificate https://cmake.org/files/v3.7/cmake-3.7.1-Linux-x86_64.sh -O cmake-3.7.1-Linux-x86_64.sh; fi | ||||
|  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then chmod a+x cmake-3.7.1-Linux-x86_64.sh; fi | ||||
|  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then ./cmake-3.7.1-Linux-x86_64.sh --prefix=${BASE}/usr --skip-license; fi | ||||
|  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi | ||||
|  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi | ||||
|  - if [ "$CXX" = "g++" ]; then export CXX="g++-6" CC="gcc-6"; fi | ||||
|  - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-3.9" CC="clang-3.9"; fi | ||||
| #gtest | ||||
|  - wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip | ||||
|  - unzip -q googletest-release-1.7.0.zip | ||||
|  - cd googletest-release-1.7.0 | ||||
|  - $CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c | ||||
|  - $CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c | ||||
|  - ar -rv libgtest.a gtest-all.o | ||||
|  - ar -rv libgtest_main.a gtest_main.o | ||||
|  - mkdir -p ${BASE}/usr/include | ||||
|  - cp -r include/gtest ${BASE}/usr/include | ||||
|  - mkdir -p ${BASE}/usr/lib | ||||
|  - mv *.a ${BASE}/usr/lib | ||||
|  - cd .. | ||||
| # valgrind | ||||
|  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi | ||||
| # boost | ||||
|  - if [ "$BOOST" == "ON" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.zip && unzip -q boost_1_63_0.zip && cd boost_1_63_0 && ./bootstrap.sh && ./b2 -j3 --prefix=${BASE}/usr --with-chrono --with-context --with-system --with-timer address-model=${ARCH} install > /dev/null && cd ..; fi | ||||
|  | ||||
| matrix: | ||||
|   include: | ||||
|     - os: osx | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="1" | ||||
|     - os: osx | ||||
|       compiler: clang | ||||
|       env:  ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||
|     - os: osx | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"              SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||
|     - os: osx | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"             ARCH="64"              SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="2" | ||||
|     - os: linux | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"             ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="1" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|             - llvm-toolchain-precise-3.9 | ||||
|             - llvm-toolchain-precise | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-5-multilib | ||||
|             - g++-5-multilib | ||||
|             - bzip2 | ||||
|             - clang-3.9 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"             ARCH="32"              SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|             - llvm-toolchain-precise-3.9 | ||||
|             - llvm-toolchain-precise | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-5-multilib | ||||
|             - g++-5-multilib | ||||
|             - lib32stdc++6-6-dbg | ||||
|             - lib32gcc1 | ||||
|             - libc6-i386 | ||||
|             - lib32z1-dev | ||||
|             - bzip2 | ||||
|             - clang-3.9 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" X3_PARSE="ON" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|             - llvm-toolchain-precise-3.9 | ||||
|             - llvm-toolchain-precise | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-5-multilib | ||||
|             - g++-5-multilib | ||||
|             - bzip2 | ||||
|             - clang-3.9 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: clang | ||||
|       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="32"              SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|             - llvm-toolchain-precise-3.9 | ||||
|             - llvm-toolchain-precise | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-5-multilib | ||||
|             - g++-5-multilib | ||||
|             - lib32stdc++6-6-dbg | ||||
|             - lib32gcc1 | ||||
|             - libc6-i386 | ||||
|             - lib32z1-dev | ||||
|             - bzip2 | ||||
|             - clang-3.9 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: gcc | ||||
|       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"              SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-6-multilib | ||||
|             - g++-6-multilib | ||||
|             - bzip2 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: gcc | ||||
|       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="32"   BOOST="ON" SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="2" X3_PARSE="ON" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-6-multilib | ||||
|             - g++-6-multilib | ||||
|             - lib32stdc++6-6-dbg | ||||
|             - lib32gcc1 | ||||
|             - libc6-i386 | ||||
|             - lib32z1-dev | ||||
|             - bzip2 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: gcc | ||||
|       env: ACTION="ci/build_cmake.sh"             ARCH="64"              SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="2" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-6-multilib | ||||
|             - g++-6-multilib | ||||
|             - bzip2 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: gcc | ||||
|       env: ACTION="ci/build_cmake.sh"             ARCH="32"   BOOST="ON" SHARED="OFF" CHAR_SIGN="signed"   API_VERSION="1" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-6-multilib | ||||
|             - g++-6-multilib | ||||
|             - lib32stdc++6-6-dbg | ||||
|             - lib32gcc1 | ||||
|             - libc6-i386 | ||||
|             - lib32z1-dev | ||||
|             - bzip2 | ||||
|             - libc6-dbg | ||||
|     - os: linux | ||||
|       compiler: gcc | ||||
|       env: ACTION="ci/build_cmake.sh"             ARCH="32"   BOOST="ON" SHARED="OFF" CHAR_SIGN="signed"   API_VERSION="2" | ||||
|       addons: | ||||
|         apt: | ||||
|           sources: | ||||
|             - ubuntu-toolchain-r-test | ||||
|           packages: | ||||
|             - g++-multilib | ||||
|             - gcc-multilib | ||||
|             - gcc-6-multilib | ||||
|             - g++-6-multilib | ||||
|             - lib32stdc++6-6-dbg | ||||
|             - lib32gcc1 | ||||
|             - libc6-i386 | ||||
|             - lib32z1-dev | ||||
|             - bzip2 | ||||
|             - libc6-dbg | ||||
|  | ||||
| script: | ||||
|   - CMAKE_CXX_COMPILER="${CXX}" CMAKE_C_COMPILER="${CC}" CMAKE_LIBRARY_PATH="${BASE}/usr/lib:${BASE}/build" GTEST_ROOT="${BASE}/usr" BOOST_ROOT="${BASE}/usr" ${ACTION} | ||||
							
								
								
									
										90
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,4 +1,89 @@ | ||||
| # 2017-08-03 version 2.1.4 | ||||
| # 2020-06-05 version 3.3.0 | ||||
|   * Add json example for C (#870) | ||||
|   * Add both header and body packing functions for C (#870) | ||||
|   * Set default ref_size and chunk_size to vrefbuffer (#865) | ||||
|   * Add examples (#861) | ||||
|   * Improve build system (#839, #842) | ||||
|   * Improve tests (#829) | ||||
|   * Improve documents (#828) | ||||
|   * Remove some warnings (#827, #851, #871) | ||||
|   * Improve CI environment (#824, #831, #833, #834, #846, #860, 874) | ||||
|  | ||||
| # 2019-12-10 version 3.2.1 | ||||
|   * Fix snprintf return value checking (#821) | ||||
|   * Remove some warnings (#819) | ||||
|   * Fix fbuffer result checking (#812) | ||||
|   * 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) | ||||
| @@ -6,6 +91,9 @@ | ||||
|   * 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) | ||||
|   | ||||
							
								
								
									
										165
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										165
									
								
								CMakeLists.txt
									
									
									
									
									
								
							| @@ -16,6 +16,7 @@ STRING (REGEX MATCH "#define MSGPACK_VERSION_REVISION *([0-9a-zA-Z_]*)" NULL_OUT | ||||
| SET (VERSION_REVISION ${CMAKE_MATCH_1}) | ||||
| SET (VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}) | ||||
|  | ||||
| LIST (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") | ||||
| SET (prefix ${CMAKE_INSTALL_PREFIX}) | ||||
| SET (exec_prefix "\${prefix}") | ||||
| SET (libdir "\${exec_prefix}/lib") | ||||
| @@ -124,7 +125,7 @@ ENDIF () | ||||
| IF (MSGPACK_DEFAULT_API_VERSION) | ||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=${MSGPACK_DEFAULT_API_VERSION} ${CMAKE_CXX_FLAGS}") | ||||
| ELSE () | ||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=2 ${CMAKE_CXX_FLAGS}") | ||||
|    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) | ||||
| @@ -150,12 +151,58 @@ ENDFOREACH () | ||||
| FIND_PACKAGE (GTest) | ||||
| FIND_PACKAGE (ZLIB) | ||||
| FIND_PACKAGE (Threads) | ||||
| IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND) | ||||
| IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND AND NOT "${MSGPACK_FUZZ_REGRESSION}" STREQUAL "ON") | ||||
|     OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON) | ||||
|     OPTION (MSGPACK_GEN_COVERAGE "Enable running gcov to get a test coverage report." OFF) | ||||
| ENDIF () | ||||
|  | ||||
| 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) | ||||
| CHECK_CXX_SOURCE_COMPILES (" | ||||
| @@ -181,12 +228,15 @@ CONFIGURE_FILE ( | ||||
|     @ONLY | ||||
| ) | ||||
|  | ||||
| IF (MSGPACK_ENABLE_SHARED) | ||||
|     ADD_LIBRARY (msgpackc SHARED | ||||
|  | ||||
| IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) | ||||
|     ADD_LIBRARY (msgpackc | ||||
|         ${msgpackc_SOURCES} | ||||
|         ${msgpackc_HEADERS} | ||||
|     ) | ||||
|  | ||||
|     SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0) | ||||
|  | ||||
|     TARGET_INCLUDE_DIRECTORIES (msgpackc | ||||
|         PUBLIC | ||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||
| @@ -197,33 +247,68 @@ IF (MSGPACK_ENABLE_SHARED) | ||||
|     ) | ||||
| ENDIF () | ||||
|  | ||||
| ADD_LIBRARY (msgpackc-static STATIC | ||||
| 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 | ||||
|     TARGET_INCLUDE_DIRECTORIES (msgpackc-static | ||||
|         PUBLIC | ||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||
|             $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> | ||||
|             $<INSTALL_INTERFACE:include> | ||||
|         PRIVATE | ||||
|             ${CMAKE_CURRENT_SOURCE_DIR} | ||||
| ) | ||||
|     ) | ||||
|  | ||||
| IF (NOT MSGPACK_ENABLE_SHARED) | ||||
|     # Add alias for subdirectories | ||||
|     ADD_LIBRARY (msgpackc ALIAS msgpackc-static) | ||||
| ENDIF () | ||||
|     SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc") | ||||
|  | ||||
| SET_TARGET_PROPERTIES (msgpackc-static PROPERTIES OUTPUT_NAME "msgpackc") | ||||
| IF (MSGPACK_ENABLE_SHARED) | ||||
|     IF (MSGPACK_ENABLE_SHARED) | ||||
|         IF (MSVC) | ||||
|             SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX "_import.lib") | ||||
|         ELSEIF (MINGW) | ||||
|             SET_TARGET_PROPERTIES (msgpackc PROPERTIES IMPORT_SUFFIX ".dll.a") | ||||
|         ENDIF () | ||||
|     SET_TARGET_PROPERTIES (msgpackc PROPERTIES SOVERSION 2 VERSION 2.0.0) | ||||
|     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 () | ||||
|  | ||||
| IF (MSGPACK_BUILD_TESTS) | ||||
| @@ -236,17 +321,21 @@ IF (MSGPACK_BUILD_TESTS) | ||||
| ENDIF () | ||||
|  | ||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||
|     IF (MSGPACK_ENABLE_SHARED) | ||||
|         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 -DPIC") | ||||
|     IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) | ||||
|         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra -DPIC") | ||||
|     ENDIF () | ||||
|     IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) | ||||
|        SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra" ) | ||||
|     ENDIF () | ||||
|     SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3" ) | ||||
| ENDIF () | ||||
|  | ||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
|     IF (MSGPACK_ENABLE_SHARED) | ||||
|     IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) | ||||
|         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||
|     ENDIF () | ||||
|     IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) | ||||
|         SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||
|     ENDIF () | ||||
| ENDIF () | ||||
|  | ||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||
| @@ -257,6 +346,14 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||
|     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") | ||||
|     SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX) | ||||
| ENDIF () | ||||
| @@ -278,10 +375,16 @@ IF (MSGPACK_BUILD_EXAMPLES) | ||||
|     ADD_SUBDIRECTORY (example) | ||||
| ENDIF () | ||||
|  | ||||
| IF (MSGPACK_ENABLE_SHARED) | ||||
|     SET (MSGPACK_INSTALLTARGETS msgpackc msgpackc-static) | ||||
| ELSE() | ||||
|     SET (MSGPACK_INSTALLTARGETS msgpackc-static) | ||||
| IF (MSGPACK_ENABLE_SHARED OR MSGPACK_ENABLE_STATIC) | ||||
|     SET (MSGPACK_INSTALLTARGETS msgpackc) | ||||
| ENDIF () | ||||
|  | ||||
| IF (MSGPACK_ENABLE_CXX AND ((CMAKE_VERSION VERSION_GREATER 3.0) OR (CMAKE_VERSION VERSION_EQUAL 3.0))) | ||||
|     LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-cxx) | ||||
| ENDIF () | ||||
|  | ||||
| IF (MSGPACK_ENABLE_SHARED AND MSGPACK_ENABLE_STATIC) | ||||
|     LIST (APPEND MSGPACK_INSTALLTARGETS msgpackc-static) | ||||
| ENDIF () | ||||
|  | ||||
| INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets | ||||
| @@ -293,7 +396,7 @@ FOREACH (file ${msgpackc_HEADERS}) | ||||
|     GET_FILENAME_COMPONENT (dir ${file} PATH) | ||||
|     INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir}) | ||||
| ENDFOREACH () | ||||
| IF (NOT MSVC) | ||||
| IF (NOT MSGPACK_CXX_ONLY AND NOT MSVC) | ||||
|     INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) | ||||
| ENDIF () | ||||
|  | ||||
| @@ -307,6 +410,7 @@ 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 "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 "STRIP_FROM_PATH    = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c | ||||
|     ) | ||||
|     IF (DOXYGEN_DOT_FOUND) | ||||
|         LIST (APPEND Doxyfile_c_CONTENT | ||||
| @@ -325,6 +429,7 @@ IF (DOXYGEN_FOUND) | ||||
|         COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY   = doc_cpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp | ||||
|         COMMAND ${CMAKE_COMMAND} -E echo "INPUT              = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp | ||||
|         COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL        = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp | ||||
|         COMMAND ${CMAKE_COMMAND} -E echo "STRIP_FROM_PATH    = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp | ||||
|     ) | ||||
|     IF (DOXYGEN_DOT_FOUND) | ||||
|         LIST (APPEND Doxyfile_cpp_CONTENT | ||||
| @@ -365,17 +470,19 @@ CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in | ||||
|     INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" | ||||
| ) | ||||
|  | ||||
| INSTALL (EXPORT msgpack-targets | ||||
| IF (NOT MSGPACK_CXX_ONLY) | ||||
|     INSTALL (EXPORT msgpack-targets | ||||
|         FILE | ||||
|             msgpack-targets.cmake | ||||
|         DESTINATION | ||||
|             "${CMAKE_INSTALL_CMAKEDIR}" | ||||
| ) | ||||
|     ) | ||||
|  | ||||
| INSTALL ( | ||||
|     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. | ||||
| # 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 | ||||
| # a logarithmic scale so increasing the size by one will rougly double the | ||||
| # a logarithmic scale so increasing the size by one will roughly double the | ||||
| # 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, | ||||
| # corresponding to a cache size of 2^16 = 65536 symbols | ||||
|   | ||||
							
								
								
									
										119
									
								
								Files.cmake
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								Files.cmake
									
									
									
									
									
								
							| @@ -5,14 +5,11 @@ LIST (APPEND msgpackc_SOURCES | ||||
|     src/vrefbuffer.c | ||||
|     src/zone.c | ||||
| ) | ||||
|  | ||||
| # For both C and C++ libraries | ||||
| LIST (APPEND msgpackc_HEADERS | ||||
|     include/msgpack.h | ||||
|     include/msgpack/fbuffer.h | ||||
|     include/msgpack/gcc_atomic.h | ||||
|     include/msgpack/object.h | ||||
|     include/msgpack/pack.h | ||||
|     include/msgpack/pack_define.h | ||||
|     include/msgpack/pack_template.h | ||||
|     include/msgpack/predef.h | ||||
|     include/msgpack/predef/architecture.h | ||||
|     include/msgpack/predef/architecture/alpha.h | ||||
| @@ -24,6 +21,7 @@ LIST (APPEND msgpackc_HEADERS | ||||
|     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 | ||||
| @@ -57,6 +55,7 @@ LIST (APPEND msgpackc_HEADERS | ||||
|     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 | ||||
| @@ -83,12 +82,14 @@ LIST (APPEND msgpackc_HEADERS | ||||
|     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 | ||||
| @@ -132,27 +133,49 @@ LIST (APPEND msgpackc_HEADERS | ||||
|     include/msgpack/predef/os/windows.h | ||||
|     include/msgpack/predef/other.h | ||||
|     include/msgpack/predef/other/endian.h | ||||
|     include/msgpack/predef/other/workaround.h | ||||
|     include/msgpack/predef/platform.h | ||||
|     include/msgpack/predef/platform/cloudabi.h | ||||
|     include/msgpack/predef/platform/ios.h | ||||
|     include/msgpack/predef/platform/mingw.h | ||||
|     include/msgpack/predef/platform/mingw32.h | ||||
|     include/msgpack/predef/platform/mingw64.h | ||||
|     include/msgpack/predef/platform/windows_desktop.h | ||||
|     include/msgpack/predef/platform/windows_phone.h | ||||
|     include/msgpack/predef/platform/windows_runtime.h | ||||
|     include/msgpack/predef/platform/windows_server.h | ||||
|     include/msgpack/predef/platform/windows_store.h | ||||
|     include/msgpack/predef/platform/windows_system.h | ||||
|     include/msgpack/predef/platform/windows_uwp.h | ||||
|     include/msgpack/predef/version.h | ||||
|     include/msgpack/predef/version_number.h | ||||
|     include/msgpack/sbuffer.h | ||||
|     include/msgpack/sysdep.h | ||||
|     include/msgpack/unpack.h | ||||
|     include/msgpack/unpack_define.h | ||||
|     include/msgpack/unpack_template.h | ||||
|     include/msgpack/util.h | ||||
|     include/msgpack/version.h | ||||
|     include/msgpack/version_master.h | ||||
|     include/msgpack/vrefbuffer.h | ||||
|     include/msgpack/zbuffer.h | ||||
|     include/msgpack/zone.h | ||||
| ) | ||||
|  | ||||
| IF (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 | ||||
| @@ -173,15 +196,20 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -214,8 +242,11 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -223,12 +254,16 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -433,6 +468,7 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -523,15 +559,20 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -541,6 +582,7 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -576,6 +618,7 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
| @@ -632,31 +675,85 @@ IF (MSGPACK_ENABLE_CXX) | ||||
|         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 | ||||
|   | ||||
| @@ -6,10 +6,11 @@ Currently, RPC implementation is not available. | ||||
|  | ||||
| # Install | ||||
|  | ||||
| ## Install with package manager | ||||
|  | ||||
| ## Mac OS X with MacPorts | ||||
| ### MacOS with MacPorts | ||||
|  | ||||
| On Mac OS X, you can install MessagePack for C using MacPorts. | ||||
| On MacOS, you can install MessagePack for C using MacPorts. | ||||
|  | ||||
| ``` | ||||
| $ sudo port install msgpack | ||||
| @@ -20,51 +21,47 @@ You might need to run `sudo port selfupdate` before installing to update the pac | ||||
| You can also install via Homebrew. | ||||
|  | ||||
| ``` | ||||
| $ sudo brew install msgpack | ||||
| $ brew install msgpack | ||||
| ``` | ||||
|  | ||||
| ## FreeBSD with Ports Collection | ||||
| ### FreeBSD with Ports Collection | ||||
|  | ||||
| On FreeBSD, you can use Ports Collection. Install [net/msgpack|http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/msgpack/] package. | ||||
| On FreeBSD, you can use Ports Collection. Install [net/msgpack](http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/msgpack/) package. | ||||
|  | ||||
| ## Gentoo Linux with Portage | ||||
| ### Gentoo Linux with Portage | ||||
|  | ||||
| On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack|http://gentoo-portage.com/dev-libs/msgpack] package. | ||||
| On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack](http://gentoo-portage.com/dev-libs/msgpack) package. | ||||
|  | ||||
| ## Other UNIX-like platform with ./configure | ||||
| ### Windows with vcpkg | ||||
|  | ||||
| On the other UNIX-like platforms, download source package from [Releases|http://msgpack.org/releases/cpp/] and run `./configure && make && make install`. | ||||
| There are several package managers available, and vcpkg is typical. | ||||
|  | ||||
| ``` | ||||
| $ wget http://msgpack.org/releases/cpp/msgpack-1.3.0.tar.gz | ||||
| $ vcpkg install msgpack:x64-windows | ||||
| ``` | ||||
| ## Install with source code | ||||
|  | ||||
| ### Build with cmake | ||||
|  | ||||
| You need to install cmake (2.8.12 or higher) first. | ||||
|  | ||||
| ``` | ||||
| $ git clone https://github.com/msgpack/msgpack-c.git | ||||
| $ cd msgpack-c | ||||
| $ mkdir build | ||||
| $ cd build | ||||
| $ cmake .. | ||||
| $ cmake --build . | ||||
| $ cmake --build . --target install | ||||
| ``` | ||||
| ### Build with autotools | ||||
|  | ||||
| In versions 1.4.2 and below, you can use `autotools` to build on UNIX-like platforms. | ||||
| ``` | ||||
| $ wget https://github.com/msgpack/msgpack-c/archive/cpp-1.3.0.tar.gz | ||||
| $ tar zxvf msgpack-1.3.0.tar.gz | ||||
| $ cd msgpack-1.3.0 | ||||
| $ ./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 | ||||
| $ ./bootstrap  # If the 'configure' script already exists, you can omit this step. | ||||
| $ ./configure | ||||
| $ make | ||||
| $ sudo make install | ||||
|   | ||||
| @@ -59,7 +59,7 @@ $ ./hello | ||||
| #include <iostream> | ||||
| #include <string> | ||||
|  | ||||
| int main(void) { | ||||
| int main() { | ||||
|         // serializes multiple objects using msgpack::packer. | ||||
|         msgpack::sbuffer buffer; | ||||
|  | ||||
| @@ -98,7 +98,7 @@ int main(void) { | ||||
| #include <iostream> | ||||
| #include <string> | ||||
|  | ||||
| int main(void) { | ||||
| int main() { | ||||
|         // serializes multiple objects into one message containing an array using msgpack::packer. | ||||
|         msgpack::sbuffer buffer; | ||||
|  | ||||
| @@ -139,7 +139,7 @@ public: | ||||
|     MSGPACK_DEFINE(m_str, m_vec); | ||||
| }; | ||||
|  | ||||
| int main(void) { | ||||
| int main() { | ||||
|         std::vector<myclass> vec; | ||||
|         // add some elements into vec... | ||||
|  | ||||
|   | ||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,9 +1,10 @@ | ||||
| `msgpack` for C/C++ | ||||
| =================== | ||||
|  | ||||
| Version 2.1.4 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) | ||||
| Version 3.3.0 [](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 small and fast. | ||||
| It's like JSON but smaller and faster. | ||||
|  | ||||
| Overview | ||||
| -------- | ||||
| @@ -11,7 +12,7 @@ Overview | ||||
| [MessagePack](http://msgpack.org/) is an efficient binary serialization | ||||
| format, which lets you exchange data among multiple languages like JSON, | ||||
| except that it's faster and smaller. Small integers are encoded into a | ||||
| single byte while typical short strings require only one extra byte in | ||||
| single byte and short strings require only one extra byte in | ||||
| addition to the strings themselves. | ||||
|  | ||||
| Example | ||||
| @@ -68,7 +69,7 @@ In C++: | ||||
| #include <iostream> | ||||
| #include <sstream> | ||||
|  | ||||
| int main(void) | ||||
| int main() | ||||
| { | ||||
|     msgpack::type::tuple<int, bool, std::string> src(1, true, "example"); | ||||
|  | ||||
| @@ -97,6 +98,10 @@ int main(void) | ||||
|     msgpack::type::tuple<int, bool, std::string> dst; | ||||
|     deserialized.convert(dst); | ||||
|  | ||||
|     // or create the new instance | ||||
|     msgpack::type::tuple<int, bool, std::string> dst2 = | ||||
|         deserialized.as<msgpack::type::tuple<int, bool, std::string> >(); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| ``` | ||||
| @@ -108,7 +113,7 @@ Usage | ||||
|  | ||||
| ### C++ Header Only Library | ||||
|  | ||||
| When you use msgpack on C++03 and C++11, you can just add | ||||
| When you use msgpack on C++, you can just add | ||||
| msgpack-c/include to your include path: | ||||
|  | ||||
|     g++ -I msgpack-c/include your_source_file.cpp | ||||
| @@ -135,14 +140,18 @@ C and C++03: | ||||
|     $ make | ||||
|     $ sudo make install | ||||
|  | ||||
| If you want to setup C++11 version of msgpack instead, | ||||
| If you want to setup C++11 or C++17 version of msgpack instead, | ||||
| execute the following commands: | ||||
|  | ||||
|     $ git clone https://github.com/msgpack/msgpack-c.git | ||||
|     $ cd msgpack-c | ||||
|     $ cmake -DMSGPACK_CXX11=ON . | ||||
|     $ cmake -DMSGPACK_CXX[11|17]=ON . | ||||
|     $ sudo make install | ||||
|  | ||||
| `MSGPACK_CXX[11|17]` flags are not affected to installing files. Just switching test cases. All files are installed in every settings. | ||||
|  | ||||
| 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. | ||||
| @@ -170,7 +179,7 @@ the binaries:' text box. | ||||
|  | ||||
| ### Documentation | ||||
|  | ||||
| You can get addtional information on the | ||||
| You can get additional information including the tutorial on the | ||||
| [wiki](https://github.com/msgpack/msgpack-c/wiki). | ||||
|  | ||||
| Contributing | ||||
|   | ||||
							
								
								
									
										10
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -1,10 +1,14 @@ | ||||
| version: 2.1.4.{build} | ||||
| version: 3.3.0.{build} | ||||
|  | ||||
| branches: | ||||
|   only: | ||||
|   - master | ||||
|  | ||||
| image: | ||||
| - Visual Studio 2015 | ||||
| environment: | ||||
|   global: | ||||
|     BOOST_ROOT: C:\Libraries\boost_1_60_0 | ||||
|     BOOST_ROOT: C:\Libraries\boost_1_67_0 | ||||
|   matrix: | ||||
|     - cpp11: -DMSGPACK_CXX11=OFF | ||||
|       boost: -DMSGPACK_BOOST=OFF | ||||
| @@ -51,7 +55,7 @@ build_script: | ||||
| - md 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 --build . --config Release | ||||
| - cmake --build . --config Release -v | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -19,11 +19,13 @@ fi | ||||
| if [ "${ARCH}" == "32" ] | ||||
| then | ||||
|     export BIT32="ON" | ||||
|     export ARCH_FLAG="-m32" | ||||
| else | ||||
|     export BIT32="OFF" | ||||
|     export ARCH_FLAG="-m64" | ||||
| fi | ||||
|  | ||||
| cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DMSGPACK_ENABLE_SHARED=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} .. | ||||
| 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} .. | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| @@ -39,7 +41,7 @@ then | ||||
|     exit $ret | ||||
| fi | ||||
|  | ||||
| make test | ||||
| ctest -VV | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| @@ -72,4 +74,39 @@ then | ||||
|     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 | ||||
|   | ||||
							
								
								
									
										59
									
								
								ci/build_cmake_embedded.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								ci/build_cmake_embedded.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| #!/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 | ||||
							
								
								
									
										49
									
								
								ci/build_regression.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										49
									
								
								ci/build_regression.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| mkdir -p build | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| then | ||||
|     exit $ret | ||||
| fi | ||||
|  | ||||
| cd build | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| then | ||||
|     exit $ret | ||||
| fi | ||||
|  | ||||
| if [ "${ARCH}" == "32" ] | ||||
| then | ||||
|     echo "64 bit support required for regressions" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| cmake -DMSGPACK_FUZZ_REGRESSION="ON" -DMSGPACK_CXX11="ON" -DMSGPACK_BOOST=${BOOST} -DMSGPACK_SAN=${MSGPACK_SAN} -v .. | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| then | ||||
|     exit $ret | ||||
| fi | ||||
|  | ||||
| make | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| then | ||||
|     exit $ret | ||||
| fi | ||||
|  | ||||
| make test | ||||
|  | ||||
| ret=$? | ||||
| if [ $ret -ne 0 ] | ||||
| then | ||||
|     exit $ret | ||||
| fi | ||||
|  | ||||
| exit 0 | ||||
							
								
								
									
										55
									
								
								cmake/CodeCoverage.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								cmake/CodeCoverage.cmake
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| # Check prereqs | ||||
| FIND_PROGRAM(GCOV_PATH gcov) | ||||
| FIND_PROGRAM(LCOV_PATH lcov) | ||||
| FIND_PROGRAM(GENHTML_PATH genhtml) | ||||
|  | ||||
| IF(NOT GCOV_PATH) | ||||
| 	MESSAGE(FATAL_ERROR "gcov not found! Aborting...") | ||||
| ENDIF() | ||||
|  | ||||
| IF(NOT CMAKE_COMPILER_IS_GNUCC) | ||||
| 	# 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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								codecov.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| codecov: | ||||
|   notify: | ||||
|     require_ci_to_pass: yes | ||||
|  | ||||
| coverage: | ||||
|   precision: 2 | ||||
|   round: down | ||||
|   range: "70...100" | ||||
|  | ||||
|   status: | ||||
|     project: yes | ||||
|     patch: yes | ||||
|     changes: no | ||||
|  | ||||
| parsers: | ||||
|   gcov: | ||||
|     branch_detection: | ||||
|       conditional: yes | ||||
|       loop: yes | ||||
|       method: no | ||||
|       macro: no | ||||
|  | ||||
| comment: | ||||
|   layout: "header, diff" | ||||
|   behavior: default | ||||
|   require_changes: no | ||||
|  | ||||
| ignore: | ||||
|   - "test" | ||||
|   - "fuzz" | ||||
|   - "erb" | ||||
|   - "ci" | ||||
|   - "cmake" | ||||
|   - "examle" | ||||
|   - "external" | ||||
|   - "usr" | ||||
| @@ -61,6 +61,7 @@ struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | ||||
|         if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } | ||||
|         std::map<std::string, msgpack::object const*> kvmap; | ||||
|         for (uint32_t i = 0; i < o.via.map.size; ++i) { | ||||
|             if (o.via.map.ptr[i].key.type != msgpack::type::STR) { throw msgpack::type_error(); } | ||||
|             kvmap.insert( | ||||
|                 std::map<std::string, msgpack::object const*>::value_type( | ||||
|                     std::string( | ||||
|   | ||||
| @@ -121,7 +121,7 @@ inline tuple<> make_tuple() | ||||
| /// @cond | ||||
| <%0.upto(GENERATION_LIMIT) {|i|%> | ||||
| template <typename A0<%1.upto(i) {|j|%>, typename 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%><%}%>) | ||||
| tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(A0 const& a0<%1.upto(i) {|j|%>, A<%=j%> const& a<%=j%><%}%>) | ||||
| { | ||||
|     return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); | ||||
| } | ||||
|   | ||||
| @@ -54,7 +54,7 @@ tuple<> make_tuple(); | ||||
| /// @cond | ||||
| <%0.upto(GENERATION_LIMIT) {|i|%> | ||||
| template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||
| tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>); | ||||
| tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(A0 const& a0<%1.upto(i) {|j|%>, A<%=j%> const& a<%=j%><%}%>); | ||||
| <%}%> | ||||
| /// @endcond | ||||
|  | ||||
|   | ||||
| @@ -55,7 +55,7 @@ class zone { | ||||
|             ++m_tail; | ||||
|         } | ||||
|         void push_expand(void (*func)(void*), void* data) { | ||||
|             const size_t nused = m_end - m_array; | ||||
|             const size_t nused = static_cast<size_t>(m_end - m_array); | ||||
|             size_t nnext; | ||||
|             if(nused == 0) { | ||||
|                 nnext = (sizeof(finalizer) < 72/2) ? | ||||
| @@ -201,12 +201,12 @@ inline char* zone::get_aligned(char* ptr, size_t align) | ||||
| inline void* zone::allocate_align(size_t size, size_t align) | ||||
| { | ||||
|     char* aligned = get_aligned(m_chunk_list.m_ptr, align); | ||||
|     size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr); | ||||
|     size_t adjusted_size = size + static_cast<size_t>(aligned - m_chunk_list.m_ptr); | ||||
|     if (m_chunk_list.m_free < adjusted_size) { | ||||
|         size_t enough_size = size + align - 1; | ||||
|         char* ptr = allocate_expand(enough_size); | ||||
|         aligned = get_aligned(ptr, align); | ||||
|         adjusted_size = size + (aligned - m_chunk_list.m_ptr); | ||||
|         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; | ||||
|   | ||||
| @@ -1,5 +1,9 @@ | ||||
| ADD_SUBDIRECTORY (c) | ||||
| ADD_SUBDIRECTORY (cpp03) | ||||
| ADD_SUBDIRECTORY (cpp11) | ||||
| ADD_SUBDIRECTORY (boost) | ||||
| ADD_SUBDIRECTORY (x3) | ||||
| IF (NOT MSGPACK_CXX_ONLY) | ||||
|     ADD_SUBDIRECTORY (c) | ||||
| ENDIF () | ||||
| IF (MSGPACK_ENABLE_CXX) | ||||
|     ADD_SUBDIRECTORY (cpp03) | ||||
|     ADD_SUBDIRECTORY (cpp11) | ||||
|     ADD_SUBDIRECTORY (boost) | ||||
|     ADD_SUBDIRECTORY (x3) | ||||
| ENDIF () | ||||
|   | ||||
| @@ -27,7 +27,7 @@ FOREACH (source_file ${exec_PROGRAMS}) | ||||
|     ) | ||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|         PRIVATE | ||||
|             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|     ) | ||||
|     TARGET_LINK_LIBRARIES (${source_file_we} | ||||
|         ${Boost_SYSTEM_LIBRARY} | ||||
| @@ -39,7 +39,7 @@ FOREACH (source_file ${exec_PROGRAMS}) | ||||
|         ) | ||||
|     ENDIF() | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|     ENDIF () | ||||
|  | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
|   | ||||
| @@ -38,8 +38,8 @@ int main() { | ||||
|                     std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||
|                     return; | ||||
|                 } | ||||
|                 unp.reserve_buffer(window_size); | ||||
|                 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) { | ||||
| @@ -70,13 +70,22 @@ int main() { | ||||
|     // 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) { | ||||
|   | ||||
| @@ -136,13 +136,24 @@ int main() { | ||||
|  | ||||
|     // 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) { | ||||
|   | ||||
| @@ -83,7 +83,8 @@ int main() { | ||||
|     u.address = "Tokyo"; | ||||
|     msgpack::pack(ss, u); | ||||
|  | ||||
|     msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|     std::string const& str = ss.str(); | ||||
|     msgpack::object_handle oh = msgpack::unpack(str.data(), str.size()); | ||||
|     msgpack::object const& obj = oh.get(); | ||||
|     std::cout << "Unpacked msgpack object." << std::endl; | ||||
|     std::cout << obj << std::endl; | ||||
|   | ||||
| @@ -1,17 +1,16 @@ | ||||
| IF (MSGPACK_ENABLE_SHARED) | ||||
|     SET (MSGPACK_LIB msgpackc) | ||||
| ELSE () | ||||
|     SET (MSGPACK_LIB msgpackc-static) | ||||
| ENDIF () | ||||
|  | ||||
| FIND_PACKAGE (cJSON) | ||||
|  | ||||
| LIST (APPEND exec_PROGRAMS | ||||
|     boundary.c | ||||
|     lib_buffer_unpack.c | ||||
|     simple_c.c | ||||
|     speed_test_uint32_array.c | ||||
|     speed_test_uint64_array.c | ||||
|     user_buffer_unpack.c | ||||
| ) | ||||
| IF (cJSON_FOUND) | ||||
|     LIST (APPEND exec_PROGRAMS jsonconv.c) | ||||
| ENDIF () | ||||
|  | ||||
| FOREACH (source_file ${exec_PROGRAMS}) | ||||
|     GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) | ||||
| @@ -20,21 +19,26 @@ FOREACH (source_file ${exec_PROGRAMS}) | ||||
|         ${source_file} | ||||
|     ) | ||||
|     TARGET_LINK_LIBRARIES (${source_file_we} | ||||
|         ${MSGPACK_LIB} | ||||
|         msgpackc | ||||
|     ) | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||
|     IF ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|     ENDIF () | ||||
|  | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
|     IF ("${CMAKE_C_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}") | ||||
|     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_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX") | ||||
|             SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /WX") | ||||
|         ENDIF () | ||||
|     ENDIF () | ||||
| ENDFOREACH () | ||||
|  | ||||
| IF (cJSON_FOUND) | ||||
|     TARGET_LINK_LIBRARIES (jsonconv ${CJSON_LIBRARIES}) | ||||
|     TARGET_INCLUDE_DIRECTORIES(jsonconv PRIVATE ${CJSON_INCLUDE_DIRS}) | ||||
| ENDIF () | ||||
|   | ||||
							
								
								
									
										296
									
								
								example/c/boundary.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								example/c/boundary.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,296 @@ | ||||
| /* gcc boundary.c -o boundary -Wconversion -Wpointer-sign */ | ||||
| #include <msgpack.h> | ||||
| #include <stdio.h> | ||||
| #include <assert.h> | ||||
|  | ||||
| static inline unsigned char atohex(char a) | ||||
| { | ||||
|     int x; | ||||
|     if (a >= 'a') { | ||||
|         x = a - 'a' + 10; | ||||
|     } else if (a >= 'A') { | ||||
|         x = a - 'A' + 10; | ||||
|     } else { | ||||
|         x = a - '0'; | ||||
|     } | ||||
|     assert(x >= 0 && x < 16); | ||||
|     return (unsigned char)x; | ||||
| } | ||||
|  | ||||
| // Return 0 if equal | ||||
| static inline int bytesncmp(char *data, const char *bytes, size_t len) | ||||
| { | ||||
|     size_t n = len >> 1; | ||||
|     size_t i = 0; | ||||
|     int diff; | ||||
|     for (; i < n; i++) { | ||||
|         diff = (unsigned char)data[i] - (atohex(bytes[2 * i]) << 4) - atohex(bytes[2 * i + 1]); | ||||
|         if (diff != 0) { | ||||
|             return diff; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| { | ||||
|     msgpack_sbuffer sbuf; | ||||
|     msgpack_packer *x; | ||||
|     size_t offset = 0; | ||||
|     char data[65536]; | ||||
|     msgpack_timestamp ts[] = { | ||||
|         { 0xFFFFFFFF, 0 }, | ||||
|         { 0x100000000, 0 }, | ||||
|         { 0x3FFFFFFFF, 0 }, | ||||
|         { 0x400000000, 0 }, | ||||
|         { INT64_MAX, UINT32_MAX } | ||||
|     }; | ||||
|  | ||||
| #define check_sbuffer(b)                                     \ | ||||
|     do {                                                     \ | ||||
|         size_t len = strlen(#b);                             \ | ||||
|         assert((sbuf.size - offset) * 2 == len);             \ | ||||
|         assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \ | ||||
|         offset = sbuf.size;                                  \ | ||||
|     } while (0) | ||||
|  | ||||
|     msgpack_sbuffer_init(&sbuf); | ||||
|     x = msgpack_packer_new(&sbuf, msgpack_sbuffer_write); | ||||
|  | ||||
|     msgpack_pack_fix_uint8(x, 0); check_sbuffer(cc00);          /* cc 00 */ | ||||
|     msgpack_pack_fix_uint8(x, 0xFF); check_sbuffer(ccff);       /* cc ff */ | ||||
|     msgpack_pack_fix_uint16(x, 0); check_sbuffer(cd0000);       /* cd 00 00 */ | ||||
|     msgpack_pack_fix_uint16(x, 0xFFFF); check_sbuffer(cdffff);  /* cd ff ff */ | ||||
|     msgpack_pack_fix_uint32(x, 0); check_sbuffer(ce00000000);   /* ce 00 00 00 00 */ | ||||
|     msgpack_pack_fix_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff);  /* ce ff ff ff ff */ | ||||
|     msgpack_pack_fix_uint64(x, 0); check_sbuffer(cf0000000000000000);   /* cf 00 00 00 00 00 00 00 00 */ | ||||
|     msgpack_pack_fix_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff);  /* cf ff ff ff ff ff ff ff ff */ | ||||
|  | ||||
|     msgpack_pack_uint8(x, 0); check_sbuffer(00);            /* 00 */ | ||||
|     msgpack_pack_uint8(x, 0x7F); check_sbuffer(7f);         /* 7f */ | ||||
|     msgpack_pack_uint8(x, 0x80); check_sbuffer(cc80);       /* cc 80 */ | ||||
|     msgpack_pack_uint8(x, 0xFF); check_sbuffer(ccff);       /* cc ff */ | ||||
|  | ||||
|     msgpack_pack_uint16(x, 0); check_sbuffer(00);           /* 00 */ | ||||
|     msgpack_pack_uint16(x, 0x7F); check_sbuffer(7f);        /* 7f */ | ||||
|     msgpack_pack_uint16(x, 0x80); check_sbuffer(cc80);      /* cc 80 */ | ||||
|     msgpack_pack_uint16(x, 0xFF); check_sbuffer(ccff);      /* cc ff */ | ||||
|     msgpack_pack_uint16(x, 0x100); check_sbuffer(cd0100);   /* cd 01 00 */ | ||||
|     msgpack_pack_uint16(x, 0xFFFF); check_sbuffer(cdffff);  /* cd ff ff */ | ||||
|  | ||||
|     msgpack_pack_uint32(x, 0); check_sbuffer(00);           /* 00 */ | ||||
|     msgpack_pack_uint32(x, 0x7F); check_sbuffer(7f);        /* 7f */ | ||||
|     msgpack_pack_uint32(x, 0x80); check_sbuffer(cc80);      /* cc 80 */ | ||||
|     msgpack_pack_uint32(x, 0xFF); check_sbuffer(ccff);      /* cc ff */ | ||||
|     msgpack_pack_uint32(x, 0x100); check_sbuffer(cd0100);   /* cd 01 00 */ | ||||
|     msgpack_pack_uint32(x, 0xFFFF); check_sbuffer(cdffff);  /* cd ff ff */ | ||||
|     msgpack_pack_uint32(x, 0x10000); check_sbuffer(ce00010000);     /* ce 00 01 00 00 */ | ||||
|     msgpack_pack_uint32(x, 0xFFFFFFFF); check_sbuffer(ceffffffff);  /* ce ff ff ff ff */ | ||||
|  | ||||
|     msgpack_pack_uint64(x, 0); check_sbuffer(00);           /* 00 */ | ||||
|     msgpack_pack_uint64(x, 0x7F); check_sbuffer(7f);        /* 7f */ | ||||
|     msgpack_pack_uint64(x, 0x80); check_sbuffer(cc80);      /* cc 80 */ | ||||
|     msgpack_pack_uint64(x, 0xFF); check_sbuffer(ccff);      /* cc ff */ | ||||
|     msgpack_pack_uint64(x, 0x100); check_sbuffer(cd0100);   /* cd 01 00 */ | ||||
|     msgpack_pack_uint64(x, 0xFFFF); check_sbuffer(cdffff);  /* cd ff ff */ | ||||
|     msgpack_pack_uint64(x, 0x10000); check_sbuffer(ce00010000);     /* ce 00 01 00 00 */ | ||||
|     msgpack_pack_uint64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff);  /* ce ff ff ff ff */ | ||||
|     msgpack_pack_uint64(x, 0x100000000); check_sbuffer(cf0000000100000000);         /* cf 00 00 00 01 00 00 00 00 */ | ||||
|     msgpack_pack_uint64(x, 0xFFFFFFFFFFFFFFFF); check_sbuffer(cfffffffffffffffff);  /* cf ff ff ff ff ff ff ff ff */ | ||||
|  | ||||
|     msgpack_pack_fix_int8(x, 0x7F); check_sbuffer(d07f);            /* d0 7f */ | ||||
|     msgpack_pack_fix_int8(x, -0x7F-1); check_sbuffer(d080);         /* d0 80 */ | ||||
|     msgpack_pack_fix_int16(x, 0x7FFF); check_sbuffer(d17fff);       /* d1 7f ff */ | ||||
|     msgpack_pack_fix_int16(x, -0x7FFF-1); check_sbuffer(d18000);    /* d1 80 00 */ | ||||
|     msgpack_pack_fix_int32(x, 0x7FFFFFFF); check_sbuffer(d27fffffff);       /* d2 7f ff ff ff */ | ||||
|     msgpack_pack_fix_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000);    /* d2 80 00 00 00 */ | ||||
|     msgpack_pack_fix_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(d37fffffffffffffff);       /* d3 7f ff ff ff ff ff ff ff */ | ||||
|     msgpack_pack_fix_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000);    /* d3 80 00 00 00 00 00 00 00 */ | ||||
|  | ||||
|     msgpack_pack_int8(x, -0x7F-1); check_sbuffer(d080);         /* d0 80 */ | ||||
|     msgpack_pack_int8(x, -0x21); check_sbuffer(d0df);           /* d0 df */ | ||||
|     msgpack_pack_int8(x, -0x20); check_sbuffer(e0);             /* e0 */ | ||||
|     msgpack_pack_int8(x, -1); check_sbuffer(ff);                /* ff */ | ||||
|     msgpack_pack_int8(x, 0); check_sbuffer(00);                 /* 00 */ | ||||
|     msgpack_pack_int8(x, 0x7F); check_sbuffer(7f);              /* 7f */ | ||||
|  | ||||
|     msgpack_pack_int16(x, -0x7FFF-1); check_sbuffer(d18000);    /* d1 80 00 */ | ||||
|     msgpack_pack_int16(x, -0x81); check_sbuffer(d1ff7f);        /* d1 ff 7f */ | ||||
|     msgpack_pack_int16(x, -0x80); check_sbuffer(d080);          /* d0 80 */ | ||||
|     msgpack_pack_int16(x, -0x21); check_sbuffer(d0df);          /* d0 df */ | ||||
|     msgpack_pack_int16(x, -0x20); check_sbuffer(e0);            /* e0 */ | ||||
|     msgpack_pack_int16(x, -0x1); check_sbuffer(ff);             /* ff */ | ||||
|     msgpack_pack_int16(x, 0); check_sbuffer(00);                /* 00 */ | ||||
|     msgpack_pack_int16(x, 0x7F); check_sbuffer(7f);             /* 7f */ | ||||
|     msgpack_pack_int16(x, 0x80); check_sbuffer(cc80);           /* cc 80 */ | ||||
|     msgpack_pack_int16(x, 0xFF); check_sbuffer(ccff);           /* cc ff */ | ||||
|     msgpack_pack_int16(x, 0x100); check_sbuffer(cd0100);        /* cd 01 00 */ | ||||
|     msgpack_pack_int16(x, 0x7FFF); check_sbuffer(cd7fff);       /* cd 7f ff */ | ||||
|  | ||||
|     msgpack_pack_int32(x, -0x7FFFFFFF-1); check_sbuffer(d280000000);    /* d2 80 00 00 00 */ | ||||
|     msgpack_pack_int32(x, -0x8001); check_sbuffer(d2ffff7fff);          /* d2 ff ff 7f ff */ | ||||
|     msgpack_pack_int32(x, -0x8000); check_sbuffer(d18000);              /* d1 80 00 */ | ||||
|     msgpack_pack_int32(x, -0x81); check_sbuffer(d1ff7f);                /* d1 ff 7f */ | ||||
|     msgpack_pack_int32(x, -0x80); check_sbuffer(d080);                  /* d0 80 */ | ||||
|     msgpack_pack_int32(x, -0x21); check_sbuffer(d0df);                  /* d0 df */ | ||||
|     msgpack_pack_int32(x, -0x20); check_sbuffer(e0);                    /* e0 */ | ||||
|     msgpack_pack_int32(x, -0x1); check_sbuffer(ff);                     /* ff */ | ||||
|     msgpack_pack_int32(x, 0); check_sbuffer(00);                        /* 00 */ | ||||
|     msgpack_pack_int32(x, 0x7F); check_sbuffer(7f);                     /* 7f */ | ||||
|     msgpack_pack_int32(x, 0x80); check_sbuffer(cc80);                   /* cc 80 */ | ||||
|     msgpack_pack_int32(x, 0xFF); check_sbuffer(ccff);                   /* cc ff */ | ||||
|     msgpack_pack_int32(x, 0x100); check_sbuffer(cd0100);                /* cd 01 00 */ | ||||
|     msgpack_pack_int32(x, 0xFFFF); check_sbuffer(cdffff);               /* cd ff ff */ | ||||
|     msgpack_pack_int32(x, 0x10000); check_sbuffer(ce00010000);          /* ce 00 01 00 00 */ | ||||
|     msgpack_pack_int32(x, 0x7FFFFFFF); check_sbuffer(ce7fffffff);       /* ce 7f ff ff ff */ | ||||
|  | ||||
|     msgpack_pack_int64(x, -0x7FFFFFFFFFFFFFFF-1); check_sbuffer(d38000000000000000);    /* d3 80 00 00 00 00 00 00 00 */ | ||||
|     msgpack_pack_int64(x, -((1LL<<31)+1)); check_sbuffer(d3ffffffff7fffffff);   /* d3 ff ff ff ff 7f ff ff ff */ | ||||
|     msgpack_pack_int64(x, -(1LL<<31)); check_sbuffer(d280000000);               /* d2 80 00 00 00 */ | ||||
|     msgpack_pack_int64(x, -0x8001); check_sbuffer(d2ffff7fff);                  /* d2 ff ff 7f ff */ | ||||
|     msgpack_pack_int64(x, -0x8000); check_sbuffer(d18000);                      /* d1 80 00 */ | ||||
|     msgpack_pack_int64(x, -0x81); check_sbuffer(d1ff7f);                        /* d1 ff 7f */ | ||||
|     msgpack_pack_int64(x, -0x80); check_sbuffer(d080);                          /* d0 80 */ | ||||
|     msgpack_pack_int64(x, -0x21); check_sbuffer(d0df);                          /* d0 df */ | ||||
|     msgpack_pack_int64(x, -0x20); check_sbuffer(e0);                            /* e0 */ | ||||
|     msgpack_pack_int64(x, -0x1); check_sbuffer(ff);                             /* ff */ | ||||
|     msgpack_pack_int64(x, 0); check_sbuffer(00);                                /* 00 */ | ||||
|     msgpack_pack_int64(x, 0x7F); check_sbuffer(7f);                             /* 7f */ | ||||
|     msgpack_pack_int64(x, 0x80); check_sbuffer(cc80);                           /* cc 80 */ | ||||
|     msgpack_pack_int64(x, 0xFF); check_sbuffer(ccff);                           /* cc ff */ | ||||
|     msgpack_pack_int64(x, 0x100); check_sbuffer(cd0100);                        /* cd 01 00 */ | ||||
|     msgpack_pack_int64(x, 0xFFFF); check_sbuffer(cdffff);                       /* cd ff ff */ | ||||
|     msgpack_pack_int64(x, 0x10000); check_sbuffer(ce00010000);                  /* ce 00 01 00 00 */ | ||||
|     msgpack_pack_int64(x, 0xFFFFFFFF); check_sbuffer(ceffffffff);               /* ce ff ff ff ff */ | ||||
|     msgpack_pack_int64(x, 0x100000000); check_sbuffer(cf0000000100000000);      /* cf 00 00 00 01 00 00 00 00 */ | ||||
|     msgpack_pack_int64(x, 0x7FFFFFFFFFFFFFFF); check_sbuffer(cf7fffffffffffffff);   /* cf 7f ff ff ff ff ff ff ff */ | ||||
|  | ||||
|     msgpack_pack_nil(x);    check_sbuffer(c0);          /* c0 */ | ||||
|     msgpack_pack_false(x);  check_sbuffer(c2);          /* c2 */ | ||||
|     msgpack_pack_true(x);   check_sbuffer(c3);          /* c3 */ | ||||
|  | ||||
|     msgpack_pack_float(x, 1.0); check_sbuffer(ca3f800000);          /* ca 3f 80 00 00 */ | ||||
|     msgpack_pack_double(x, 1.0); check_sbuffer(cb3ff0000000000000); /* cb 3f f0 00 00 00 00 00 00 */ | ||||
|  | ||||
|     msgpack_pack_unsigned_char(x, UINT8_MAX);       /* same as msgpack_pack_uint8() */ | ||||
|     msgpack_pack_unsigned_short(x, (unsigned short)UINT64_MAX); | ||||
|     msgpack_pack_unsigned_int(x, (unsigned int)UINT64_MAX); | ||||
|     msgpack_pack_unsigned_long(x, (unsigned long)UINT64_MAX); | ||||
|     msgpack_pack_unsigned_long_long(x, (unsigned long long)UINT64_MAX); | ||||
|  | ||||
|     msgpack_pack_signed_char(x, INT8_MAX);          /* same as msgpack_pack_int8() */ | ||||
|  | ||||
| #define check_sbuffer_n(b)                                   \ | ||||
|     do {                                                     \ | ||||
|         size_t len = strlen(#b);                             \ | ||||
|         assert(bytesncmp(sbuf.data + offset, #b, len) == 0); \ | ||||
|         offset = sbuf.size;                                  \ | ||||
|     } while (0) | ||||
|  | ||||
| #define fill_str(n) msgpack_pack_str_body(x, data, n) | ||||
|  | ||||
|     offset = sbuf.size; | ||||
|     msgpack_pack_str(x, 0); /* "" */ check_sbuffer(a0); /* a0 */ | ||||
|     msgpack_pack_str(x, 31); | ||||
|     fill_str(31); check_sbuffer_n(bf);                  /* bf ... */ | ||||
|     msgpack_pack_str(x, 32); | ||||
|     fill_str(32); check_sbuffer_n(d920);                /* d9 20 ... */ | ||||
|     msgpack_pack_str(x, 255); | ||||
|     fill_str(255); check_sbuffer_n(d9ff);               /* d9 ff ... */ | ||||
|     msgpack_pack_str(x, 256); | ||||
|     fill_str(256); check_sbuffer_n(da0100);             /* da 01 00 ... */ | ||||
|     msgpack_pack_str(x, 65535); | ||||
|     fill_str(65535); check_sbuffer_n(daffff);           /* da ff ff ... */ | ||||
|     msgpack_pack_str(x, 65536); | ||||
|     fill_str(65536); check_sbuffer_n(db00010000);       /* db 00 01 00 00 ... */ | ||||
|  | ||||
| #define fill_map(n)                                             \ | ||||
|     do {                                                        \ | ||||
|         size_t i = 0;                                           \ | ||||
|         for (; i < n * 2; i++) { msgpack_pack_int8(x, 0x1); }   \ | ||||
|     } while (0); | ||||
|  | ||||
|     msgpack_pack_map(x, 0); /* {} */ check_sbuffer(80); /* 80 */ | ||||
|     msgpack_pack_map(x, 1); | ||||
|     fill_map(1); check_sbuffer_n(81);                   /* 81 ... */ | ||||
|     msgpack_pack_map(x, 15); | ||||
|     fill_map(15); check_sbuffer_n(8f);                  /* 8f ... */ | ||||
|     msgpack_pack_map(x, 16); | ||||
|     fill_map(16); check_sbuffer_n(de0010);              /* de 00 10 ... */ | ||||
|     msgpack_pack_map(x, 65535); | ||||
|     fill_map(65535); check_sbuffer_n(deffff);           /* de ff ff ... */ | ||||
|     msgpack_pack_map(x, 65536); | ||||
|     fill_map(65536); check_sbuffer_n(df00010000);       /* df 00 01 00 00 ... */ | ||||
|  | ||||
| #define fill_array(n)                                       \ | ||||
|     do {                                                    \ | ||||
|         size_t i = 0;                                       \ | ||||
|         for (; i < n; i++) { msgpack_pack_int8(x, 0x1); }   \ | ||||
|     } while (0); | ||||
|  | ||||
|     msgpack_pack_array(x, 0); /* [] */ check_sbuffer(90);   /* 90 */ | ||||
|     msgpack_pack_array(x, 1); | ||||
|     fill_array(1); check_sbuffer_n(91);                 /* 91 ... */ | ||||
|     msgpack_pack_array(x, 15); | ||||
|     fill_array(15); check_sbuffer_n(9f);                /* 9f ... */ | ||||
|     msgpack_pack_array(x, 16); | ||||
|     fill_array(16); check_sbuffer_n(dc0010);            /* dc 00 10 ... */ | ||||
|     msgpack_pack_array(x, 65535); | ||||
|     fill_array(65535); check_sbuffer_n(dcffff);         /* dc ff ff ... */ | ||||
|     msgpack_pack_array(x, 65536); | ||||
|     fill_array(65536); check_sbuffer_n(dd00010000);     /* dd 00 01 00 00 ... */ | ||||
|  | ||||
| #define fill_bin(n) msgpack_pack_bin_body(x, data, n) | ||||
|  | ||||
|     msgpack_pack_bin(x, 0); check_sbuffer(c400);        /* c4 00 */ | ||||
|     msgpack_pack_bin(x, 1); | ||||
|     fill_bin(1); check_sbuffer_n(c401);                 /* c4 01 ... */ | ||||
|     msgpack_pack_bin(x, 255); | ||||
|     fill_bin(255); check_sbuffer_n(c4ff);               /* c4 ff ... */ | ||||
|     msgpack_pack_bin(x, 256); | ||||
|     fill_bin(256); check_sbuffer_n(c50100);             /* c5 01 00 ... */ | ||||
|     msgpack_pack_bin(x, 65535); | ||||
|     fill_bin(65535); check_sbuffer_n(c5ffff);           /* c5 ff ff ... */ | ||||
|     msgpack_pack_bin(x, 65536); | ||||
|     fill_bin(65536); check_sbuffer_n(c600010000);       /* c6 00 01 00 00 ... */ | ||||
|  | ||||
| #define fill_ext(n) msgpack_pack_ext_body(x, data, n) | ||||
|  | ||||
|     msgpack_pack_ext(x, 1, 0x7F); | ||||
|     fill_ext(1); check_sbuffer_n(d47f);                 /* d4 7f ... */ | ||||
|     msgpack_pack_ext(x, 2, 0x7F); | ||||
|     fill_ext(2); check_sbuffer_n(d57f);                 /* d5 7f ... */ | ||||
|     msgpack_pack_ext(x, 4, 0x7F); | ||||
|     fill_ext(4); check_sbuffer_n(d67f);                 /* d6 7f ... */ | ||||
|     msgpack_pack_ext(x, 8, 0x7F); | ||||
|     fill_ext(8); check_sbuffer_n(d77f);                 /* d7 7f ... */ | ||||
|     msgpack_pack_ext(x, 16, 0x7F); | ||||
|     fill_ext(16); check_sbuffer_n(d87f);                /* d8 7f ... */ | ||||
|  | ||||
|     msgpack_pack_ext(x, 0, 0x7F); check_sbuffer(c7007f); /* c7 00 7f */ | ||||
|     msgpack_pack_ext(x, 3, 0x7F); | ||||
|     fill_ext(3); check_sbuffer_n(c7037f);               /* c7 03 7f */ | ||||
|     msgpack_pack_ext(x, 5, 0x7F); | ||||
|     fill_ext(5); check_sbuffer_n(c7057f);               /* c7 05 7f */ | ||||
|     msgpack_pack_ext(x, 17, 0x7F); | ||||
|     fill_ext(17); check_sbuffer_n(c7117f);              /* c7 11 7f */ | ||||
|     msgpack_pack_ext(x, 255, 0x7F); | ||||
|     fill_ext(255); check_sbuffer_n(c7ff7f);             /* c7 ff 7f ... */ | ||||
|     msgpack_pack_ext(x, 256, 0x7F); | ||||
|     fill_ext(256); check_sbuffer_n(c801007f);           /* c8 01 00 7f ... */ | ||||
|     msgpack_pack_ext(x, 65535, 0x7F); | ||||
|     fill_ext(65535); check_sbuffer_n(c8ffff7f);         /* c8 ff ff 7f ... */ | ||||
|     msgpack_pack_ext(x, 65536, 0x7F); | ||||
|     fill_ext(65536); check_sbuffer_n(c9000100007f);     /* c9 00 01 00 00 7f ... */ | ||||
|  | ||||
|     msgpack_pack_timestamp(x, ts); check_sbuffer(d6ffffffffff); /* d6 ff ff ff ff ff */ | ||||
|     msgpack_pack_timestamp(x, ts + 1); check_sbuffer(d7ff0000000100000000); /* d7 ff 00 00 00 01 00 00 00 00 */ | ||||
|     msgpack_pack_timestamp(x, ts + 2); check_sbuffer(d7ff00000003ffffffff); /* d7 ff 00 00 00 03 ff ff ff ff */ | ||||
|     msgpack_pack_timestamp(x, ts + 3); check_sbuffer(c70cff000000000000000400000000);   /* c7 0c ff 00 00 00 00 00 00 00 04 00 00 00 00 */ | ||||
|     msgpack_pack_timestamp(x, ts + 4); check_sbuffer(c70cffffffffff7fffffffffffffff);   /* c7 0c ff ff ff ff ff 7f ff ff ff ff ff ff ff */ | ||||
|  | ||||
|     msgpack_sbuffer_destroy(&sbuf); | ||||
|     msgpack_packer_free(x); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
							
								
								
									
										419
									
								
								example/c/jsonconv.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										419
									
								
								example/c/jsonconv.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,419 @@ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <math.h> | ||||
| #include <msgpack.h> | ||||
| #include <cjson/cJSON.h> | ||||
|  | ||||
| #if defined(_MSC_VER) | ||||
| #if _MSC_VER >= 1800 | ||||
| #include <inttypes.h> | ||||
| #else | ||||
| #define PRIu64 "I64u" | ||||
| #define PRIi64 "I64i" | ||||
| #define PRIi8 "i" | ||||
| #endif | ||||
| #else | ||||
| #include <inttypes.h> | ||||
| #endif | ||||
|  | ||||
| #if defined(_KERNEL_MODE) | ||||
| #  undef  snprintf | ||||
| #  define snprintf _snprintf | ||||
| #endif | ||||
|  | ||||
| #define DEBUG(...) printf(__VA_ARGS__) | ||||
|  | ||||
| static char *format_string(const char *input) | ||||
| { | ||||
|     const char *inptr; | ||||
|     char *output; | ||||
|     char *outptr; | ||||
|     size_t output_length = 0; | ||||
|     /* numbers of additional characters*/ | ||||
|     size_t escape_characters = 0; | ||||
|  | ||||
|     if (input == NULL) { | ||||
|         return NULL; | ||||
|     } | ||||
|  | ||||
|     for (inptr = input; *inptr; inptr++) { | ||||
|         switch (*inptr) { | ||||
|         case '\"': | ||||
|         case '\\': | ||||
|         case '\b': | ||||
|         case '\f': | ||||
|         case '\n': | ||||
|         case '\r': | ||||
|         case '\t': | ||||
|             /* one character escape sequence */ | ||||
|             escape_characters++; | ||||
|             break; | ||||
|         default: | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|     output_length = (size_t)(inptr - input) + escape_characters; | ||||
|  | ||||
|     output = (char *)malloc(output_length + 1); | ||||
|     if (output == NULL) { | ||||
|         return NULL; | ||||
|     } | ||||
|  | ||||
|     /* no add characters*/ | ||||
|     if (escape_characters == 0) { | ||||
|         memcpy(output, input, output_length); | ||||
|         output[output_length] = '\0'; | ||||
|         return output; | ||||
|     } | ||||
|  | ||||
|     outptr = output; | ||||
|     /* copy string */ | ||||
|     for (inptr = input; *inptr != '\0'; (void)inptr++, outptr++) { | ||||
|         if ((*inptr > 31) && (*inptr != '\"') && (*inptr != '\\')) { | ||||
|             /* normal character, copy */ | ||||
|             *outptr = *inptr; | ||||
|         } else { | ||||
|             /* character needs to be escaped */ | ||||
|             *outptr++ = '\\'; | ||||
|             switch (*inptr) | ||||
|             { | ||||
|             case '\\': | ||||
|                 *outptr = '\\'; | ||||
|                 break; | ||||
|             case '\"': | ||||
|                 *outptr = '\"'; | ||||
|                 break; | ||||
|             case '\b': | ||||
|                 *outptr = 'b'; | ||||
|                 break; | ||||
|             case '\f': | ||||
|                 *outptr = 'f'; | ||||
|                 break; | ||||
|             case '\n': | ||||
|                 *outptr = 'n'; | ||||
|                 break; | ||||
|             case '\r': | ||||
|                 *outptr = 'r'; | ||||
|                 break; | ||||
|             case '\t': | ||||
|                 *outptr = 't'; | ||||
|                 break; | ||||
|             default: | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     output[output_length] = '\0'; | ||||
|     return output; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Pack cJSON object. | ||||
|  * return 0 success, others failed | ||||
|  */ | ||||
| static int parse_cjson_object(msgpack_packer *pk, cJSON *node) | ||||
| { | ||||
|     int ret, sz, i; | ||||
|     cJSON *child; | ||||
|     char *strvalue; | ||||
|  | ||||
|     if (node == NULL) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     switch (node->type & 0xFF) { | ||||
|     case cJSON_Invalid: | ||||
|         return -1; | ||||
|  | ||||
|     case cJSON_False: | ||||
|         return msgpack_pack_false(pk); | ||||
|  | ||||
|     case cJSON_True: | ||||
|         return msgpack_pack_true(pk); | ||||
|  | ||||
|     case cJSON_NULL: | ||||
|         return msgpack_pack_nil(pk); | ||||
|  | ||||
|     case cJSON_String: | ||||
|         strvalue = format_string(node->valuestring); | ||||
|         if (strvalue != NULL) { | ||||
|             ret = msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue)); | ||||
|             free(strvalue); | ||||
|             return ret; | ||||
|         } else { | ||||
|             return -1; | ||||
|         } | ||||
|  | ||||
|     case cJSON_Number: | ||||
|         if (isnan(node->valuedouble) || isinf(node->valuedouble)) { | ||||
|             ret = msgpack_pack_nil(pk); | ||||
|         } else if (node->valuedouble == node->valueint) { | ||||
|             ret = msgpack_pack_int(pk, node->valueint); | ||||
|         } else { | ||||
|             ret = msgpack_pack_double(pk, node->valuedouble); | ||||
|         } | ||||
|         return ret; | ||||
|  | ||||
|     case cJSON_Array: | ||||
|         sz = cJSON_GetArraySize(node); | ||||
|         if (msgpack_pack_array(pk, sz) != 0) { | ||||
|             return -1; | ||||
|         } | ||||
|         for (i = 0; i < sz; i++) { | ||||
|             if (parse_cjson_object(pk, cJSON_GetArrayItem(node, i)) != 0) { | ||||
|                 return -1; | ||||
|             } | ||||
|         } | ||||
|         return 0; | ||||
|  | ||||
|     case cJSON_Object: | ||||
|         sz = cJSON_GetArraySize(node); | ||||
|         if (msgpack_pack_map(pk, sz) != 0) { | ||||
|             return -1; | ||||
|         } | ||||
|         for (i = 0; i < sz; i++) { | ||||
|             child = cJSON_GetArrayItem(node, i); | ||||
|             strvalue = format_string(child->string); | ||||
|             if (strvalue == NULL) { | ||||
|                 return -1; | ||||
|             } | ||||
|  | ||||
|             if (msgpack_pack_str_with_body(pk, strvalue, strlen(strvalue)) != 0) { | ||||
|                 free(strvalue); | ||||
|                 return -1; | ||||
|             } | ||||
|             free(strvalue); | ||||
|             if (parse_cjson_object(pk, child) != 0) { | ||||
|                 return -1; | ||||
|             } | ||||
|         } | ||||
|         return 0; | ||||
|  | ||||
|     default: | ||||
|         DEBUG("unknown type.\n"); | ||||
|         return -1; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Pack json string to msgpack format data. | ||||
|  * return 0 success, -1 failed | ||||
|  */ | ||||
| int msgpack_pack_jsonstr(msgpack_packer *pk, const char *jsonstr) | ||||
| { | ||||
|     int status; | ||||
|     cJSON *node; | ||||
|     const char *end = NULL; | ||||
|  | ||||
|     if (pk == NULL || jsonstr == NULL) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     node = cJSON_ParseWithOpts(jsonstr, &end, 1); | ||||
|     if (node == NULL) { | ||||
|         DEBUG("parse error: unexpected string `%s`\n", end); | ||||
|         return -1; | ||||
|     } | ||||
|     status = parse_cjson_object(pk, node); | ||||
|     cJSON_Delete(node); | ||||
|  | ||||
|     return status; | ||||
| } | ||||
|  | ||||
| static int bytes_contain_zero(const msgpack_object_bin *bin) | ||||
| { | ||||
|     size_t i; | ||||
|     for (i = 0; i < bin->size; i++) { | ||||
|         if (bin->ptr[i] == 0) { | ||||
|             return 1; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| #define PRINT_JSONSTR_CALL(ret, func, aux_buffer, aux_buffer_size, ...) \ | ||||
|     ret = func(aux_buffer, aux_buffer_size, __VA_ARGS__);               \ | ||||
|     if (ret <= 0)                                                       \ | ||||
|         return ret;                                                     \ | ||||
|     if (ret > aux_buffer_size)                                          \ | ||||
|         return 0;                                                       \ | ||||
|     aux_buffer = aux_buffer + ret;                                      \ | ||||
|     aux_buffer_size = aux_buffer_size - ret | ||||
|  | ||||
| /* | ||||
|  * Convert msgpack format data to json string. | ||||
|  * return >0: success, 0: length of buffer not enough, -1: failed | ||||
|  */ | ||||
| size_t msgpack_object_print_jsonstr(char *buffer, size_t length, const msgpack_object o) | ||||
| { | ||||
|     char *aux_buffer = buffer; | ||||
|     size_t aux_buffer_size = length; | ||||
|     size_t ret; | ||||
|  | ||||
|     switch (o.type) { | ||||
|     case MSGPACK_OBJECT_NIL: | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "null"); | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_BOOLEAN: | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, (o.via.boolean ? "true" : "false")); | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_POSITIVE_INTEGER: | ||||
| #if defined(PRIu64) | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIu64, o.via.u64); | ||||
| #else | ||||
|         if (o.via.u64 > ULONG_MAX) { | ||||
|             PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", ULONG_MAX); | ||||
|         } else { | ||||
|             PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%lu", (unsigned long)o.via.u64); | ||||
|         } | ||||
| #endif | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_NEGATIVE_INTEGER: | ||||
| #if defined(PRIi64) | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%" PRIi64, o.via.i64); | ||||
| #else | ||||
|         if (o.via.i64 > LONG_MAX) { | ||||
|             PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MAX); | ||||
|         } else if (o.via.i64 < LONG_MIN) { | ||||
|             PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", LONG_MIN); | ||||
|         } else { | ||||
|             PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%ld", (signed long)o.via.i64); | ||||
|         } | ||||
| #endif | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_FLOAT32: | ||||
|     case MSGPACK_OBJECT_FLOAT64: | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "%f", o.via.f64); | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_STR: | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.str.size, o.via.str.ptr); | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_BIN: | ||||
|         if (bytes_contain_zero(&o.via.bin)) { | ||||
|             DEBUG("the value contains zero\n"); | ||||
|             return -1; | ||||
|         } | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "\"%.*s\"", (int)o.via.bin.size, o.via.bin.ptr); | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_EXT: | ||||
|         DEBUG("not support type: MSGPACK_OBJECT_EXT.\n"); | ||||
|         return -1; | ||||
|  | ||||
|     case MSGPACK_OBJECT_ARRAY: | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "["); | ||||
|         if (o.via.array.size != 0) { | ||||
|             msgpack_object *p = o.via.array.ptr; | ||||
|             msgpack_object *const pend = o.via.array.ptr + o.via.array.size; | ||||
|             PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p); | ||||
|             ++p; | ||||
|             for (; p < pend; ++p) { | ||||
|                 PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ","); | ||||
|                 PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, *p); | ||||
|             } | ||||
|         } | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "]"); | ||||
|         break; | ||||
|  | ||||
|     case MSGPACK_OBJECT_MAP: | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "{"); | ||||
|         if (o.via.map.size != 0) { | ||||
|             msgpack_object_kv *p = o.via.map.ptr; | ||||
|             msgpack_object_kv *const pend = o.via.map.ptr + o.via.map.size; | ||||
|  | ||||
|             for (; p < pend; ++p) { | ||||
|                 if (p->key.type != MSGPACK_OBJECT_STR) { | ||||
|                     DEBUG("the key of in a map must be string.\n"); | ||||
|                     return -1; | ||||
|                 } | ||||
|                 if (p != o.via.map.ptr) { | ||||
|                     PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ","); | ||||
|                 } | ||||
|                 PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->key); | ||||
|                 PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, ":"); | ||||
|                 PRINT_JSONSTR_CALL(ret, msgpack_object_print_jsonstr, aux_buffer, aux_buffer_size, p->val); | ||||
|             } | ||||
|         } | ||||
|         PRINT_JSONSTR_CALL(ret, snprintf, aux_buffer, aux_buffer_size, "}"); | ||||
|         break; | ||||
|  | ||||
|     default: | ||||
|         DEBUG("unknown type.\n"); | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     return length - aux_buffer_size; | ||||
| } | ||||
| #undef PRINT_JSONSTR_CALL | ||||
|  | ||||
| static void test(const char *name, const char *input, const char *expect) | ||||
| { | ||||
|     msgpack_sbuffer sbuf; | ||||
|     { | ||||
|         // pack | ||||
|         msgpack_packer pk; | ||||
|         msgpack_sbuffer_init(&sbuf); | ||||
|         msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); | ||||
|         if (msgpack_pack_jsonstr(&pk, input) < 0) { | ||||
|             msgpack_sbuffer_destroy(&sbuf); | ||||
|             printf("%s: invalid json string.\n", name); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     { | ||||
|         // unpack | ||||
| #define MAX_JSONLEN 1024 | ||||
|         msgpack_zone z; | ||||
|         msgpack_object obj; | ||||
|         size_t jsonstrlen = MAX_JSONLEN - 1; | ||||
|         char jsonparsed[MAX_JSONLEN]; | ||||
|  | ||||
|         msgpack_zone_init(&z, jsonstrlen); | ||||
|         msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj); | ||||
|         jsonstrlen = msgpack_object_print_jsonstr(jsonparsed, jsonstrlen, obj); | ||||
|         jsonparsed[jsonstrlen] = '\0'; | ||||
|  | ||||
|         //compare input and output | ||||
|         if (expect == NULL) { | ||||
|             expect = input; | ||||
|         } | ||||
|         if (strcmp(expect, jsonparsed) == 0) { | ||||
|             printf("%s: ok\n", name); | ||||
|         } else { | ||||
|             printf("%s: failed\n", name); | ||||
|         } | ||||
|         msgpack_zone_destroy(&z); | ||||
|     } | ||||
|     msgpack_sbuffer_destroy(&sbuf); | ||||
| } | ||||
|  | ||||
| int main() | ||||
| { | ||||
|     test("null", "null", NULL); | ||||
|     test("boolean", "false", NULL); | ||||
|     test("single string", "\"frsyuki\"", NULL); | ||||
|     test("single number", "\"100\"", NULL); | ||||
|     test("space", "[{\"valuespace\":\"\",\"\":\"keyspace\"},\"\",[\"\"]]", NULL); | ||||
|     test("quote", "\"My name is Tom (\\\"Bee\\\") Kobe\"", NULL); | ||||
|     test("escape", "\"\\\\b\\f\\n\\r\\t\"", NULL); | ||||
|     test("escape2", "\"\b\f\n\r\t\"", "\"\\b\\f\\n\\r\\t\""); | ||||
|     test("map", "{\"name\":\"Tom (\\\"Bee\\\") Kobe\",\"type\":\"image\",\"data\":{\"width\":360,\"height\":460,\"title\":\"View me\",\"ips\":[116,943,256,711]}}", NULL); | ||||
|     test("array", "[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]", NULL); | ||||
|     test("number array", "[[101,121,-33],[119,911,171],[0,2,-3]]", NULL); | ||||
|     test("mix array", "[{\"name\":\"Tom\",\"city\":\"London\",\"country\":\"UK\",\"longitude\":23},{\"name\":\"Jack\",\"city\":\"Birmingham\",\"country\":\"UK\",\"longitude\":-22}]", NULL); | ||||
|     test("unicode", "\"\\u5C71\\u5DDD\\u7570\\u57DF\\u98A8\\u6708\\u540C\\u5929\"", "\"山川異域風月同天\""); | ||||
|     test("utf8", "\"山川異域風月同天\"", NULL); | ||||
|     test("double", "12.34", "12.340000"); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| @@ -1,7 +1,7 @@ | ||||
| #include <msgpack.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| void print(char const* buf, unsigned int len) | ||||
| void print(char const* buf,size_t len) | ||||
| { | ||||
|     size_t i = 0; | ||||
|     for(; i < len ; ++i) | ||||
|   | ||||
							
								
								
									
										17
									
								
								example/cmake/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								example/cmake/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| 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() | ||||
| @@ -37,10 +37,10 @@ FOREACH (source_file ${exec_PROGRAMS}) | ||||
|     ) | ||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|         PRIVATE | ||||
|             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|             $<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 -Werror -g -O3") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|     ENDIF () | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||
| @@ -59,13 +59,13 @@ FOREACH (source_file ${with_pthread_PROGRAMS}) | ||||
|     ) | ||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|         PRIVATE | ||||
|             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|     ) | ||||
|     TARGET_LINK_LIBRARIES (${source_file_we} | ||||
|         ${CMAKE_THREAD_LIBS_INIT} | ||||
|     ) | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|     ENDIF () | ||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||
| @@ -88,7 +88,7 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS}) | ||||
|     ) | ||||
|     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|         PRIVATE | ||||
|             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|             $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|     ) | ||||
|     LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) | ||||
|     TARGET_LINK_LIBRARIES (${source_file_we} | ||||
|   | ||||
| @@ -82,10 +82,11 @@ int main() { | ||||
|         std::stringstream ss; | ||||
|         msgpack::pack(ss, my); | ||||
|  | ||||
|         print(ss.str()); | ||||
|         std::string const& str = ss.str(); | ||||
|         print(str); | ||||
|  | ||||
|         msgpack::object_handle oh = | ||||
|             msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|             msgpack::unpack(str.data(), str.size()); | ||||
|         msgpack::object obj = oh.get(); | ||||
|         std::cout << obj << std::endl; | ||||
|         assert(obj.as<my_class>() == my); | ||||
|   | ||||
| @@ -59,8 +59,9 @@ int main() { | ||||
|  | ||||
|         print(ss.str()); | ||||
|  | ||||
|         std::string const& str = ss.str(); | ||||
|         msgpack::object_handle oh = | ||||
|             msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|             msgpack::unpack(str.data(), str.size()); | ||||
|         msgpack::object obj = oh.get(); | ||||
|         std::cout << obj << std::endl; | ||||
|         assert(obj.as<my_class>() == my); | ||||
|   | ||||
| @@ -100,10 +100,11 @@ int main() { | ||||
|         std::stringstream ss; | ||||
|         msgpack::pack(ss, my); | ||||
|  | ||||
|         print(ss.str()); | ||||
|         std::string const& str = ss.str(); | ||||
|         print(str); | ||||
|  | ||||
|         msgpack::object_handle oh = | ||||
|             msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|             msgpack::unpack(str.data(), str.size()); | ||||
|         msgpack::object obj = oh.get(); | ||||
|         std::cout << obj << std::endl; | ||||
|         assert(obj.as<my_class>() == my); | ||||
|   | ||||
| @@ -71,7 +71,8 @@ int main() { | ||||
|  | ||||
|         print(ss.str()); | ||||
|  | ||||
|         msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|         std::string const& str = ss.str(); | ||||
|         msgpack::object_handle oh = msgpack::unpack(str.data(), str.size()); | ||||
|  | ||||
|         msgpack::object obj = oh.get(); | ||||
|         std::cout << obj << std::endl; | ||||
|   | ||||
| @@ -31,12 +31,13 @@ int main() { | ||||
|     std::size_t offset = 0; | ||||
|  | ||||
|     // msgpack array is constructed on z. | ||||
|     msgpack::object obj = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset); | ||||
|     std::string const& ps = ss.str(); | ||||
|     msgpack::object obj = msgpack::unpack(z, ps.data(), ps.size(), offset); | ||||
|     std::cout << obj << std::endl; | ||||
|     assert(obj.as<std::vector<int> >() == v); | ||||
|  | ||||
|     // msgpack str is constructed on z. | ||||
|     std::string const& str = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset).as<std::string>(); | ||||
|     std::string const& str = msgpack::unpack(z, ps.data(), ps.size(), offset).as<std::string>(); | ||||
|     std::cout << str << std::endl; | ||||
|     assert(str == s); | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| IF (MSGPACK_CXX11) | ||||
| IF (MSGPACK_CXX11 OR MSGPACK_CXX17) | ||||
|     INCLUDE_DIRECTORIES ( | ||||
|         ../include | ||||
|     ) | ||||
| @@ -22,10 +22,10 @@ IF (MSGPACK_CXX11) | ||||
|         ) | ||||
|         TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|             PRIVATE | ||||
|                 $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|                 $<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 -Werror -g -O3 ") | ||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|         ENDIF () | ||||
|  | ||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
|   | ||||
| @@ -37,7 +37,8 @@ void tuple() { | ||||
|     std::stringstream ss; | ||||
|     msgpack::pack(ss, t); | ||||
|  | ||||
|     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|     auto const& str = ss.str(); | ||||
|     auto oh = msgpack::unpack(str.data(), str.size()); | ||||
|     auto obj = oh.get(); | ||||
|  | ||||
|     std::cout << obj << std::endl; | ||||
| @@ -49,7 +50,8 @@ void unordered_map() { | ||||
|     std::stringstream ss; | ||||
|     msgpack::pack(ss, m); | ||||
|  | ||||
|     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|     auto const& str = ss.str(); | ||||
|     auto oh = msgpack::unpack(str.data(), str.size()); | ||||
|     msgpack::object obj = oh.get(); | ||||
|  | ||||
|     std::cout << obj << std::endl; | ||||
| @@ -61,7 +63,8 @@ void unordered_set() { | ||||
|     std::stringstream ss; | ||||
|     msgpack::pack(ss, s); | ||||
|  | ||||
|     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|     auto const& str = ss.str(); | ||||
|     auto oh = msgpack::unpack(str.data(), str.size()); | ||||
|     auto obj = oh.get(); | ||||
|  | ||||
|     std::cout << obj << std::endl; | ||||
| @@ -74,7 +77,8 @@ void forward_list() { | ||||
|     std::stringstream ss; | ||||
|     msgpack::pack(ss, f); | ||||
|  | ||||
|     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||
|     auto const& str = ss.str(); | ||||
|     auto oh = msgpack::unpack(str.data(), str.size()); | ||||
|     auto obj = oh.get(); | ||||
|  | ||||
|     std::cout << obj << std::endl; | ||||
| @@ -98,7 +102,8 @@ void combi() { | ||||
|     std::size_t offset = 0; | ||||
|     std::cout << "offset: " << offset << std::endl; | ||||
|     { | ||||
|         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||
|         auto const& str = ss.str(); | ||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); | ||||
|         auto obj = oh.get(); | ||||
|  | ||||
|         std::cout << obj << std::endl; | ||||
| @@ -106,7 +111,8 @@ void combi() { | ||||
|     } | ||||
|     std::cout << "offset: " << offset << std::endl; | ||||
|     { | ||||
|         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||
|         auto const& str = ss.str(); | ||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); | ||||
|         auto obj = oh.get(); | ||||
|  | ||||
|         std::cout << obj << std::endl; | ||||
| @@ -114,7 +120,8 @@ void combi() { | ||||
|     } | ||||
|     std::cout << "offset: " << offset << std::endl; | ||||
|     { | ||||
|         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||
|         auto const& str = ss.str(); | ||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); | ||||
|         auto obj = oh.get(); | ||||
|  | ||||
|         std::cout << obj << std::endl; | ||||
| @@ -122,7 +129,8 @@ void combi() { | ||||
|     } | ||||
|     std::cout << "offset: " << offset << std::endl; | ||||
|     { | ||||
|         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||
|         auto const& str = ss.str(); | ||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); | ||||
|         auto obj = oh.get(); | ||||
|  | ||||
|         std::cout << obj << std::endl; | ||||
| @@ -130,7 +138,8 @@ void combi() { | ||||
|     } | ||||
|     std::cout << "offset: " << offset << std::endl; | ||||
|     { | ||||
|         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||
|         auto const& str = ss.str(); | ||||
|         auto oh = msgpack::unpack(str.data(), str.size(), offset); | ||||
|         auto obj = oh.get(); | ||||
|  | ||||
|         std::cout << obj << std::endl; | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| IF (MSGPACK_USE_X3_PARSE) | ||||
| IF (MSGPACK_USE_X3_PARSE AND MSGPACK_DEFAULT_API_VERSION VERSION_GREATER 1) | ||||
|     INCLUDE_DIRECTORIES ( | ||||
|         ../include | ||||
|     ) | ||||
| @@ -20,10 +20,10 @@ IF (MSGPACK_USE_X3_PARSE) | ||||
|         ) | ||||
|         TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|             PRIVATE | ||||
|                 $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|                 $<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 -Werror -g ") | ||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|         ENDIF () | ||||
|  | ||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
| @@ -46,7 +46,7 @@ IF (MSGPACK_USE_X3_PARSE) | ||||
|         ) | ||||
|         TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||
|             PRIVATE | ||||
|                 $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|                 $<TARGET_PROPERTY:msgpackc-cxx,INTERFACE_INCLUDE_DIRECTORIES> | ||||
|         ) | ||||
|         TARGET_LINK_LIBRARIES (${source_file_we} | ||||
|             ${Boost_CONTEXT_LIBRARY} | ||||
| @@ -54,7 +54,7 @@ IF (MSGPACK_USE_X3_PARSE) | ||||
|             ${CMAKE_THREAD_LIBS_INIT} | ||||
|         ) | ||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g ") | ||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wall -Wextra") | ||||
|         ENDIF () | ||||
|  | ||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
|   | ||||
							
								
								
									
										2
									
								
								external/boost/predef
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/boost/predef
									
									
									
									
										vendored
									
									
								
							 Submodule external/boost/predef updated: 1e8d1c2cfc...560ff5298e
									
								
							
							
								
								
									
										2
									
								
								external/boost/preprocessor
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/boost/preprocessor
									
									
									
									
										vendored
									
									
								
							 Submodule external/boost/preprocessor updated: c2beb74b90...56090c56b5
									
								
							
							
								
								
									
										43
									
								
								fuzz/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								fuzz/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| 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 () | ||||
							
								
								
									
										50
									
								
								fuzz/regression_runner.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								fuzz/regression_runner.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| #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"))); | ||||
							
								
								
									
										23
									
								
								fuzz/unpack_pack_fuzzer.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								fuzz/unpack_pack_fuzzer.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| #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
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/EmptyArray
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/EmptyArray
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| <EFBFBD> | ||||
							
								
								
									
										1
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/EmptyObject
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/EmptyObject
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| <EFBFBD> | ||||
							
								
								
									
										2
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/ExcessiveNesting
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/ExcessiveNesting
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| <EFBFBD><01><02><03><04><05><06><07><08>	<09> | ||||
| <EFBFBD><0B><0C> | ||||
							
								
								
									
										
											BIN
										
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/OpenWeatherMap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/OpenWeatherMap
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/WeatherUnderground
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								fuzz/unpack_pack_fuzzer_seed_corpus/WeatherUnderground
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -11,7 +11,11 @@ | ||||
| #include "msgpack/iterator.hpp" | ||||
| #include "msgpack/zone.hpp" | ||||
| #include "msgpack/pack.hpp" | ||||
| #include "msgpack/null_visitor.hpp" | ||||
| #include "msgpack/parse.hpp" | ||||
| #include "msgpack/unpack.hpp" | ||||
| #include "msgpack/x3_parse.hpp" | ||||
| #include "msgpack/x3_unpack.hpp" | ||||
| #include "msgpack/sbuffer.hpp" | ||||
| #include "msgpack/vrefbuffer.hpp" | ||||
| #include "msgpack/version.hpp" | ||||
|   | ||||
| @@ -14,5 +14,6 @@ | ||||
|  | ||||
| #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 | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #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 | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #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 | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #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 | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #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 | ||||
|   | ||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp11/chrono.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp11/chrono.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ static resolution routine | ||||
| // | ||||
| // Copyright (C) 2017 KONDO Takatoshi | ||||
| // | ||||
| //    Distributed under the Boost Software License, Version 1.0. | ||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | ||||
| //    http://www.boost.org/LICENSE_1_0.txt) | ||||
| // | ||||
|  | ||||
| #ifndef MSGPACK_TYPE_CPP11_CHRONO_HPP | ||||
| #define MSGPACK_TYPE_CPP11_CHRONO_HPP | ||||
|  | ||||
| #include "msgpack/v1/adaptor/cpp11/chrono.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_CPP11_CHRONO_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp11/timespec.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp11/timespec.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ static resolution routine | ||||
| // | ||||
| // Copyright (C) 2019 KONDO Takatoshi | ||||
| // | ||||
| //    Distributed under the Boost Software License, Version 1.0. | ||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | ||||
| //    http://www.boost.org/LICENSE_1_0.txt) | ||||
| // | ||||
|  | ||||
| #ifndef MSGPACK_TYPE_CPP11_TIMESPEC_HPP | ||||
| #define MSGPACK_TYPE_CPP11_TIMESPEC_HPP | ||||
|  | ||||
| #include "msgpack/v1/adaptor/cpp11/timespec.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_CPP11_TIMESPEC_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp17/byte.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp17/byte.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ static resolution routine | ||||
| // | ||||
| // Copyright (C) 2018 KONDO Takatoshi | ||||
| // | ||||
| //    Distributed under the Boost Software License, Version 1.0. | ||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | ||||
| //    http://www.boost.org/LICENSE_1_0.txt) | ||||
| // | ||||
|  | ||||
| #ifndef MSGPACK_TYPE_CPP17_BYTE_HPP | ||||
| #define MSGPACK_TYPE_CPP17_BYTE_HPP | ||||
|  | ||||
| #include "msgpack/v1/adaptor/cpp17/byte.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_CPP17_BYTE_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp17/carray_byte.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp17/carray_byte.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ static resolution routine | ||||
| // | ||||
| // Copyright (C) 2018 KONDO Takatoshi | ||||
| // | ||||
| //    Distributed under the Boost Software License, Version 1.0. | ||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | ||||
| //    http://www.boost.org/LICENSE_1_0.txt) | ||||
| // | ||||
|  | ||||
| #ifndef MSGPACK_TYPE_CPP17_CARRAY_BYTE_HPP | ||||
| #define MSGPACK_TYPE_CPP17_CARRAY_BYTE_HPP | ||||
|  | ||||
| #include "msgpack/v1/adaptor/cpp17/carray_byte.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_CPP17_CARRAY_BYTE_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp17/vector_byte.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp17/vector_byte.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ static resolution routine | ||||
| // | ||||
| // Copyright (C) 2018 KONDO Takatoshi | ||||
| // | ||||
| //    Distributed under the Boost Software License, Version 1.0. | ||||
| //    (See accompanying file LICENSE_1_0.txt or copy at | ||||
| //    http://www.boost.org/LICENSE_1_0.txt) | ||||
| // | ||||
|  | ||||
| #ifndef MSGPACK_TYPE_CPP17_VECTOR_BYTE_HPP | ||||
| #define MSGPACK_TYPE_CPP17_VECTOR_BYTE_HPP | ||||
|  | ||||
| #include "msgpack/v1/adaptor/cpp17/vector_byte.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_CPP17_VECTOR_BYTE_HPP | ||||
| @@ -27,18 +27,18 @@ | ||||
|  | ||||
| #define MSGPACK_DEFINE_ARRAY(...) \ | ||||
|     template <typename Packer> \ | ||||
|     void msgpack_pack(Packer& pk) const \ | ||||
|     void msgpack_pack(Packer& msgpack_pk) const \ | ||||
|     { \ | ||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ | ||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(msgpack_pk); \ | ||||
|     } \ | ||||
|     void msgpack_unpack(msgpack::object const& o) \ | ||||
|     void msgpack_unpack(msgpack::object const& msgpack_o) \ | ||||
|     { \ | ||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ | ||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(msgpack_o); \ | ||||
|     }\ | ||||
|     template <typename MSGPACK_OBJECT> \ | ||||
|     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ | ||||
|     void msgpack_object(MSGPACK_OBJECT* msgpack_o, msgpack::zone& msgpack_z) const \ | ||||
|     { \ | ||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ | ||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(msgpack_o, msgpack_z); \ | ||||
|     } | ||||
|  | ||||
| #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this))) | ||||
| @@ -62,24 +62,24 @@ | ||||
|  | ||||
| #define MSGPACK_DEFINE_MAP(...) \ | ||||
|     template <typename Packer> \ | ||||
|     void msgpack_pack(Packer& pk) const \ | ||||
|     void msgpack_pack(Packer& msgpack_pk) const \ | ||||
|     { \ | ||||
|         msgpack::type::make_define_map \ | ||||
|             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||
|             .msgpack_pack(pk); \ | ||||
|             .msgpack_pack(msgpack_pk); \ | ||||
|     } \ | ||||
|     void msgpack_unpack(msgpack::object const& o) \ | ||||
|     void msgpack_unpack(msgpack::object const& msgpack_o) \ | ||||
|     { \ | ||||
|         msgpack::type::make_define_map \ | ||||
|             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||
|             .msgpack_unpack(o); \ | ||||
|             .msgpack_unpack(msgpack_o); \ | ||||
|     }\ | ||||
|     template <typename MSGPACK_OBJECT> \ | ||||
|     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ | ||||
|     void msgpack_object(MSGPACK_OBJECT* msgpack_o, msgpack::zone& msgpack_z) const \ | ||||
|     { \ | ||||
|         msgpack::type::make_define_map \ | ||||
|             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||
|             .msgpack_object(o, z); \ | ||||
|             .msgpack_object(msgpack_o, msgpack_z); \ | ||||
|     } | ||||
|  | ||||
| #define MSGPACK_BASE_MAP(base) \ | ||||
| @@ -94,32 +94,32 @@ | ||||
|   namespace adaptor { \ | ||||
|     template<> \ | ||||
|     struct convert<enum_name> { \ | ||||
|       msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const { \ | ||||
|       msgpack::object const& operator()(msgpack::object const& msgpack_o, enum_name& msgpack_v) const { \ | ||||
|         msgpack::underlying_type<enum_name>::type tmp; \ | ||||
|         msgpack::operator>>(o, tmp);                   \ | ||||
|         v = static_cast<enum_name>(tmp);   \ | ||||
|         return o; \ | ||||
|         msgpack::operator>>(msgpack_o, tmp);                   \ | ||||
|         msgpack_v = static_cast<enum_name>(tmp);   \ | ||||
|         return msgpack_o; \ | ||||
|       } \ | ||||
|     }; \ | ||||
|     template<> \ | ||||
|     struct object<enum_name> { \ | ||||
|       void operator()(msgpack::object& o, const enum_name& v) const { \ | ||||
|         msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(v); \ | ||||
|         msgpack::operator<<(o, tmp);                                    \ | ||||
|       void operator()(msgpack::object& msgpack_o, const enum_name& msgpack_v) const { \ | ||||
|         msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(msgpack_v); \ | ||||
|         msgpack::operator<<(msgpack_o, tmp);                                    \ | ||||
|       } \ | ||||
|     }; \ | ||||
|     template<> \ | ||||
|     struct object_with_zone<enum_name> { \ | ||||
|       void operator()(msgpack::object::with_zone& o, const enum_name& v) const {  \ | ||||
|         msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(v); \ | ||||
|         msgpack::operator<<(o, tmp);                                    \ | ||||
|       void operator()(msgpack::object::with_zone& msgpack_o, const enum_name& msgpack_v) const {  \ | ||||
|         msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(msgpack_v); \ | ||||
|         msgpack::operator<<(msgpack_o, tmp);                                    \ | ||||
|       } \ | ||||
|     }; \ | ||||
|     template <> \ | ||||
|     struct pack<enum_name> { \ | ||||
|       template <typename Stream> \ | ||||
|       msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \ | ||||
|           return msgpack::operator<<(o, static_cast<msgpack::underlying_type<enum_name>::type>(v)); \ | ||||
|       msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& msgpack_o, const enum_name& msgpack_v) const { \ | ||||
|           return msgpack::operator<<(msgpack_o, static_cast<msgpack::underlying_type<enum_name>::type>(msgpack_v)); \ | ||||
|       } \ | ||||
|     }; \ | ||||
|   } \ | ||||
| @@ -139,5 +139,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/define_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/define_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/define_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_DEFINE_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/ext_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/ext_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/ext_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_EXT_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/fixint_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/fixint_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/fixint_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_FIXINT_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/int_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/int_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/int_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_INT_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/map_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/map_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/map_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_MAP_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/msgpack_tuple_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/msgpack_tuple_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_MSGPACK_TUPLE_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/nil_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/nil_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/nil_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_NIL_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/raw_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/raw_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/raw_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_RAW_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/size_equal_only_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/size_equal_only_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/size_equal_only_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_SIZE_EQUAL_ONLY_DECL_HPP | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/adaptor/v4raw_decl.hpp" | ||||
| #include "msgpack/v2/adaptor/v4raw_decl.hpp" | ||||
| #include "msgpack/v3/adaptor/v4raw_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_V4RAW_DECL_HPP | ||||
|   | ||||
							
								
								
									
										15
									
								
								include/msgpack/adaptor/wstring.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/msgpack/adaptor/wstring.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| // | ||||
| // MessagePack for C++ static resolution routine | ||||
| // | ||||
| // Copyright (C) 2018 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_WSTRING_HPP | ||||
| #define MSGPACK_TYPE_WSTRING_HPP | ||||
|  | ||||
| #include "msgpack/v1/adaptor/wstring.hpp" | ||||
|  | ||||
| #endif // MSGPACK_TYPE_WSTRING_HPP | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/cpp_config_decl.hpp" | ||||
| #include "msgpack/v2/cpp_config_decl.hpp" | ||||
| #include "msgpack/v3/cpp_config_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_CPP_CONFIG_DECL_HPP | ||||
|   | ||||
							
								
								
									
										17
									
								
								include/msgpack/create_object_visitor.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								include/msgpack/create_object_visitor.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // | ||||
| // MessagePack for C++ deserializing routine | ||||
| // | ||||
| // Copyright (C) 2018 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_CREATE_OBJECT_VISITOR_HPP | ||||
| #define MSGPACK_CREATE_OBJECT_VISITOR_HPP | ||||
|  | ||||
| #include "msgpack/create_object_visitor_decl.hpp" | ||||
|  | ||||
| #include "msgpack/v2/create_object_visitor.hpp" | ||||
|  | ||||
| #endif // MSGPACK_CREATE_OBJECT_VISITOR_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/create_object_visitor_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/create_object_visitor_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ deserializing routine | ||||
| // | ||||
| // Copyright (C) 2018 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_CREATE_OBJECT_VISITOR_DECL_HPP | ||||
| #define MSGPACK_CREATE_OBJECT_VISITOR_DECL_HPP | ||||
|  | ||||
| #include "msgpack/v2/create_object_visitor_decl.hpp" | ||||
| #include "msgpack/v3/create_object_visitor_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_CREATE_OBJECT_VISITOR_DECL_HPP | ||||
| @@ -25,7 +25,7 @@ extern "C" { | ||||
|  | ||||
| static inline int msgpack_fbuffer_write(void* data, const char* buf, size_t len) | ||||
| { | ||||
|     return (len == fwrite(buf, len, 1, (FILE *)data)) ? 0 : -1; | ||||
|     return (1 == fwrite(buf, len, 1, (FILE *)data)) ? 0 : -1; | ||||
| } | ||||
|  | ||||
| /** @} */ | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/fbuffer_decl.hpp" | ||||
| #include "msgpack/v2/fbuffer_decl.hpp" | ||||
| #include "msgpack/v3/fbuffer_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_FBUFFER_DECL_HPP | ||||
|   | ||||
| @@ -13,5 +13,6 @@ | ||||
|  | ||||
| #include <msgpack/v1/iterator_decl.hpp> | ||||
| #include <msgpack/v2/iterator_decl.hpp> | ||||
| #include <msgpack/v3/iterator_decl.hpp> | ||||
|  | ||||
| #endif // MSGPACK_V1_ITERATOR_DECL_HPP | ||||
| #endif // MSGPACK_ITERATOR_DECL_HPP | ||||
|   | ||||
| @@ -13,5 +13,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/meta_decl.hpp" | ||||
| #include "msgpack/v2/meta_decl.hpp" | ||||
| #include "msgpack/v3/meta_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_META_DECL_HPP | ||||
|   | ||||
							
								
								
									
										17
									
								
								include/msgpack/null_visitor.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								include/msgpack/null_visitor.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // | ||||
| // MessagePack for C++ deserializing routine | ||||
| // | ||||
| // Copyright (C) 2018 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_NULL_VISITOR_HPP | ||||
| #define MSGPACK_NULL_VISITOR_HPP | ||||
|  | ||||
| #include "msgpack/null_visitor_decl.hpp" | ||||
|  | ||||
| #include "msgpack/v2/null_visitor.hpp" | ||||
|  | ||||
| #endif // MSGPACK_NULL_VISITOR_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/null_visitor_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/null_visitor_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ deserializing routine | ||||
| // | ||||
| // Copyright (C) 2018 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_NULL_VISITOR_DECL_HPP | ||||
| #define MSGPACK_NULL_VISITOR_DECL_HPP | ||||
|  | ||||
| #include "msgpack/v2/null_visitor_decl.hpp" | ||||
| #include "msgpack/v3/null_visitor_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_NULL_VISITOR_DECL_HPP | ||||
| @@ -97,8 +97,10 @@ typedef struct msgpack_object_kv { | ||||
|     msgpack_object val; | ||||
| } msgpack_object_kv; | ||||
|  | ||||
| #if !defined(_KERNEL_MODE) | ||||
| MSGPACK_DLLEXPORT | ||||
| void msgpack_object_print(FILE* out, msgpack_object o); | ||||
| #endif | ||||
|  | ||||
| MSGPACK_DLLEXPORT | ||||
| int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o); | ||||
|   | ||||
| @@ -13,5 +13,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/object_decl.hpp" | ||||
| #include "msgpack/v2/object_decl.hpp" | ||||
| #include "msgpack/v3/object_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_OBJECT_DECL_HPP | ||||
|   | ||||
| @@ -15,5 +15,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/object_fwd.hpp" | ||||
| #include "msgpack/v2/object_fwd.hpp" | ||||
| #include "msgpack/v3/object_fwd.hpp" | ||||
|  | ||||
| #endif // MSGPACK_OBJECT_FWD_HPP | ||||
|   | ||||
| @@ -13,5 +13,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/object_fwd_decl.hpp" | ||||
| #include "msgpack/v2/object_fwd_decl.hpp" | ||||
| #include "msgpack/v3/object_fwd_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_OBJECT_FWD_DECL_HPP | ||||
|   | ||||
| @@ -12,6 +12,7 @@ | ||||
|  | ||||
| #include "pack_define.h" | ||||
| #include "object.h" | ||||
| #include "timestamp.h" | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| @@ -88,16 +89,22 @@ static int msgpack_pack_map(msgpack_packer* pk, size_t n); | ||||
|  | ||||
| static int msgpack_pack_str(msgpack_packer* pk, size_t l); | ||||
| static int msgpack_pack_str_body(msgpack_packer* pk, const void* b, size_t l); | ||||
| static int msgpack_pack_str_with_body(msgpack_packer* pk, const void* b, size_t l); | ||||
|  | ||||
| static int msgpack_pack_v4raw(msgpack_packer* pk, size_t l); | ||||
| static int msgpack_pack_v4raw_body(msgpack_packer* pk, const void* b, size_t l); | ||||
|  | ||||
| static int msgpack_pack_bin(msgpack_packer* pk, size_t l); | ||||
| static int msgpack_pack_bin_body(msgpack_packer* pk, const void* b, size_t l); | ||||
| static int msgpack_pack_bin_with_body(msgpack_packer* pk, const void* b, size_t l); | ||||
|  | ||||
| static int msgpack_pack_ext(msgpack_packer* pk, size_t l, int8_t type); | ||||
| static int msgpack_pack_ext_body(msgpack_packer* pk, const void* b, size_t l); | ||||
| static int msgpack_pack_ext_with_body(msgpack_packer* pk, const void* b, size_t l, int8_t type); | ||||
|  | ||||
| static int msgpack_pack_timestamp(msgpack_packer* pk, const msgpack_timestamp* d); | ||||
|  | ||||
| MSGPACK_DLLEXPORT | ||||
| int msgpack_pack_object(msgpack_packer* pk, msgpack_object d); | ||||
|  | ||||
|  | ||||
| @@ -139,6 +146,26 @@ inline void msgpack_packer_free(msgpack_packer* pk) | ||||
|     free(pk); | ||||
| } | ||||
|  | ||||
| inline int msgpack_pack_str_with_body(msgpack_packer* pk, const void* b, size_t l) | ||||
|  { | ||||
|      int ret = msgpack_pack_str(pk, l); | ||||
|      if (ret != 0) { return ret; } | ||||
|      return msgpack_pack_str_body(pk, b, l); | ||||
|  } | ||||
|  | ||||
|  inline int msgpack_pack_bin_with_body(msgpack_packer* pk, const void* b, size_t l) | ||||
|  { | ||||
|      int ret = msgpack_pack_bin(pk, l); | ||||
|      if (ret != 0) { return ret; } | ||||
|      return msgpack_pack_bin_body(pk, b, l); | ||||
|  } | ||||
|  | ||||
|  inline int msgpack_pack_ext_with_body(msgpack_packer* pk, const void* b, size_t l, int8_t type) | ||||
|  { | ||||
|      int ret = msgpack_pack_ext(pk, l, type); | ||||
|      if (ret != 0) { return ret; } | ||||
|      return msgpack_pack_ext_body(pk, b, l); | ||||
|  } | ||||
|   | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|   | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/pack_decl.hpp" | ||||
| #include "msgpack/v2/pack_decl.hpp" | ||||
| #include "msgpack/v3/pack_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_PACK_DECL_HPP | ||||
|   | ||||
| @@ -34,6 +34,10 @@ | ||||
| #error msgpack_pack_append_buffer callback is not defined | ||||
| #endif | ||||
|  | ||||
| #if defined(_MSC_VER) | ||||
| #   pragma warning(push) | ||||
| #   pragma warning(disable : 4204)   /* nonstandard extension used: non-constant aggregate initializer */ | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Integer | ||||
| @@ -834,31 +838,31 @@ msgpack_pack_inline_func(_ext)(msgpack_pack_user x, size_t l, int8_t type) | ||||
|     case 1: { | ||||
|         unsigned char buf[2]; | ||||
|         buf[0] = 0xd4; | ||||
|         buf[1] = type; | ||||
|         buf[1] = (unsigned char)type; | ||||
|         msgpack_pack_append_buffer(x, buf, 2); | ||||
|     } break; | ||||
|     case 2: { | ||||
|         unsigned char buf[2]; | ||||
|         buf[0] = 0xd5; | ||||
|         buf[1] = type; | ||||
|         buf[1] = (unsigned char)type; | ||||
|         msgpack_pack_append_buffer(x, buf, 2); | ||||
|     } break; | ||||
|     case 4: { | ||||
|         unsigned char buf[2]; | ||||
|         buf[0] = 0xd6; | ||||
|         buf[1] = type; | ||||
|         buf[1] = (unsigned char)type; | ||||
|         msgpack_pack_append_buffer(x, buf, 2); | ||||
|     } break; | ||||
|     case 8: { | ||||
|         unsigned char buf[2]; | ||||
|         buf[0] = 0xd7; | ||||
|         buf[1] = type; | ||||
|         buf[1] = (unsigned char)type; | ||||
|         msgpack_pack_append_buffer(x, buf, 2); | ||||
|     } break; | ||||
|     case 16: { | ||||
|         unsigned char buf[2]; | ||||
|         buf[0] = 0xd8; | ||||
|         buf[1] = type; | ||||
|         buf[1] = (unsigned char)type; | ||||
|         msgpack_pack_append_buffer(x, buf, 2); | ||||
|     } break; | ||||
|     default: | ||||
| @@ -866,19 +870,19 @@ msgpack_pack_inline_func(_ext)(msgpack_pack_user x, size_t l, int8_t type) | ||||
|             unsigned char buf[3]; | ||||
|             buf[0] = 0xc7; | ||||
|             buf[1] = (unsigned char)l; | ||||
|             buf[2] = type; | ||||
|             buf[2] = (unsigned char)type; | ||||
|             msgpack_pack_append_buffer(x, buf, 3); | ||||
|         } else if(l < 65536) { | ||||
|             unsigned char buf[4]; | ||||
|             buf[0] = 0xc8; | ||||
|             _msgpack_store16(&buf[1], l); | ||||
|             buf[3] = type; | ||||
|             buf[3] = (unsigned char)type; | ||||
|             msgpack_pack_append_buffer(x, buf, 4); | ||||
|         } else { | ||||
|             unsigned char buf[6]; | ||||
|             buf[0] = 0xc9; | ||||
|             _msgpack_store32(&buf[1], l); | ||||
|             buf[5] = type; | ||||
|             buf[5] = (unsigned char)type; | ||||
|             msgpack_pack_append_buffer(x, buf, 6); | ||||
|         } | ||||
|         break; | ||||
| @@ -890,6 +894,34 @@ msgpack_pack_inline_func(_ext_body)(msgpack_pack_user x, const void* b, size_t l | ||||
|     msgpack_pack_append_buffer(x, (const unsigned char*)b, l); | ||||
| } | ||||
|  | ||||
| msgpack_pack_inline_func(_timestamp)(msgpack_pack_user x, const msgpack_timestamp* d) | ||||
| { | ||||
|     if ((((int64_t)d->tv_sec) >> 34) == 0) { | ||||
|         uint64_t data64 = ((uint64_t) d->tv_nsec << 34) | (uint64_t)d->tv_sec; | ||||
|         if ((data64 & 0xffffffff00000000L) == 0)   { | ||||
|             // timestamp 32 | ||||
|             char buf[4]; | ||||
|             uint32_t data32 = (uint32_t)data64; | ||||
|             msgpack_pack_ext(x, 4, -1); | ||||
|             _msgpack_store32(buf, data32); | ||||
|             msgpack_pack_append_buffer(x, buf, 4); | ||||
|         } else { | ||||
|             // timestamp 64 | ||||
|             char buf[8]; | ||||
|             msgpack_pack_ext(x, 8, -1); | ||||
|             _msgpack_store64(buf, data64); | ||||
|             msgpack_pack_append_buffer(x, buf, 8); | ||||
|         } | ||||
|     } else  { | ||||
|         // timestamp 96 | ||||
|         char buf[12]; | ||||
|         _msgpack_store32(&buf[0], d->tv_nsec); | ||||
|         _msgpack_store64(&buf[4], d->tv_sec); | ||||
|         msgpack_pack_ext(x, 12, -1); | ||||
|         msgpack_pack_append_buffer(x, buf, 12); | ||||
|     } | ||||
| } | ||||
|  | ||||
| #undef msgpack_pack_inline_func | ||||
| #undef msgpack_pack_user | ||||
| #undef msgpack_pack_append_buffer | ||||
| @@ -907,3 +939,7 @@ msgpack_pack_inline_func(_ext_body)(msgpack_pack_user x, const void* b, size_t l | ||||
| #undef msgpack_pack_real_int16 | ||||
| #undef msgpack_pack_real_int32 | ||||
| #undef msgpack_pack_real_int64 | ||||
|  | ||||
| #if defined(_MSC_VER) | ||||
| #   pragma warning(pop) | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										18
									
								
								include/msgpack/parse.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								include/msgpack/parse.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| // | ||||
| // MessagePack for C++ deserializing routine | ||||
| // | ||||
| // Copyright (C) 2018 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_PARSE_HPP | ||||
| #define MSGPACK_PARSE_HPP | ||||
|  | ||||
| #include "msgpack/parse_decl.hpp" | ||||
|  | ||||
| #include "msgpack/v2/parse.hpp" | ||||
| #include "msgpack/v3/parse.hpp" | ||||
|  | ||||
| #endif // MSGPACK_PARSE_HPP | ||||
							
								
								
									
										16
									
								
								include/msgpack/parse_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/parse_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // | ||||
| // MessagePack for C++ deserializing routine | ||||
| // | ||||
| // Copyright (C) 2018 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_PARSE_DECL_HPP | ||||
| #define MSGPACK_PARSE_DECL_HPP | ||||
|  | ||||
| #include "msgpack/v2/parse_decl.hpp" | ||||
| #include "msgpack/v3/parse_decl.hpp" | ||||
|  | ||||
| #endif // MSGPACK_PARSE_DECL_HPP | ||||
| @@ -12,5 +12,6 @@ | ||||
|  | ||||
| #include "msgpack/v1/parse_return.hpp" | ||||
| #include "msgpack/v2/parse_return.hpp" | ||||
| #include "msgpack/v3/parse_return.hpp" | ||||
|  | ||||
| #endif // MSGPACK_PARSE_RETURN_HPP | ||||
|   | ||||
| @@ -19,6 +19,7 @@ http://www.boost.org/LICENSE_1_0.txt) | ||||
| #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> | ||||
|   | ||||
| @@ -27,11 +27,14 @@ http://www.boost.org/LICENSE_1_0.txt) | ||||
|     [[`__TARGET_ARCH_ARM`] [__predef_detection__]] | ||||
|     [[`__TARGET_ARCH_THUMB`] [__predef_detection__]] | ||||
|     [[`_M_ARM`] [__predef_detection__]] | ||||
|     [[`_M_ARM64`] [__predef_detection__]] | ||||
|  | ||||
|     [[`__arm64`] [8.0.0]] | ||||
|     [[`__TARGET_ARCH_ARM`] [V.0.0]] | ||||
|     [[`__TARGET_ARCH_THUMB`] [V.0.0]] | ||||
|     [[`__ARM_ARCH`] [V.0.0]] | ||||
|     [[`_M_ARM`] [V.0.0]] | ||||
|     [[`_M_ARM64`] [8.0.0]] | ||||
|     ] | ||||
|  */ | ||||
|  | ||||
| @@ -39,7 +42,8 @@ http://www.boost.org/LICENSE_1_0.txt) | ||||
|  | ||||
| #if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \ | ||||
|     defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \ | ||||
|     defined(_M_ARM) | ||||
|     defined(__ARM_ARCH) || \ | ||||
|     defined(_M_ARM) || defined(_M_ARM64) | ||||
| #   undef MSGPACK_ARCH_ARM | ||||
| #   if !defined(MSGPACK_ARCH_ARM) && defined(__arm64) | ||||
| #       define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(8,0,0) | ||||
| @@ -50,6 +54,12 @@ http://www.boost.org/LICENSE_1_0.txt) | ||||
| #   if !defined(MSGPACK_ARCH_ARM) && defined(__TARGET_ARCH_THUMB) | ||||
| #       define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0) | ||||
| #   endif | ||||
| #   if !defined(MSGPACK_ARCH_ARM) && defined(__ARM_ARCH) | ||||
| #       define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(__ARM_ARCH,0,0) | ||||
| #   endif | ||||
| #   if !defined(MSGPACK_ARCH_ARM) && defined(_M_ARM64) | ||||
| #       define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(8,0,0) | ||||
| #   endif | ||||
| #   if !defined(MSGPACK_ARCH_ARM) && defined(_M_ARM) | ||||
| #       define MSGPACK_ARCH_ARM MSGPACK_VERSION_NUMBER(_M_ARM,0,0) | ||||
| #   endif | ||||
|   | ||||
| @@ -12,7 +12,7 @@ http://www.boost.org/LICENSE_1_0.txt) | ||||
| #include <msgpack/predef/make.h> | ||||
|  | ||||
| /*` | ||||
| [heading `MSGPACK_ARCH_PARISK`] | ||||
| [heading `MSGPACK_ARCH_PARISC`] | ||||
|  | ||||
| [@http://en.wikipedia.org/wiki/PA-RISC_family HP/PA RISC] architecture. | ||||
|  | ||||
|   | ||||
							
								
								
									
										44
									
								
								include/msgpack/predef/architecture/ptx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								include/msgpack/predef/architecture/ptx.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| /* | ||||
| Copyright Benjamin Worpitz 2018 | ||||
| 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_PREDEF_ARCHITECTURE_PTX_H | ||||
| #define MSGPACK_PREDEF_ARCHITECTURE_PTX_H | ||||
|  | ||||
| #include <msgpack/predef/version_number.h> | ||||
| #include <msgpack/predef/make.h> | ||||
|  | ||||
| /*` | ||||
| [heading `MSGPACK_ARCH_PTX`] | ||||
|  | ||||
| [@https://en.wikipedia.org/wiki/Parallel_Thread_Execution PTX] architecture. | ||||
|  | ||||
| [table | ||||
|     [[__predef_symbol__] [__predef_version__]] | ||||
|  | ||||
|     [[`__CUDA_ARCH__`] [__predef_detection__]] | ||||
|  | ||||
|     [[`__CUDA_ARCH__`] [V.R.0]] | ||||
|     ] | ||||
|  */ | ||||
|  | ||||
| #define MSGPACK_ARCH_PTX MSGPACK_VERSION_NUMBER_NOT_AVAILABLE | ||||
|  | ||||
| #if defined(__CUDA_ARCH__) | ||||
| #   undef MSGPACK_ARCH_PTX | ||||
| #   define MSGPACK_ARCH_PTX MSGPACK_PREDEF_MAKE_10_VR0(__CUDA_ARCH__) | ||||
| #endif | ||||
|  | ||||
| #if MSGPACK_ARCH_PTX | ||||
| #   define MSGPACK_ARCH_PTX_AVAILABLE | ||||
| #endif | ||||
|  | ||||
| #define MSGPACK_ARCH_PTX_NAME "PTX" | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #include <msgpack/predef/detail/test.h> | ||||
| MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_ARCH_PTX,MSGPACK_ARCH_PTX_NAME) | ||||
| @@ -32,6 +32,7 @@ http://www.boost.org/LICENSE_1_0.txt) | ||||
| #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> | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
| Copyright Rene Rivera 2008-2015 | ||||
| Copyright Rene Rivera 2008-2017 | ||||
| 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) | ||||
| @@ -25,7 +25,8 @@ Version number available as major, minor, and patch. | ||||
|     [[`__ICC`] [__predef_detection__]] | ||||
|     [[`__ECC`] [__predef_detection__]] | ||||
|  | ||||
|     [[`__INTEL_COMPILER`] [V.R.P]] | ||||
|     [[`__INTEL_COMPILER`] [V.R]] | ||||
|     [[`__INTEL_COMPILER` and `__INTEL_COMPILER_UPDATE`] [V.R.P]] | ||||
|     ] | ||||
|  */ | ||||
|  | ||||
| @@ -33,8 +34,21 @@ Version number available as major, minor, and patch. | ||||
|  | ||||
| #if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \ | ||||
|     defined(__ECC) | ||||
| /*` | ||||
| [note Because of an Intel mistake in the release version numbering when | ||||
| `__INTEL_COMPILER` is `9999` it is detected as version 12.1.0.] | ||||
|  */ | ||||
| #   if !defined(MSGPACK_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 9999) | ||||
| #       define MSGPACK_COMP_INTEL_DETECTION MSGPACK_VERSION_NUMBER(12,1,0) | ||||
| #   endif | ||||
| #   if !defined(MSGPACK_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) | ||||
| #       define MSGPACK_COMP_INTEL_DETECTION MSGPACK_VERSION_NUMBER( \ | ||||
|             MSGPACK_VERSION_NUMBER_MAJOR(MSGPACK_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \ | ||||
|             MSGPACK_VERSION_NUMBER_MINOR(MSGPACK_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \ | ||||
|             __INTEL_COMPILER_UPDATE) | ||||
| #   endif | ||||
| #   if !defined(MSGPACK_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) | ||||
| #       define MSGPACK_COMP_INTEL_DETECTION MSGPACK_PREDEF_MAKE_10_VRP(__INTEL_COMPILER) | ||||
| #       define MSGPACK_COMP_INTEL_DETECTION MSGPACK_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER) | ||||
| #   endif | ||||
| #   if !defined(MSGPACK_COMP_INTEL_DETECTION) | ||||
| #       define MSGPACK_COMP_INTEL_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE | ||||
|   | ||||
							
								
								
									
										60
									
								
								include/msgpack/predef/compiler/nvcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								include/msgpack/predef/compiler/nvcc.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| /* | ||||
| Copyright Benjamin Worpitz 2018 | ||||
| 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_PREDEF_COMPILER_NVCC_H | ||||
| #define MSGPACK_PREDEF_COMPILER_NVCC_H | ||||
|  | ||||
| #include <msgpack/predef/version_number.h> | ||||
| #include <msgpack/predef/make.h> | ||||
|  | ||||
| /*` | ||||
| [heading `MSGPACK_COMP_NVCC`] | ||||
|  | ||||
| [@https://en.wikipedia.org/wiki/NVIDIA_CUDA_Compiler NVCC] compiler. | ||||
| Version number available as major, minor, and patch beginning with version 7.5. | ||||
|  | ||||
| [table | ||||
|     [[__predef_symbol__] [__predef_version__]] | ||||
|  | ||||
|     [[`__NVCC__`] [__predef_detection__]] | ||||
|  | ||||
|     [[`__CUDACC_VER_MAJOR__`, `__CUDACC_VER_MINOR__`, `__CUDACC_VER_BUILD__`] [V.R.P]] | ||||
|     ] | ||||
|  */ | ||||
|  | ||||
| #define MSGPACK_COMP_NVCC MSGPACK_VERSION_NUMBER_NOT_AVAILABLE | ||||
|  | ||||
| #if defined(__NVCC__) | ||||
| #   if !defined(__CUDACC_VER_MAJOR__) || !defined(__CUDACC_VER_MINOR__) || !defined(__CUDACC_VER_BUILD__) | ||||
| #       define MSGPACK_COMP_NVCC_DETECTION MSGPACK_VERSION_NUMBER_AVAILABLE | ||||
| #   else | ||||
| #       define MSGPACK_COMP_NVCC_DETECTION MSGPACK_VERSION_NUMBER(__CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDACC_VER_BUILD__) | ||||
| #   endif | ||||
| #endif | ||||
|  | ||||
| #ifdef MSGPACK_COMP_NVCC_DETECTION | ||||
| #   if defined(MSGPACK_PREDEF_DETAIL_COMP_DETECTED) | ||||
| #       define MSGPACK_COMP_NVCC_EMULATED MSGPACK_COMP_NVCC_DETECTION | ||||
| #   else | ||||
| #       undef MSGPACK_COMP_NVCC | ||||
| #       define MSGPACK_COMP_NVCC MSGPACK_COMP_NVCC_DETECTION | ||||
| #   endif | ||||
| #   define MSGPACK_COMP_NVCC_AVAILABLE | ||||
| #   include <msgpack/predef/detail/comp_detected.h> | ||||
| #endif | ||||
|  | ||||
| #define MSGPACK_COMP_NVCC_NAME "NVCC" | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #include <msgpack/predef/detail/test.h> | ||||
| MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_NVCC,MSGPACK_COMP_NVCC_NAME) | ||||
|  | ||||
| #ifdef MSGPACK_COMP_NVCC_EMULATED | ||||
| #include <msgpack/predef/detail/test.h> | ||||
| MSGPACK_PREDEF_DECLARE_TEST(MSGPACK_COMP_NVCC_EMULATED,MSGPACK_COMP_NVCC_NAME) | ||||
| #endif | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user