mirror of
				https://github.com/msgpack/msgpack-c.git
				synced 2025-10-22 08:02:08 +02:00 
			
		
		
		
	Compare commits
	
		
			321 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 7c67109396 | ||
|   | fd4e28f23d | ||
|   | 2098062613 | ||
|   | 22bc707035 | ||
|   | 7ad743f2da | ||
|   | 315bbd4b40 | ||
|   | 288a6b2e31 | ||
|   | a0e4294b5a | ||
|   | 64baa15f8e | ||
|   | 354ee5b9a3 | ||
|   | 2ddd79499c | ||
|   | 7f0614e998 | ||
|   | 150d74508e | ||
|   | 8674c821c4 | ||
|   | 10be66712d | ||
|   | 2698cfc254 | ||
|   | 333ee98ab2 | ||
|   | 156e315394 | ||
|   | 01fedf847b | ||
|   | 56db4475f2 | ||
|   | f065c2a447 | ||
|   | ba4d8df63e | ||
|   | c00584281f | ||
|   | 45a0124ede | ||
|   | ceb27348bd | ||
|   | 1ad737ee08 | ||
|   | 7024a1ec2c | ||
|   | ca4a425a52 | ||
|   | a502097fd0 | ||
|   | 6b99a0c8b7 | ||
|   | 1a3fcc3a22 | ||
|   | 111739f8ce | ||
|   | f638e2186b | ||
|   | 002376c678 | ||
|   | 09a2f81b5f | ||
|   | ffcaaeb482 | ||
|   | bd511a4bd1 | ||
|   | 684c5e0bb0 | ||
|   | 8e74449181 | ||
|   | f2b788e51f | ||
|   | 7214b4c73f | ||
|   | a7a78bde9b | ||
|   | c50fbe4ce9 | ||
|   | d7d28b6f24 | ||
|   | 5ebed34376 | ||
|   | 6871a82af7 | ||
|   | 3f79968910 | ||
|   | 2e10adabb1 | ||
|   | 0411ef85e7 | ||
|   | 28b6ee0db0 | ||
|   | 3d0fa6043c | ||
|   | ee169c4eb5 | ||
|   | 0aaf95608f | ||
|   | 918e7edba4 | ||
|   | 88338195c0 | ||
|   | e90231c865 | ||
|   | 15d8bb6792 | ||
|   | 20ef1f925b | ||
|   | 89b8f4ee13 | ||
|   | 304ff96d04 | ||
|   | 10c1917f22 | ||
|   | d85e731ab4 | ||
|   | d431e25257 | ||
|   | 3d82c2d651 | ||
|   | 2cbaa3a7db | ||
|   | bfc6e45a2f | ||
|   | e8fa6c1aee | ||
|   | d49bec4e11 | ||
|   | 004939e732 | ||
|   | 09e8833d53 | ||
|   | 9ed842c014 | ||
|   | 99c4d37a39 | ||
|   | 4df2bdecda | ||
|   | 597cd63121 | ||
|   | a51f33c02f | ||
|   | 88032f37e1 | ||
|   | a76911a72c | ||
|   | 1bc27d72cc | ||
|   | a6599e5fb4 | ||
|   | 791f55da35 | ||
|   | e58b00016b | ||
|   | b4fe698777 | ||
|   | e89045cfcd | ||
|   | c6e6dbc608 | ||
|   | e271cf2aed | ||
|   | 53e4bb92fe | ||
|   | 303c1000c2 | ||
|   | 088ce946b9 | ||
|   | dc86adbf8e | ||
|   | ad0cae30ad | ||
|   | bf3e2abc9e | ||
|   | b7543e1386 | ||
|   | 1f515b3ae7 | ||
|   | a933fa5892 | ||
|   | a07622c276 | ||
|   | c955727d8c | ||
|   | 094b70213a | ||
|   | c0bf8b3aff | ||
|   | 5be2757216 | ||
|   | c6c31dc5cd | ||
|   | c704d4bfab | ||
|   | 4466bda819 | ||
|   | 4623654996 | ||
|   | 84ad9a2634 | ||
|   | 9b141fa9b6 | ||
|   | 6a1fa2e0fc | ||
|   | c55f778198 | ||
|   | b4f2acb945 | ||
|   | 7e139125e2 | ||
|   | 9d37316b44 | ||
|   | 364fc0daf6 | ||
|   | f24201f71f | ||
|   | 9a113bb0ca | ||
|   | 2674e34769 | ||
|   | c5c3de8f61 | ||
|   | 0b7cabd322 | ||
|   | 22780a6808 | ||
|   | 4ec0fdf207 | ||
|   | 85a0404d8c | ||
|   | ce67c8ed35 | ||
|   | 1893a8e31e | ||
|   | dc8c253577 | ||
|   | 9c77a0f24a | ||
|   | 61c053d37e | ||
|   | 04b549a46b | ||
|   | 4a1db60af8 | ||
|   | 55b51c506f | ||
|   | a97c00e463 | ||
|   | e61cd76310 | ||
|   | c30962da25 | ||
|   | 6b7becdef0 | ||
|   | cfa1ab38cc | ||
|   | 2f34d22bf5 | ||
|   | 401460b7d9 | ||
|   | 03b770fdf2 | ||
|   | d3cd07987b | ||
|   | b4786711df | ||
|   | ccc9ac5538 | ||
|   | 1df97bc37b | ||
|   | 8d09b7090d | ||
|   | 2a7335ae90 | ||
|   | e7eae65ab7 | ||
|   | 4e663609ca | ||
|   | 98820ec6c7 | ||
|   | baea172cc9 | ||
|   | e9e31a2899 | ||
|   | 8ffb619031 | ||
|   | a3ed6274c2 | ||
|   | f795e5d568 | ||
|   | 87ff7e4ccc | ||
|   | da46fb1ef7 | ||
|   | b90bcf3c11 | ||
|   | c1f19c0e47 | ||
|   | d9a77e220a | ||
|   | 894547582b | ||
|   | 3a87cc8826 | ||
|   | 6177038fcf | ||
|   | 25259dc705 | ||
|   | 5d69c22bf9 | ||
|   | a9caff538e | ||
|   | 9a2bb0c972 | ||
|   | 7191a3b014 | ||
|   | b82b58f184 | ||
|   | 73af452ed8 | ||
|   | 95b31d0d16 | ||
|   | c73d9a9dab | ||
|   | 0164c1efe2 | ||
|   | 48abfe7aa1 | ||
|   | 8105c33f9d | ||
|   | 237cf888d8 | ||
|   | b9bc9d4195 | ||
|   | aa790ba785 | ||
|   | 1da0539a00 | ||
|   | d7a656523b | ||
|   | f573fd6a26 | ||
|   | 4fa661a63d | ||
|   | 2e4de8b65c | ||
|   | 42181289ed | ||
|   | cd84d04860 | ||
|   | 0d1e1787de | ||
|   | 45b8d29cc0 | ||
|   | 0bfe4c49b7 | ||
|   | 3c997edd71 | ||
|   | 523e986077 | ||
|   | 90c2e35694 | ||
|   | 4ffdc01135 | ||
|   | b398ce9acc | ||
|   | 1b87018a0a | ||
|   | 755342bb25 | ||
|   | 438c4ff8ca | ||
|   | 20e777c1fa | ||
|   | 3f98327f3b | ||
|   | 224a830ce0 | ||
|   | b4c4c213b1 | ||
|   | edc8004985 | ||
|   | 7f37eac04c | ||
|   | 0f66e144ab | ||
|   | 0d475a9dbc | ||
|   | ca5ef097ac | ||
|   | 4ee616bbde | ||
|   | de972fbe0f | ||
|   | 585f330694 | ||
|   | 89faf6ee9f | ||
|   | 83dbe398fd | ||
|   | b68c073d1b | ||
|   | 7eb8c8221a | ||
|   | 7094e0872e | ||
|   | 4b26a82ae8 | ||
|   | 22613d4dd0 | ||
|   | d15d9220ff | ||
|   | a3f353ef42 | ||
|   | cc02da0ccf | ||
|   | e6f82cf2bb | ||
|   | 6593cba284 | ||
|   | d5b515899c | ||
|   | 068041f05e | ||
|   | e21b4ef28d | ||
|   | 4c9685977b | ||
|   | c9814de513 | ||
|   | bf7bc19ccb | ||
|   | 07b5000824 | ||
|   | d6ef2bc91d | ||
|   | db90ee4283 | ||
|   | a3e868acb8 | ||
|   | 62048e1aa0 | ||
|   | 31a06a0682 | ||
|   | 72c7feb2c4 | ||
|   | a83e43a52f | ||
|   | 8b1632dc1d | ||
|   | 170d29a13c | ||
|   | 1bfcf55469 | ||
|   | 85164687f3 | ||
|   | f5f42782be | ||
|   | 60a4cba6d6 | ||
|   | 5ecb797d8a | ||
|   | 455e0190d1 | ||
|   | 84932e62e9 | ||
|   | fe229d1df0 | ||
|   | b5b865a6ca | ||
|   | d8e9941fa9 | ||
|   | bab3eea3a8 | ||
|   | 07e635f158 | ||
|   | b641065d1f | ||
|   | 60d4b2833d | ||
|   | 1244edeaf1 | ||
|   | acf4ac01fc | ||
|   | 549c28459e | ||
|   | 86ac7c6eb7 | ||
|   | 0e53b350d3 | ||
|   | db0726fa76 | ||
|   | 664ab708e4 | ||
|   | f88e621dca | ||
|   | 0e7345c282 | ||
|   | 7b578cc065 | ||
|   | 988f72d5eb | ||
|   | c51e8ace48 | ||
|   | 43a86cf5b9 | ||
|   | 54cb4350b3 | ||
|   | cabd8a8a03 | ||
|   | 8640754417 | ||
|   | 7d1be40e10 | ||
|   | 3c271892e3 | ||
|   | 83ab53ecd4 | ||
|   | ba73841240 | ||
|   | 13afc54ccc | ||
|   | 2865a96ba5 | ||
|   | 79222b65a3 | ||
|   | 83f0429db8 | ||
|   | 6c035f7d2b | ||
|   | ed5a4123b5 | ||
|   | b8530e30df | ||
|   | 8bf2f33782 | ||
|   | 356fbcf187 | ||
|   | 1adf90e9df | ||
|   | c2f523e463 | ||
|   | 1e8f5d0d67 | ||
|   | 0a8d25cd35 | ||
|   | 72e0d1a424 | ||
|   | c06d4d70ef | ||
|   | 69f588dd36 | ||
|   | 65b47fa032 | ||
|   | 22fd249b12 | ||
|   | 96831350b8 | ||
|   | 5da3c031fd | ||
|   | 71eba2406d | ||
|   | 892fa8c2bd | ||
|   | 42e332bb8c | ||
|   | 40604c3d40 | ||
|   | e183efcce2 | ||
|   | 772e4e01a3 | ||
|   | 3660b495c3 | ||
|   | 7a02f03a82 | ||
|   | 953077b73f | ||
|   | ba15089d86 | ||
|   | b8ee27c672 | ||
|   | ee65a319ba | ||
|   | 46502480e9 | ||
|   | 50e1c23941 | ||
|   | b76c8aeb83 | ||
|   | b5599ef3fc | ||
|   | 39e7856c48 | ||
|   | 1a7aa5e5ec | ||
|   | aad5b96083 | ||
|   | dea3190d36 | ||
|   | c001a52582 | ||
|   | f58eb11fd5 | ||
|   | 134beee0cd | ||
|   | 434dae8424 | ||
|   | d8dd77884b | ||
|   | ea991d5a01 | ||
|   | 6a127eb24f | ||
|   | 5e57dc5da7 | ||
|   | d23a649427 | ||
|   | 12ae60fd77 | ||
|   | 282b0b5927 | ||
|   | 0a261fca42 | ||
|   | 20104301f3 | ||
|   | 428780db53 | ||
|   | 6bf5160bf2 | ||
|   | ef45359d81 | ||
|   | 3202bb6a2e | 
							
								
								
									
										261
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										261
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,91 +1,206 @@ | |||||||
| language: cpp | language: cpp | ||||||
| os: | sudo: false | ||||||
|   - linux |  | ||||||
|   - osx |  | ||||||
| cache: |  | ||||||
|   - apt |  | ||||||
| compiler: |  | ||||||
|   - clang |  | ||||||
|   - gcc |  | ||||||
| os: |  | ||||||
|   - osx |  | ||||||
|   - linux |  | ||||||
| before_install: |  | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi |  | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:h-rayflood/llvm-upper; fi |  | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi |  | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi |  | ||||||
| install: | install: | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-4.8-multilib g++-4.8-multilib; fi |  - export BASE=`pwd` | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.6; fi |  - mkdir ${BASE}/usr | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90; fi |  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget --no-check-certificate https://cmake.org/files/v3.7/cmake-3.7.1-Linux-x86_64.sh -O cmake-3.7.1-Linux-x86_64.sh; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 90; fi |  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then chmod a+x cmake-3.7.1-Linux-x86_64.sh; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32gcc1; fi |  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then ./cmake-3.7.1-Linux-x86_64.sh --prefix=${BASE}/usr --skip-license; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-i386; fi |  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PATH="${BASE}/usr/bin:$PATH"; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32z1-dev; fi |  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then export LD_LIBRARY_PATH="${BASE}/usr/lib:$LD_LIBRARY_PATH"; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32stdc++6; fi |  - if [ "$CXX" = "g++" ]; then export CXX="g++-6" CC="gcc-6"; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y bzip2; fi |  - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then export CXX="clang++-3.9" CC="clang-3.9"; fi | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-dbg; fi | #gtest | ||||||
|   - wget https://googletest.googlecode.com/files/gtest-1.7.0.zip |  - wget https://github.com/google/googletest/archive/release-1.7.0.zip -O googletest-release-1.7.0.zip | ||||||
|   - wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2 && tar xjf valgrind-3.10.1.tar.bz2 && cd valgrind-3.10.1 && ./configure && make && sudo make install && cd .. |  - unzip -q googletest-release-1.7.0.zip | ||||||
|  |  - cd googletest-release-1.7.0 | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew unlink boost; fi |  - $CXX -m${ARCH} src/gtest-all.cc -I. -Iinclude -c | ||||||
|   - if [ "$BOOST" == "boost" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.zip && unzip -q boost_1_58_0.zip && cd boost_1_58_0 && ./bootstrap.sh && ./b2 --with-timer --with-chrono address-model="$ARCH" > /dev/null && sudo ./b2 --with-timer --with-chrono address-model="$ARCH" install > /dev/null && cd ..; fi |  - $CXX -m${ARCH} src/gtest_main.cc -I. -Iinclude -c | ||||||
|  |  - ar -rv libgtest.a gtest-all.o | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "linux" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && g++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && g++ -m32 src/gtest-all.cc -I. -Iinclude -c && g++ -m32 src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mkdir /usr/local/lib32 && sudo mv *.a /usr/local/lib32 && cd ..; fi |  - ar -rv libgtest_main.a gtest_main.o | ||||||
|   - if [ "$TRAVIS_OS_NAME" == "osx" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && clang++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && cd ..; fi |  - mkdir -p ${BASE}/usr/include | ||||||
|  |  - cp -r include/gtest ${BASE}/usr/include | ||||||
| env: |  - mkdir -p ${BASE}/usr/lib | ||||||
|   - ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" |  - mv *.a ${BASE}/usr/lib | ||||||
|   - ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC="" |  - cd .. | ||||||
|   - ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" | # valgrind | ||||||
|   - ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 SHARED="OFF" |  - if [ "$TRAVIS_OS_NAME" == "linux" ]; then wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 && tar xjf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0 && ./configure --prefix=${BASE}/usr > /dev/null && make -j3 > /dev/null && make install > /dev/null && cd ..; fi | ||||||
|   - ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC="" | # boost | ||||||
|   - ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/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 | ||||||
|   - ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC="" |  | ||||||
|   - ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" |  | ||||||
|  |  | ||||||
| before_script: |  | ||||||
|  - export PATH=/usr/local/bin:$PATH && rm -rf install |  | ||||||
|  |  | ||||||
| matrix: | matrix: | ||||||
|   exclude: |   include: | ||||||
|     - os: osx |     - os: osx | ||||||
|       compiler: gcc |       compiler: clang | ||||||
|  |       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="1" | ||||||
|     - os: osx |     - os: osx | ||||||
|       env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC="" |       compiler: clang | ||||||
|  |       env:  ACTION="ci/build_cmake.sh" CXX11="ON" ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||||
|     - os: osx |     - os: osx | ||||||
|       env: ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 SHARED="OFF" |       compiler: clang | ||||||
|  |       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"              SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||||
|     - os: osx |     - os: osx | ||||||
|       env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" |       compiler: clang | ||||||
|     - os: osx |       env: ACTION="ci/build_cmake.sh"             ARCH="64"              SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="2" | ||||||
|       env: ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" |  | ||||||
|  |  | ||||||
|     - os: linux |  | ||||||
|       compiler: gcc |  | ||||||
|       env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" |  | ||||||
|     - os: linux |  | ||||||
|       compiler: gcc |  | ||||||
|       env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC="" |  | ||||||
|     - os: linux |  | ||||||
|       compiler: gcc |  | ||||||
|       env: ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST="boost" BOOST_INC="/usr/local/boost" |  | ||||||
|     - os: linux |  | ||||||
|       compiler: gcc |  | ||||||
|       env: ACTION="ci/build_cmake.sh"     VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST=""      BOOST_INC=""                 SHARED="OFF" |  | ||||||
|  |  | ||||||
|     - os: linux |     - os: linux | ||||||
|       compiler: clang |       compiler: clang | ||||||
|       env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC="" |       env: ACTION="ci/build_cmake.sh"             ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="1" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |             - llvm-toolchain-precise-3.9 | ||||||
|  |             - llvm-toolchain-precise | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-5-multilib | ||||||
|  |             - g++-5-multilib | ||||||
|  |             - bzip2 | ||||||
|  |             - clang-3.9 | ||||||
|  |             - libc6-dbg | ||||||
|     - os: linux |     - os: linux | ||||||
|       compiler: clang |       compiler: clang | ||||||
|       env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" |       env: ACTION="ci/build_cmake.sh"             ARCH="32"              SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |             - llvm-toolchain-precise-3.9 | ||||||
|  |             - llvm-toolchain-precise | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-5-multilib | ||||||
|  |             - g++-5-multilib | ||||||
|  |             - lib32stdc++6-6-dbg | ||||||
|  |             - lib32gcc1 | ||||||
|  |             - libc6-i386 | ||||||
|  |             - lib32z1-dev | ||||||
|  |             - bzip2 | ||||||
|  |             - clang-3.9 | ||||||
|  |             - libc6-dbg | ||||||
|     - os: linux |     - os: linux | ||||||
|       compiler: clang |       compiler: clang | ||||||
|       env: ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"   BOOST=""      BOOST_INC="" |       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"   BOOST="ON" SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" X3_PARSE="ON" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |             - llvm-toolchain-precise-3.9 | ||||||
|  |             - llvm-toolchain-precise | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-5-multilib | ||||||
|  |             - g++-5-multilib | ||||||
|  |             - bzip2 | ||||||
|  |             - clang-3.9 | ||||||
|  |             - libc6-dbg | ||||||
|     - os: linux |     - os: linux | ||||||
|       compiler: clang |       compiler: clang | ||||||
|       env: ACTION="ci/build_cmake.sh"     VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF" |       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="32"              SHARED="OFF" CHAR_SIGN="unsigned" API_VERSION="2" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |             - llvm-toolchain-precise-3.9 | ||||||
|  |             - llvm-toolchain-precise | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-5-multilib | ||||||
|  |             - g++-5-multilib | ||||||
|  |             - lib32stdc++6-6-dbg | ||||||
|  |             - lib32gcc1 | ||||||
|  |             - libc6-i386 | ||||||
|  |             - lib32z1-dev | ||||||
|  |             - bzip2 | ||||||
|  |             - clang-3.9 | ||||||
|  |             - libc6-dbg | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="64"              SHARED="ON"  CHAR_SIGN="signed"   API_VERSION="2" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-6-multilib | ||||||
|  |             - g++-6-multilib | ||||||
|  |             - bzip2 | ||||||
|  |             - libc6-dbg | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"  CXX11="ON" ARCH="32"   BOOST="ON" SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="2" X3_PARSE="ON" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-6-multilib | ||||||
|  |             - g++-6-multilib | ||||||
|  |             - lib32stdc++6-6-dbg | ||||||
|  |             - lib32gcc1 | ||||||
|  |             - libc6-i386 | ||||||
|  |             - lib32z1-dev | ||||||
|  |             - bzip2 | ||||||
|  |             - libc6-dbg | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"             ARCH="64"              SHARED="ON"  CHAR_SIGN="unsigned" API_VERSION="2" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-6-multilib | ||||||
|  |             - g++-6-multilib | ||||||
|  |             - bzip2 | ||||||
|  |             - libc6-dbg | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"             ARCH="32"   BOOST="ON" SHARED="OFF" CHAR_SIGN="signed"   API_VERSION="1" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-6-multilib | ||||||
|  |             - g++-6-multilib | ||||||
|  |             - lib32stdc++6-6-dbg | ||||||
|  |             - lib32gcc1 | ||||||
|  |             - libc6-i386 | ||||||
|  |             - lib32z1-dev | ||||||
|  |             - bzip2 | ||||||
|  |             - libc6-dbg | ||||||
|  |     - os: linux | ||||||
|  |       compiler: gcc | ||||||
|  |       env: ACTION="ci/build_cmake.sh"             ARCH="32"   BOOST="ON" SHARED="OFF" CHAR_SIGN="signed"   API_VERSION="2" | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           sources: | ||||||
|  |             - ubuntu-toolchain-r-test | ||||||
|  |           packages: | ||||||
|  |             - g++-multilib | ||||||
|  |             - gcc-multilib | ||||||
|  |             - gcc-6-multilib | ||||||
|  |             - g++-6-multilib | ||||||
|  |             - lib32stdc++6-6-dbg | ||||||
|  |             - lib32gcc1 | ||||||
|  |             - libc6-i386 | ||||||
|  |             - lib32z1-dev | ||||||
|  |             - bzip2 | ||||||
|  |             - libc6-dbg | ||||||
|  |  | ||||||
| script: | script: | ||||||
|   - git clean -xdf && CMAKE_LIBRARY_PATH=${LIBPATH} ${ACTION} ${VERSION} ${ARCH} ${BOOST} ${BOOST_INC} |   - 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} | ||||||
|   | |||||||
							
								
								
									
										195
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										195
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,9 +1,163 @@ | |||||||
| 2015-09-04 version 1.2.0 | # 2017-08-03 version 2.1.4 | ||||||
|   << breaking change >> |   * Add boost asio examples (including zlib) (#610) | ||||||
|  |   * Remove some warnings (#611) | ||||||
|  |   * Fix unpack visitor to treat float32/64 correctly (#613) | ||||||
|  |   * Improve documents (#616) | ||||||
|  |   * Fix alignment problem on some platform (#617, #518) | ||||||
|  |   * Fix conflict std::tuple, std::pair, and boost::fusion::sequence problem (#619) | ||||||
|  |  | ||||||
|  | # 2017-06-15 version 2.1.3 | ||||||
|  |   * Improve build system (#603) | ||||||
|  |   * Add C++17 adaptors `std::optional` and `std::string_view`. (#607, #608) | ||||||
|  |   * Improve cross platform configuration (#601) | ||||||
|  |   * Remove some warnings (#599, #602, #605) | ||||||
|  |  | ||||||
|  | # 2017-06-07 version 2.1.2 | ||||||
|  |  | ||||||
|  | * Improve documents (#565) | ||||||
|  |   * Fix empty map parse bug (#568) | ||||||
|  |   * Improve build system (#569, #570, #572, #579, #591, #592) | ||||||
|  |   * Remove some warnings (#574, #578, #586, #588) | ||||||
|  |   * Improve cross platform configuration (#577, #582) | ||||||
|  |   * Add cmake package config support (#580) | ||||||
|  |   * Fix streaming unpack bug (#585) | ||||||
|  |  | ||||||
|  | # 2017-02-04 version 2.1.1 | ||||||
|  |  | ||||||
|  |   * Fix unpacker's buffer management bug (#561) | ||||||
|  |   * Add boost string_view adaptor (#558) | ||||||
|  |   * Remove some warnings (#557, #559) | ||||||
|  |   * Improve coding style (#556) | ||||||
|  |  | ||||||
|  | # 2017-01-10 version 2.1.0 | ||||||
|  |  | ||||||
|  | ## << breaking changes >> | ||||||
|  |  | ||||||
|  |   * Fix object internal data type is float if msgpack format is float32 (#531) | ||||||
|  |  | ||||||
|  | ## << recommended changes >> | ||||||
|  |  | ||||||
|  |   * Add `FLOAT64` type. Please use it instead of `DOUBLE` (#531) | ||||||
|  |   * Add `FLOAT32` type. Please use it instead of `FLOAT` (#531) | ||||||
|  |  | ||||||
|  | ## << other updates >> | ||||||
|  |  | ||||||
|  |   * Add iterator based parse/unpack function(experimental) (#553) | ||||||
|  |   * Add `[[deprecated]]` attribute for C++14 (#552) | ||||||
|  |   * Fix `msgpack_unpack()` return code (#548) | ||||||
|  |   * Fix integer overflow (#547, #549, #550) | ||||||
|  |   * Add example codes (#542) | ||||||
|  |   * Add MSGPACK_NVP. You can use not only variable name but also any strings (#535) | ||||||
|  |   * Fix and Improve build system (#532, #545) | ||||||
|  |   * Fix `gcc_atomic.hpp` include path (#529, #530) | ||||||
|  |   * Improve CI environment (#526) | ||||||
|  |   * Improve documents (#524) | ||||||
|  |   * Add msgpack_unpacker_next_with_size() function (#515) | ||||||
|  |   * Fix `as()` applying condition (#511) | ||||||
|  |   * Fix fbuffer write (#504) | ||||||
|  |   * Add gcc bug workaround (#499) | ||||||
|  |   * Improve object print (#497, #500, #505, #533) | ||||||
|  |   * Remove some warnings (#495, #506, #508, #513, #528, #538, #545) | ||||||
|  |  | ||||||
|  | # 2016-06-25 version 2.0.0 | ||||||
|  |  | ||||||
|  | ## << breaking changes >> | ||||||
|  |  | ||||||
|  |   * Removed autotools support. Use cmake instead (#476, #479) | ||||||
|  |   * Removed pointer version of msgpack::unpack APIs. Use reference version instead (#453) | ||||||
|  |   * Removed MSGPACK_DISABLE_LEGACY_CONVERT. msgpack::object::convert(T*) is removed by default. Use msgpack::object::convert(T&) instead (#451) | ||||||
|  |   * Removed msgpacl::type::nil. Use nil_t or define MSGPACK_USE_LECACY_NIL (#444) | ||||||
|  |   * Removed std::string to msgpack::object conversion (#434) | ||||||
|  |  | ||||||
|  | ## << recommended changes >> | ||||||
|  |  | ||||||
|  |   * Replaced msgpack::unpacked with msgpack::object_handle. msgpack::unpacked is kept as a typedef of msgpack::object_handle. (#448) | ||||||
|  |  | ||||||
|  | ## << other updates >> | ||||||
|  |  | ||||||
|  |   * Add strict size checking adaptor. Relaxed tuple conversion (#489) | ||||||
|  |   * Fix and Improve example codes (#487) | ||||||
|  |   * Add C++/CLI support for nullptr (#481) | ||||||
|  |   * Update the boost libraries that are contained by msgpack-c (#475) | ||||||
|  |   * Fix gcc_atomic.hpp location (#474) | ||||||
|  |   * Add C-Style array support (#466, #488) | ||||||
|  |   * Fix include file dependency (#464) | ||||||
|  |   * Add a visitor version of unpack API (#461) | ||||||
|  |   * Fix JSON string conversion from "nil" to "null" (#458) | ||||||
|  |   * Fix and Improve build system (#455, #471, #473, #486, #491) | ||||||
|  |   * Fix comments (#452) | ||||||
|  |   * Fix unintentional msgpack::zone moving problem (#447) | ||||||
|  |   * Fix operator>> and << for msgpack::object (#443) | ||||||
|  |   * Fix C++03 msgpack::zone::clear() memory access violation bug (#441) | ||||||
|  |   * Fix TARGET_OS_IPHONE checking (#436) | ||||||
|  |   * Fix invalid front() call for empty container (#435) | ||||||
|  |   * Fix compile error on g++6 (C++11 only) (#426, #430) | ||||||
|  |   * Fix zone size expansion logic (#423) | ||||||
|  |   * Fix wrong hader file dependency (#421) | ||||||
|  |   * Fix msvc specific problem (#420) | ||||||
|  |   * Add v2 API support (#415) | ||||||
|  |  | ||||||
|  | # 2016-01-22 version 1.4.0 | ||||||
|  |  | ||||||
|  | ## << recommended changes >> | ||||||
|  |  | ||||||
|  |   * Define [MSGPACK_DISABLE_LEGACY_NIL](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_nil-since-140), then `msgpack::type::nil` is replaced by with `msgpack::type::nil_t` (#408, #411, #412). | ||||||
|  |     Replace `msgpack::type::nil` with `msgpack::type::nil_t` in client codes. | ||||||
|  |     `msgpack::type::nil` will be removed on the version 2.0.0. | ||||||
|  |   * Define [MSGPACK_DISABLE_LEGACY_CONVERT](https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_configure#msgpack_disable_legacy_convert-since-140), then `msgpack::object::convert(T*)` is removed (#410). | ||||||
|  |     Replace calling `msgpack::bojectconvert(T*)` with `msgpack::bojectconvert(T&)` in client codes as follows: | ||||||
|  |  | ||||||
|  |     ```C++ | ||||||
|  |      int i; | ||||||
|  |      obj.convert(&i); // before | ||||||
|  |      ``` | ||||||
|  |  | ||||||
|  |     ```C++ | ||||||
|  |      int i; | ||||||
|  |      obj.convert(i);  // after | ||||||
|  |      ``` | ||||||
|  |  | ||||||
|  |     `msgpack::object::convert(T*)` will be removed on the version 2.0.0. | ||||||
|  |  | ||||||
|  | Define the macros above as follows when you compile C++ codes that use msgpack-c: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | g++ -Ipath_to_msgpack/include -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT your_code.cpp | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | You can compile existing codes without defining macros above but I recommend defining them and updating your codes to fix the issues #408, #411, #412, #399, and #410. It is also a good preparation for the version 2.0.0. | ||||||
|  |  | ||||||
|  | ## << other updates >> | ||||||
|  |  | ||||||
|  |   * Improve documents (#387, #407) | ||||||
|  |   * Remove C++ version library (#394, #402) | ||||||
|  |   * Add Doxyfile and ChangeLog to the distribution package (#397) | ||||||
|  |   * Add signed/unsigned char test to travis-ci (#398) | ||||||
|  |   * Remove some warnings (#400, #401, #409) | ||||||
|  |   * Fix endian checking. (#404) | ||||||
|  |  | ||||||
|  | # 2015-11-21 version 1.3.0 | ||||||
|  |  | ||||||
|  |   * Change the license from the Apache License Version 2.0 to the | ||||||
|  |     Boost Software License, Version 1.0.(#386) | ||||||
|  |   * Remove some warnings (#365) | ||||||
|  |   * Add std::reference_wrapper support(#373, #384) | ||||||
|  |   * Improve tests (#375, #378, #379, #380) | ||||||
|  |   * Fix msvc specific problem (#376, #383) | ||||||
|  |   * Fix typos (#381) | ||||||
|  |  | ||||||
|  | # 2015-09-04 version 1.2.0 | ||||||
|  |  | ||||||
|  | ## << breaking changes >> | ||||||
|  |  | ||||||
|   * Change std::vector<unsigned char> and std::array<unsigned char> |   * Change std::vector<unsigned char> and std::array<unsigned char> | ||||||
|     mapped to BIN instead of ARRAY (#243) |     mapped to BIN instead of ARRAY (#243) | ||||||
|   * Remove redundant copy (#285) |   * Remove redundant copy (#285) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## << other updates >> | ||||||
|  |  | ||||||
|   * Add array_ref to map to ARRAY (#243) |   * Add array_ref to map to ARRAY (#243) | ||||||
|   * Add variant type and adaptor (#349) |   * Add variant type and adaptor (#349) | ||||||
|   * Add object::convert_if_not_nil() (#357) |   * Add object::convert_if_not_nil() (#357) | ||||||
| @@ -41,8 +195,11 @@ | |||||||
|   * Add base class serialization. (#265, #277) |   * Add base class serialization. (#265, #277) | ||||||
|   * Add and improve examples. (#264, #310, #311, #341, #342, #344) |   * Add and improve examples. (#264, #310, #311, #341, #342, #344) | ||||||
|   * Fix wiki URL. (#263) |   * Fix wiki URL. (#263) | ||||||
| 2015-04-03 version 1.1.0 |  | ||||||
|   << breaking change >> | # 2015-04-03 version 1.1.0 | ||||||
|  |  | ||||||
|  | ## << breaking changes >> | ||||||
|  |  | ||||||
|   * Remove msgpack_fwd.hpp |   * Remove msgpack_fwd.hpp | ||||||
|   * Improve user types adaptation mechanism (#262) |   * Improve user types adaptation mechanism (#262) | ||||||
|     Since version 1.0.0, users need to obey the correct include order. |     Since version 1.0.0, users need to obey the correct include order. | ||||||
| @@ -51,18 +208,24 @@ | |||||||
|     care about include order. Migration guide from 1.0.x to 1.1.0 has |     care about include order. Migration guide from 1.0.x to 1.1.0 has | ||||||
|     been written. See https://github.com/msgpack/msgpack-c/wiki |     been written. See https://github.com/msgpack/msgpack-c/wiki | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## << other updates >> | ||||||
|  |  | ||||||
|   * Fix vector<bool> size check (#251) |   * Fix vector<bool> size check (#251) | ||||||
|   * Fix inttypes.h inclusion on MSVC (#257) |   * Fix inttypes.h inclusion on MSVC (#257) | ||||||
|   * Support documents generation by Doxygen (#259) |   * Support documents generation by Doxygen (#259) | ||||||
|   * Remove C99 style variable declaration (#253) |   * Remove C99 style variable declaration (#253) | ||||||
|   * Improve documents (https://github.com/msgpack/msgpack-c/wiki) |   * Improve documents (https://github.com/msgpack/msgpack-c/wiki) | ||||||
| 2015-03-22 version 1.0.1: |  | ||||||
|  | # 2015-03-22 version 1.0.1: | ||||||
|  |  | ||||||
|   * Fix compilation error on Mac 10.9 (#244) |   * Fix compilation error on Mac 10.9 (#244) | ||||||
|   * Fix typos in documents (#240) |   * Fix typos in documents (#240) | ||||||
|   * Update CHANGELOG.md for version 1.0.0 (#242) |   * Update CHANGELOG.md for version 1.0.0 (#242) | ||||||
|   * Fix erb templates for the next code generation (#239) |   * Fix erb templates for the next code generation (#239) | ||||||
|  |  | ||||||
| 2015-03-10 version 1.0.0: | # 2015-03-10 version 1.0.0: | ||||||
|  |  | ||||||
|   * Support msgpack v5 format (str, bin, and ext) https://github.com/msgpack/msgpack/blob/master/spec.md (#142) |   * Support msgpack v5 format (str, bin, and ext) https://github.com/msgpack/msgpack/blob/master/spec.md (#142) | ||||||
|   * Support std::tuple, std::forward_list, std::array, std::unordered_set, std::unordered_map on C++11. tr1 unordered containers are still supported (#53, #130, #137, #154, #169) |   * Support std::tuple, std::forward_list, std::array, std::unordered_set, std::unordered_map on C++11. tr1 unordered containers are still supported (#53, #130, #137, #154, #169) | ||||||
|   * Update msgpack-c as a header-only library on C++ (#142) |   * Update msgpack-c as a header-only library on C++ (#142) | ||||||
| @@ -88,7 +251,7 @@ | |||||||
|   * Improve documents (https://github.com/msgpack/msgpack-c/wiki) |   * Improve documents (https://github.com/msgpack/msgpack-c/wiki) | ||||||
|   * Other bug fixes and refactoring: #62, #91, #95, #97, #107, #109, #113, #117, #119, #121, #122, #123, #126, #131, #136, #138, #140, #143, #145, #146, #150, #151, #152, #156, #157, #158, #161, #165, #170, #172, #179, #180, #181, #182, #183, #192, #195, #199, #200, #207, #211, #212, #219, #222, #224, #230, #231, #232, #233, #234, #235 |   * Other bug fixes and refactoring: #62, #91, #95, #97, #107, #109, #113, #117, #119, #121, #122, #123, #126, #131, #136, #138, #140, #143, #145, #146, #150, #151, #152, #156, #157, #158, #161, #165, #170, #172, #179, #180, #181, #182, #183, #192, #195, #199, #200, #207, #211, #212, #219, #222, #224, #230, #231, #232, #233, #234, #235 | ||||||
|  |  | ||||||
| 2014-07-02 version 0.5.9: | # 2014-07-02 version 0.5.9: | ||||||
|  |  | ||||||
|   * Support std::tr1 unordered containers by default (#51, #63, #68, #69) |   * Support std::tr1 unordered containers by default (#51, #63, #68, #69) | ||||||
|   * Remove some warnings (#56) |   * Remove some warnings (#56) | ||||||
| @@ -102,7 +265,7 @@ | |||||||
|   * Add FILE* buffer (#40) |   * Add FILE* buffer (#40) | ||||||
|   * Other bug fixes and refactoring: #39, #73, #77, #79, #80, #81, #84, #90 |   * Other bug fixes and refactoring: #39, #73, #77, #79, #80, #81, #84, #90 | ||||||
|  |  | ||||||
| 2013-12-23 version 0.5.8: | # 2013-12-23 version 0.5.8: | ||||||
|  |  | ||||||
|   * Move to the new github repository msgpack/msgpack-c |   * Move to the new github repository msgpack/msgpack-c | ||||||
|   * Support the new deserialization specification |   * Support the new deserialization specification | ||||||
| @@ -110,38 +273,38 @@ | |||||||
|   * Other bug fixes and refactoring: #46, #41, #36, #35, #33, #32, #30, #29, #28, #27, #26, #25, #8, #3 |   * Other bug fixes and refactoring: #46, #41, #36, #35, #33, #32, #30, #29, #28, #27, #26, #25, #8, #3 | ||||||
|   * Update of documents: #23, #18, #17 |   * Update of documents: #23, #18, #17 | ||||||
|  |  | ||||||
| 2011-08-08 version 0.5.7: | # 2011-08-08 version 0.5.7: | ||||||
|  |  | ||||||
|   * fixes compile error problem with llvm-gcc and Mac OS X Lion |   * fixes compile error problem with llvm-gcc and Mac OS X Lion | ||||||
|  |  | ||||||
| 2011-04-24 version 0.5.6: | # 2011-04-24 version 0.5.6: | ||||||
|  |  | ||||||
|   * #42 fixes double-free problem on msgpack_unpacker_release_zone |   * #42 fixes double-free problem on msgpack_unpacker_release_zone | ||||||
|  |  | ||||||
| 2011-02-24 version 0.5.5: | # 2011-02-24 version 0.5.5: | ||||||
|  |  | ||||||
|   * eliminates dependency of winsock2.h header |   * eliminates dependency of winsock2.h header | ||||||
|   * fixes msgpack_vc.postbuild.bat file |   * fixes msgpack_vc.postbuild.bat file | ||||||
|   * fixes some implicit cast warnings |   * fixes some implicit cast warnings | ||||||
|  |  | ||||||
| 2010-08-29 version 0.5.4: | # 2010-08-29 version 0.5.4: | ||||||
|  |  | ||||||
|   * includes msgpack_vc2008.vcproj file in source package |   * includes msgpack_vc2008.vcproj file in source package | ||||||
|   * fixes type::fix_int types |   * fixes type::fix_int types | ||||||
|  |  | ||||||
| 2010-08-27 version 0.5.3: | # 2010-08-27 version 0.5.3: | ||||||
|  |  | ||||||
|   * adds type::fix_{u,}int{8,16,32,64} types |   * adds type::fix_{u,}int{8,16,32,64} types | ||||||
|   * adds msgpack_pack_fix_{u,}int{8,16,32,64} functions |   * adds msgpack_pack_fix_{u,}int{8,16,32,64} functions | ||||||
|   * adds packer<Stream>::pack_fix_{u,}int{8,16,32,64} functions |   * adds packer<Stream>::pack_fix_{u,}int{8,16,32,64} functions | ||||||
|   * fixes include paths |   * fixes include paths | ||||||
|  |  | ||||||
| 2010-07-14 version 0.5.2: | # 2010-07-14 version 0.5.2: | ||||||
|  |  | ||||||
|   * type::raw::str(), operator==, operator!=, operator< and operator> are now const |   * type::raw::str(), operator==, operator!=, operator< and operator> are now const | ||||||
|   * generates version.h using AC_OUTPUT macro in ./configure |   * generates version.h using AC_OUTPUT macro in ./configure | ||||||
|  |  | ||||||
| 2010-07-06 version 0.5.1: | # 2010-07-06 version 0.5.1: | ||||||
|  |  | ||||||
|   * Add msgpack_vrefbuffer_new and msgpack_vrefbuffer_free |   * Add msgpack_vrefbuffer_new and msgpack_vrefbuffer_free | ||||||
|   * Add msgpack_sbuffer_new and msgpack_sbuffer_free |   * Add msgpack_sbuffer_new and msgpack_sbuffer_free | ||||||
| @@ -151,7 +314,7 @@ | |||||||
|   * Add msgpack_version{,_major,_minor} functions to check library version |   * Add msgpack_version{,_major,_minor} functions to check library version | ||||||
|   * ./configure supports --disable-cxx option not to build C++ API |   * ./configure supports --disable-cxx option not to build C++ API | ||||||
|  |  | ||||||
| 2010-04-29 version 0.5.0: | # 2010-04-29 version 0.5.0: | ||||||
|  |  | ||||||
|   * msgpack_object_type is changed. MSGPACK_OBJECT_NIL is now 0x00. |   * msgpack_object_type is changed. MSGPACK_OBJECT_NIL is now 0x00. | ||||||
|   * New safe streaming deserializer API. |   * New safe streaming deserializer API. | ||||||
|   | |||||||
							
								
								
									
										326
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										326
									
								
								CMakeLists.txt
									
									
									
									
									
								
							| @@ -1,4 +1,10 @@ | |||||||
| CMAKE_MINIMUM_REQUIRED (VERSION 2.8.6) | CMAKE_MINIMUM_REQUIRED (VERSION 2.8.12) | ||||||
|  |  | ||||||
|  | IF ((CMAKE_VERSION VERSION_GREATER 3.1) OR | ||||||
|  |     (CMAKE_VERSION VERSION_EQUAL 3.1)) | ||||||
|  |     CMAKE_POLICY(SET CMP0054 NEW) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
| PROJECT (msgpack) | PROJECT (msgpack) | ||||||
|  |  | ||||||
| FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents) | FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/version_master.h contents) | ||||||
| @@ -14,6 +20,7 @@ SET (prefix ${CMAKE_INSTALL_PREFIX}) | |||||||
| SET (exec_prefix "\${prefix}") | SET (exec_prefix "\${prefix}") | ||||||
| SET (libdir "\${exec_prefix}/lib") | SET (libdir "\${exec_prefix}/lib") | ||||||
| SET (includedir "\${prefix}/include") | SET (includedir "\${prefix}/include") | ||||||
|  | SET (GNUCXX_STD_SUPPORT_VERSION "4.3") | ||||||
|  |  | ||||||
| OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF) | OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF) | ||||||
| OPTION (MSGPACK_32BIT "32bit compile" OFF) | OPTION (MSGPACK_32BIT "32bit compile" OFF) | ||||||
| @@ -31,24 +38,48 @@ IF (APPLE) | |||||||
|     ENDIF () |     ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_CXX11) | IF (MSGPACK_USE_X3_PARSE) | ||||||
|    IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |    IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|       SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") |       SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}") | ||||||
|    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|       SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") |       SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE -std=c++14 ${CMAKE_CXX_FLAGS}") | ||||||
|    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|  |       SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_X3_PARSE ${CMAKE_CXX_FLAGS}") | ||||||
|       IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) |       IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) | ||||||
|           MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11.") |           MESSAGE ( FATAL_ERROR "MSVC doesn't support C++14.") | ||||||
|       ENDIF () |       ENDIF () | ||||||
|    ENDIF () |    ENDIF () | ||||||
| ELSE () | ELSE () | ||||||
|    IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |    IF (MSGPACK_CXX17) | ||||||
|       SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}") |       IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |          SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}") | ||||||
|       SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}") |       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|    ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |          SET (CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS}") | ||||||
|       IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18) |       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|           SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_CPP03 ${CMAKE_CXX_FLAGS}") |          MESSAGE ( FATAL_ERROR "MSVC doesn't support C++17.") | ||||||
|  |       ENDIF () | ||||||
|  |    ELSEIF (MSGPACK_CXX11) | ||||||
|  |       IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |          SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") | ||||||
|  |       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |          SET (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") | ||||||
|  |       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|  |          IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) | ||||||
|  |              MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11.") | ||||||
|  |          ENDIF () | ||||||
|  |       ENDIF () | ||||||
|  |    ELSE () | ||||||
|  |       IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |          IF ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER ${GNUCXX_STD_SUPPORT_VERSION}) OR | ||||||
|  |              (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL   ${GNUCXX_STD_SUPPORT_VERSION})) | ||||||
|  |              SET (CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}") | ||||||
|  |          ENDIF () | ||||||
|  |       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |          SET (CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}") | ||||||
|  |       ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|  |          IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18) | ||||||
|  |              SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_CPP03 ${CMAKE_CXX_FLAGS}") | ||||||
|  |          ENDIF () | ||||||
|       ENDIF () |       ENDIF () | ||||||
|    ENDIF () |    ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
| @@ -65,15 +96,35 @@ IF (MSGPACK_32BIT) | |||||||
|    ENDIF () |    ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
|  | OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON) | ||||||
|  |  | ||||||
| IF (MSGPACK_BOOST) | IF (MSGPACK_BOOST) | ||||||
|    SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}") |    SET (CMAKE_CXX_FLAGS "-DMSGPACK_USE_BOOST ${CMAKE_CXX_FLAGS}") | ||||||
|    SET (Boost_USE_STATIC_LIBS        ON) # only find static libs |  | ||||||
|    SET (Boost_USE_MULTITHREADED      ON) |    SET (Boost_USE_MULTITHREADED      ON) | ||||||
|    SET (Boost_USE_STATIC_RUNTIME    OFF) |    SET (Boost_USE_STATIC_RUNTIME    OFF) | ||||||
|    FIND_PACKAGE (Boost COMPONENTS chrono timer system) |    FIND_PACKAGE (Boost REQUIRED COMPONENTS chrono context system timer) | ||||||
|    INCLUDE_DIRECTORIES ( |    INCLUDE_DIRECTORIES ( | ||||||
|        ${MSGPACK_BOOST_DIR} |       ${Boost_INCLUDE_DIRS} | ||||||
|    ) |    ) | ||||||
|  |    LINK_DIRECTORIES ( | ||||||
|  |       ${Boost_LIBRARY_DIRS} | ||||||
|  |    ) | ||||||
|  |    IF (MSGPACK_BOOST_DIR) | ||||||
|  |       INCLUDE_DIRECTORIES ( | ||||||
|  |          ${MSGPACK_BOOST_DIR} | ||||||
|  |       ) | ||||||
|  |    ENDIF () | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
|  | IF (MSGPACK_CHAR_SIGN) | ||||||
|  |    SET (CMAKE_C_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_C_FLAGS}") | ||||||
|  |    SET (CMAKE_CXX_FLAGS "-f${MSGPACK_CHAR_SIGN}-char ${CMAKE_CXX_FLAGS}") | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
|  | IF (MSGPACK_DEFAULT_API_VERSION) | ||||||
|  |    SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=${MSGPACK_DEFAULT_API_VERSION} ${CMAKE_CXX_FLAGS}") | ||||||
|  | ELSE () | ||||||
|  |    SET (CMAKE_CXX_FLAGS "-DMSGPACK_DEFAULT_API_VERSION=2 ${CMAKE_CXX_FLAGS}") | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h) | FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h) | ||||||
| @@ -83,7 +134,7 @@ FOREACH (F ${PREDEF_FILES}) | |||||||
|    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT) |    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT) | ||||||
|    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) |    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) | ||||||
|    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) |    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) | ||||||
|    FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT}) |    FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT}) | ||||||
| ENDFOREACH () | ENDFOREACH () | ||||||
|  |  | ||||||
| FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp) | FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp) | ||||||
| @@ -93,7 +144,7 @@ FOREACH (F ${PREPROCESSOR_FILES}) | |||||||
|    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT) |    FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT) | ||||||
|    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) |    STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT}) | ||||||
|    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) |    STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT}) | ||||||
|    FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT}) |    FILE (GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} CONTENT ${CONTENT}) | ||||||
| ENDFOREACH () | ENDFOREACH () | ||||||
|  |  | ||||||
| FIND_PACKAGE (GTest) | FIND_PACKAGE (GTest) | ||||||
| @@ -102,7 +153,6 @@ FIND_PACKAGE (Threads) | |||||||
| IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND) | IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND) | ||||||
|     OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON) |     OPTION (MSGPACK_BUILD_TESTS "Build msgpack tests." ON) | ||||||
| ENDIF () | ENDIF () | ||||||
| OPTION (MSGPACK_BUILD_EXAMPLES "Build msgpack examples." ON) |  | ||||||
|  |  | ||||||
| OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON) | OPTION (MSGPACK_ENABLE_CXX "Enable C++ interface." ON) | ||||||
| OPTION (MSGPACK_ENABLE_SHARED "Build shared libaries in addition to static libraries." ON) | OPTION (MSGPACK_ENABLE_SHARED "Build shared libaries in addition to static libraries." ON) | ||||||
| @@ -119,118 +169,7 @@ int main(int argc, char * argv[]) | |||||||
| } | } | ||||||
| " MSGPACK_ENABLE_GCC_CXX_ATOMIC) | " MSGPACK_ENABLE_GCC_CXX_ATOMIC) | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_GCC_CXX_ATOMIC) | INCLUDE (Files.cmake) | ||||||
|     LIST (APPEND msgpack_SOURCES |  | ||||||
|         src/gcc_atomic.cpp |  | ||||||
|     ) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
|  |  | ||||||
| LIST (APPEND msgpack_SOURCES |  | ||||||
|     src/unpack.c |  | ||||||
|     src/objectc.c |  | ||||||
|     src/version.c |  | ||||||
|     src/vrefbuffer.c |  | ||||||
|     src/zone.c |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| LIST (APPEND msgpack_HEADERS |  | ||||||
|     include/msgpack/pack_define.h |  | ||||||
|     include/msgpack/pack_template.h |  | ||||||
|     include/msgpack/unpack_define.h |  | ||||||
|     include/msgpack/unpack_template.h |  | ||||||
|     include/msgpack/util.h |  | ||||||
|     include/msgpack/sysdep.h |  | ||||||
|     include/msgpack/gcc_atomic.h |  | ||||||
|     include/msgpack.h |  | ||||||
|     include/msgpack/sbuffer.h |  | ||||||
|     include/msgpack/version.h |  | ||||||
|     include/msgpack/version_master.h |  | ||||||
|     include/msgpack/vrefbuffer.h |  | ||||||
|     include/msgpack/zbuffer.h |  | ||||||
|     include/msgpack/fbuffer.h |  | ||||||
|     include/msgpack/pack.h |  | ||||||
|     include/msgpack/unpack.h |  | ||||||
|     include/msgpack/object.h |  | ||||||
|     include/msgpack/zone.h |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/predef/*.h) |  | ||||||
|  |  | ||||||
| LIST (APPEND msgpack_HEADERS ${PREDEF_FILES}) |  | ||||||
| LIST (APPEND msgpack_HEADERS include/msgpack/predef.h) |  | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_CXX) |  | ||||||
|     LIST (APPEND msgpack_HEADERS |  | ||||||
|         include/msgpack.hpp |  | ||||||
|         include/msgpack/adaptor/adaptor_base.hpp |  | ||||||
|         include/msgpack/adaptor/array_ref.hpp |  | ||||||
|         include/msgpack/adaptor/bool.hpp |  | ||||||
|         include/msgpack/adaptor/boost/fusion.hpp |  | ||||||
|         include/msgpack/adaptor/boost/msgpack_variant.hpp |  | ||||||
|         include/msgpack/adaptor/boost/optional.hpp |  | ||||||
|         include/msgpack/adaptor/boost/string_ref.hpp |  | ||||||
|         include/msgpack/adaptor/char_ptr.hpp |  | ||||||
|         include/msgpack/adaptor/check_container_size.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/array.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/array_char.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/array_unsigned_char.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/forward_list.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/shared_ptr.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/tuple.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/unique_ptr.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/unordered_map.hpp |  | ||||||
|         include/msgpack/adaptor/cpp11/unordered_set.hpp |  | ||||||
|         include/msgpack/adaptor/define.hpp |  | ||||||
|         include/msgpack/adaptor/deque.hpp |  | ||||||
|         include/msgpack/adaptor/detail/cpp03_define_array.hpp |  | ||||||
|         include/msgpack/adaptor/detail/cpp03_define_map.hpp |  | ||||||
|         include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp |  | ||||||
|         include/msgpack/adaptor/detail/cpp11_define_array.hpp |  | ||||||
|         include/msgpack/adaptor/detail/cpp11_define_map.hpp |  | ||||||
|         include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp |  | ||||||
|         include/msgpack/adaptor/ext.hpp |  | ||||||
|         include/msgpack/adaptor/fixint.hpp |  | ||||||
|         include/msgpack/adaptor/float.hpp |  | ||||||
|         include/msgpack/adaptor/int.hpp |  | ||||||
|         include/msgpack/adaptor/list.hpp |  | ||||||
|         include/msgpack/adaptor/map.hpp |  | ||||||
|         include/msgpack/adaptor/msgpack_tuple.hpp |  | ||||||
|         include/msgpack/adaptor/nil.hpp |  | ||||||
|         include/msgpack/adaptor/pair.hpp |  | ||||||
|         include/msgpack/adaptor/raw.hpp |  | ||||||
|         include/msgpack/adaptor/v4raw.hpp |  | ||||||
|         include/msgpack/adaptor/set.hpp |  | ||||||
|         include/msgpack/adaptor/string.hpp |  | ||||||
|         include/msgpack/adaptor/tr1/unordered_map.hpp |  | ||||||
|         include/msgpack/adaptor/tr1/unordered_set.hpp |  | ||||||
|         include/msgpack/adaptor/vector.hpp |  | ||||||
|         include/msgpack/adaptor/vector_bool.hpp |  | ||||||
|         include/msgpack/adaptor/vector_char.hpp |  | ||||||
|         include/msgpack/adaptor/vector_unsigned_char.hpp |  | ||||||
|         include/msgpack/cpp_config.hpp |  | ||||||
|         include/msgpack/detail/cpp03_zone.hpp |  | ||||||
|         include/msgpack/detail/cpp11_zone.hpp |  | ||||||
|         include/msgpack/fbuffer.hpp |  | ||||||
|         include/msgpack/iterator.hpp |  | ||||||
|         include/msgpack/meta.hpp |  | ||||||
|         include/msgpack/object.hpp |  | ||||||
|         include/msgpack/object_fwd.hpp |  | ||||||
|         include/msgpack/pack.hpp |  | ||||||
|         include/msgpack/sbuffer.hpp |  | ||||||
|         include/msgpack/type.hpp |  | ||||||
|         include/msgpack/unpack.hpp |  | ||||||
|         include/msgpack/version.hpp |  | ||||||
|         include/msgpack/versioning.hpp |  | ||||||
|         include/msgpack/vrefbuffer.hpp |  | ||||||
|         include/msgpack/zbuffer.hpp |  | ||||||
|         include/msgpack/zone.hpp |  | ||||||
|     ) |  | ||||||
|     FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/preprocessor/*.hpp) |  | ||||||
|  |  | ||||||
|     LIST (APPEND msgpack_HEADERS ${PREPROCESSOR_FILES}) |  | ||||||
|     LIST (APPEND msgpack_HEADERS include/msgpack/preprocessor.hpp) |  | ||||||
| ENDIF () |  | ||||||
|  |  | ||||||
| EXECUTE_PROCESS ( | EXECUTE_PROCESS ( | ||||||
|     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack |     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/msgpack | ||||||
| @@ -242,28 +181,49 @@ CONFIGURE_FILE ( | |||||||
|     @ONLY |     @ONLY | ||||||
| ) | ) | ||||||
|  |  | ||||||
| INCLUDE_DIRECTORIES ( |  | ||||||
|     ./ |  | ||||||
|     include/ |  | ||||||
|     ${CMAKE_CURRENT_BINARY_DIR}/include/ |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_SHARED) | IF (MSGPACK_ENABLE_SHARED) | ||||||
|     ADD_LIBRARY (msgpack SHARED |     ADD_LIBRARY (msgpackc SHARED | ||||||
|         ${msgpack_SOURCES} |         ${msgpackc_SOURCES} | ||||||
|         ${msgpack_HEADERS} |         ${msgpackc_HEADERS} | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     TARGET_INCLUDE_DIRECTORIES (msgpackc | ||||||
|  |         PUBLIC | ||||||
|  |             $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||||
|  |             $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> | ||||||
|  |             $<INSTALL_INTERFACE:include> | ||||||
|  |         PRIVATE | ||||||
|  |             ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|     ) |     ) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| ADD_LIBRARY (msgpack-static STATIC | ADD_LIBRARY (msgpackc-static STATIC | ||||||
|     ${msgpack_SOURCES} |     ${msgpackc_SOURCES} | ||||||
|     ${msgpack_HEADERS} |     ${msgpackc_HEADERS} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| SET_TARGET_PROPERTIES (msgpack-static PROPERTIES OUTPUT_NAME "msgpack") | 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") | ||||||
| IF (MSGPACK_ENABLE_SHARED) | IF (MSGPACK_ENABLE_SHARED) | ||||||
|     SET_TARGET_PROPERTIES (msgpack PROPERTIES IMPORT_SUFFIX "_import.lib") |     IF (MSVC) | ||||||
|     SET_TARGET_PROPERTIES (msgpack PROPERTIES SOVERSION 3 VERSION 4.0.0) |         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 () | ||||||
|  |  | ||||||
| IF (MSGPACK_BUILD_TESTS) | IF (MSGPACK_BUILD_TESTS) | ||||||
| @@ -277,10 +237,18 @@ ENDIF () | |||||||
|  |  | ||||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|     IF (MSGPACK_ENABLE_SHARED) |     IF (MSGPACK_ENABLE_SHARED) | ||||||
|         SET_PROPERTY (TARGET msgpack APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Wno-mismatched-tags -Werror -g -O3 -DPIC") |         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 -DPIC") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|     SET_PROPERTY (TARGET msgpack-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Wno-mismatched-tags -Werror -g -O3" ) |     SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3" ) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
|  | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |     IF (MSGPACK_ENABLE_SHARED) | ||||||
|  |         SET_PROPERTY (TARGET msgpackc APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |     ENDIF () | ||||||
|  |     SET_PROPERTY (TARGET msgpackc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|     IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |     IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|         STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |         STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
| @@ -290,8 +258,17 @@ IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | |||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10") | IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC90" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC10") | ||||||
|     SET_SOURCE_FILES_PROPERTIES(${msgpack_SOURCES} PROPERTIES LANGUAGE CXX) |     SET_SOURCE_FILES_PROPERTIES(${msgpackc_SOURCES} PROPERTIES LANGUAGE CXX) | ||||||
| ENDIF() | ENDIF () | ||||||
|  |  | ||||||
|  | IF ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "sparc") | ||||||
|  |     SET (CMAKE_C_FLAGS   "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_C_FLAGS}") | ||||||
|  |     SET (CMAKE_CXX_FLAGS "-DMSGPACK_ZONE_ALIGN=8 ${CMAKE_CXX_FLAGS}") | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
|  | IF (NOT DEFINED CMAKE_INSTALL_BINDIR) | ||||||
|  |     SET(CMAKE_INSTALL_BINDIR bin) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
| IF (NOT DEFINED CMAKE_INSTALL_LIBDIR) | IF (NOT DEFINED CMAKE_INSTALL_LIBDIR) | ||||||
|     SET(CMAKE_INSTALL_LIBDIR lib) |     SET(CMAKE_INSTALL_LIBDIR lib) | ||||||
| @@ -302,13 +279,20 @@ IF (MSGPACK_BUILD_EXAMPLES) | |||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_ENABLE_SHARED) | IF (MSGPACK_ENABLE_SHARED) | ||||||
|     SET (MSGPACK_INSTALLTARGETS msgpack msgpack-static) |     SET (MSGPACK_INSTALLTARGETS msgpackc msgpackc-static) | ||||||
| ELSE() | ELSE() | ||||||
|     SET (MSGPACK_INSTALLTARGETS msgpack-static) |     SET (MSGPACK_INSTALLTARGETS msgpackc-static) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} DESTINATION ${CMAKE_INSTALL_LIBDIR}) | INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} EXPORT msgpack-targets | ||||||
| INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX}) |     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | ||||||
|  |     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||||||
|  |     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||||||
|  | ) | ||||||
|  | FOREACH (file ${msgpackc_HEADERS}) | ||||||
|  |     GET_FILENAME_COMPONENT (dir ${file} PATH) | ||||||
|  |     INSTALL (FILES ${file} DESTINATION ${CMAKE_INSTALL_PREFIX}/${dir}) | ||||||
|  | ENDFOREACH () | ||||||
| IF (NOT MSVC) | IF (NOT MSVC) | ||||||
|     INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) |     INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) | ||||||
| ENDIF () | ENDIF () | ||||||
| @@ -359,3 +343,39 @@ IF (DOXYGEN_FOUND) | |||||||
|         DEPENDS doxygen_c doxygen_cpp |         DEPENDS doxygen_c doxygen_cpp | ||||||
|     ) |     ) | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
|  | INCLUDE (CMakePackageConfigHelpers) | ||||||
|  |  | ||||||
|  | SET (CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/msgpack") | ||||||
|  |  | ||||||
|  | WRITE_BASIC_PACKAGE_VERSION_FILE ( | ||||||
|  |     msgpack-config-version.cmake | ||||||
|  |     VERSION ${VERSION} | ||||||
|  |     COMPATIBILITY SameMajorVersion | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | IF (NOT CMAKE_VERSION VERSION_LESS 3.0) | ||||||
|  |     EXPORT (EXPORT msgpack-targets | ||||||
|  |         FILE "${CMAKE_CURRENT_BINARY_DIR}/msgpack-targets.cmake" | ||||||
|  |     ) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
|  | CONFIGURE_PACKAGE_CONFIG_FILE (msgpack-config.cmake.in | ||||||
|  |     msgpack-config.cmake | ||||||
|  |     INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | INSTALL (EXPORT msgpack-targets | ||||||
|  |     FILE | ||||||
|  |         msgpack-targets.cmake | ||||||
|  |     DESTINATION | ||||||
|  |         "${CMAKE_INSTALL_CMAKEDIR}" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | INSTALL ( | ||||||
|  |     FILES | ||||||
|  |         "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config.cmake" | ||||||
|  |         "${CMAKE_CURRENT_BINARY_DIR}/msgpack-config-version.cmake" | ||||||
|  |     DESTINATION | ||||||
|  |         "${CMAKE_INSTALL_CMAKEDIR}" | ||||||
|  | ) | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								COPYING
									
									
									
									
									
								
							| @@ -1,14 +1,5 @@ | |||||||
| Copyright (C) 2008-2010 FURUHASHI Sadayuki | Copyright (C) 2008-2015 FURUHASHI Sadayuki | ||||||
|  |  | ||||||
|    Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|    you may not use this file except in compliance with the License. |  | ||||||
|    You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|    Unless required by applicable law or agreed to in writing, software |  | ||||||
|    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|    See the License for the specific language governing permissions and |  | ||||||
|    limitations under the License. |  | ||||||
|  |  | ||||||
|  |    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) | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								CROSSLANG.md
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								CROSSLANG.md
									
									
									
									
									
								
							| @@ -1,38 +0,0 @@ | |||||||
| MessagePack cross-language test cases |  | ||||||
| ===================================== |  | ||||||
|  |  | ||||||
| ## cases |  | ||||||
|  |  | ||||||
| Valid serialized data are stored in "cases.mpac" and "cases_compact.mpac". |  | ||||||
| These files describe same objects. And "cases.json" describes an array of the described objects. |  | ||||||
|  |  | ||||||
| Thus you can verify your implementations as comparing the objects. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## crosslang |  | ||||||
|  |  | ||||||
| The *crosslang* tool reads serialized data from stdin and writes re-serialize data to stdout. |  | ||||||
|  |  | ||||||
| There are C++ and Ruby implementation of crosslang tool. You can verify your implementation |  | ||||||
| as comparing that implementations. |  | ||||||
|  |  | ||||||
| ### C++ version |  | ||||||
|  |  | ||||||
|     $ cd ../cpp && ./configure && make && make install |  | ||||||
|     or |  | ||||||
|     $ port install msgpack  # MacPorts |  | ||||||
|      |  | ||||||
|     $ g++ -Wall crosslang.cc -lmsgpack -o crosslang |  | ||||||
|  |  | ||||||
|     $ ./crosslang |  | ||||||
|     Usage: ./crosslang [in-file] [out-file] |  | ||||||
|  |  | ||||||
| ### Ruby version |  | ||||||
|  |  | ||||||
|     $ gem install msgpack |  | ||||||
|     or |  | ||||||
|     $ port install rb_msgpack   # MacPorts |  | ||||||
|  |  | ||||||
|     $ ruby crosslang.rb |  | ||||||
|     Usage: crosslang.rb [in-file] [out-file] |  | ||||||
|  |  | ||||||
							
								
								
									
										665
									
								
								Files.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										665
									
								
								Files.cmake
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,665 @@ | |||||||
|  | LIST (APPEND msgpackc_SOURCES | ||||||
|  |     src/objectc.c | ||||||
|  |     src/unpack.c | ||||||
|  |     src/version.c | ||||||
|  |     src/vrefbuffer.c | ||||||
|  |     src/zone.c | ||||||
|  | ) | ||||||
|  | LIST (APPEND msgpackc_HEADERS | ||||||
|  |     include/msgpack.h | ||||||
|  |     include/msgpack/fbuffer.h | ||||||
|  |     include/msgpack/gcc_atomic.h | ||||||
|  |     include/msgpack/object.h | ||||||
|  |     include/msgpack/pack.h | ||||||
|  |     include/msgpack/pack_define.h | ||||||
|  |     include/msgpack/pack_template.h | ||||||
|  |     include/msgpack/predef.h | ||||||
|  |     include/msgpack/predef/architecture.h | ||||||
|  |     include/msgpack/predef/architecture/alpha.h | ||||||
|  |     include/msgpack/predef/architecture/arm.h | ||||||
|  |     include/msgpack/predef/architecture/blackfin.h | ||||||
|  |     include/msgpack/predef/architecture/convex.h | ||||||
|  |     include/msgpack/predef/architecture/ia64.h | ||||||
|  |     include/msgpack/predef/architecture/m68k.h | ||||||
|  |     include/msgpack/predef/architecture/mips.h | ||||||
|  |     include/msgpack/predef/architecture/parisc.h | ||||||
|  |     include/msgpack/predef/architecture/ppc.h | ||||||
|  |     include/msgpack/predef/architecture/pyramid.h | ||||||
|  |     include/msgpack/predef/architecture/rs6k.h | ||||||
|  |     include/msgpack/predef/architecture/sparc.h | ||||||
|  |     include/msgpack/predef/architecture/superh.h | ||||||
|  |     include/msgpack/predef/architecture/sys370.h | ||||||
|  |     include/msgpack/predef/architecture/sys390.h | ||||||
|  |     include/msgpack/predef/architecture/x86.h | ||||||
|  |     include/msgpack/predef/architecture/x86/32.h | ||||||
|  |     include/msgpack/predef/architecture/x86/64.h | ||||||
|  |     include/msgpack/predef/architecture/z.h | ||||||
|  |     include/msgpack/predef/compiler.h | ||||||
|  |     include/msgpack/predef/compiler/borland.h | ||||||
|  |     include/msgpack/predef/compiler/clang.h | ||||||
|  |     include/msgpack/predef/compiler/comeau.h | ||||||
|  |     include/msgpack/predef/compiler/compaq.h | ||||||
|  |     include/msgpack/predef/compiler/diab.h | ||||||
|  |     include/msgpack/predef/compiler/digitalmars.h | ||||||
|  |     include/msgpack/predef/compiler/dignus.h | ||||||
|  |     include/msgpack/predef/compiler/edg.h | ||||||
|  |     include/msgpack/predef/compiler/ekopath.h | ||||||
|  |     include/msgpack/predef/compiler/gcc.h | ||||||
|  |     include/msgpack/predef/compiler/gcc_xml.h | ||||||
|  |     include/msgpack/predef/compiler/greenhills.h | ||||||
|  |     include/msgpack/predef/compiler/hp_acc.h | ||||||
|  |     include/msgpack/predef/compiler/iar.h | ||||||
|  |     include/msgpack/predef/compiler/ibm.h | ||||||
|  |     include/msgpack/predef/compiler/intel.h | ||||||
|  |     include/msgpack/predef/compiler/kai.h | ||||||
|  |     include/msgpack/predef/compiler/llvm.h | ||||||
|  |     include/msgpack/predef/compiler/metaware.h | ||||||
|  |     include/msgpack/predef/compiler/metrowerks.h | ||||||
|  |     include/msgpack/predef/compiler/microtec.h | ||||||
|  |     include/msgpack/predef/compiler/mpw.h | ||||||
|  |     include/msgpack/predef/compiler/palm.h | ||||||
|  |     include/msgpack/predef/compiler/pgi.h | ||||||
|  |     include/msgpack/predef/compiler/sgi_mipspro.h | ||||||
|  |     include/msgpack/predef/compiler/sunpro.h | ||||||
|  |     include/msgpack/predef/compiler/tendra.h | ||||||
|  |     include/msgpack/predef/compiler/visualc.h | ||||||
|  |     include/msgpack/predef/compiler/watcom.h | ||||||
|  |     include/msgpack/predef/detail/_cassert.h | ||||||
|  |     include/msgpack/predef/detail/_exception.h | ||||||
|  |     include/msgpack/predef/detail/comp_detected.h | ||||||
|  |     include/msgpack/predef/detail/endian_compat.h | ||||||
|  |     include/msgpack/predef/detail/os_detected.h | ||||||
|  |     include/msgpack/predef/detail/platform_detected.h | ||||||
|  |     include/msgpack/predef/detail/test.h | ||||||
|  |     include/msgpack/predef/detail/test_def.h | ||||||
|  |     include/msgpack/predef/hardware.h | ||||||
|  |     include/msgpack/predef/hardware/simd.h | ||||||
|  |     include/msgpack/predef/hardware/simd/arm.h | ||||||
|  |     include/msgpack/predef/hardware/simd/arm/versions.h | ||||||
|  |     include/msgpack/predef/hardware/simd/ppc.h | ||||||
|  |     include/msgpack/predef/hardware/simd/ppc/versions.h | ||||||
|  |     include/msgpack/predef/hardware/simd/x86.h | ||||||
|  |     include/msgpack/predef/hardware/simd/x86/versions.h | ||||||
|  |     include/msgpack/predef/hardware/simd/x86_amd.h | ||||||
|  |     include/msgpack/predef/hardware/simd/x86_amd/versions.h | ||||||
|  |     include/msgpack/predef/language.h | ||||||
|  |     include/msgpack/predef/language/objc.h | ||||||
|  |     include/msgpack/predef/language/stdc.h | ||||||
|  |     include/msgpack/predef/language/stdcpp.h | ||||||
|  |     include/msgpack/predef/library.h | ||||||
|  |     include/msgpack/predef/library/c.h | ||||||
|  |     include/msgpack/predef/library/c/_prefix.h | ||||||
|  |     include/msgpack/predef/library/c/gnu.h | ||||||
|  |     include/msgpack/predef/library/c/uc.h | ||||||
|  |     include/msgpack/predef/library/c/vms.h | ||||||
|  |     include/msgpack/predef/library/c/zos.h | ||||||
|  |     include/msgpack/predef/library/std.h | ||||||
|  |     include/msgpack/predef/library/std/_prefix.h | ||||||
|  |     include/msgpack/predef/library/std/cxx.h | ||||||
|  |     include/msgpack/predef/library/std/dinkumware.h | ||||||
|  |     include/msgpack/predef/library/std/libcomo.h | ||||||
|  |     include/msgpack/predef/library/std/modena.h | ||||||
|  |     include/msgpack/predef/library/std/msl.h | ||||||
|  |     include/msgpack/predef/library/std/roguewave.h | ||||||
|  |     include/msgpack/predef/library/std/sgi.h | ||||||
|  |     include/msgpack/predef/library/std/stdcpp3.h | ||||||
|  |     include/msgpack/predef/library/std/stlport.h | ||||||
|  |     include/msgpack/predef/library/std/vacpp.h | ||||||
|  |     include/msgpack/predef/make.h | ||||||
|  |     include/msgpack/predef/os.h | ||||||
|  |     include/msgpack/predef/os/aix.h | ||||||
|  |     include/msgpack/predef/os/amigaos.h | ||||||
|  |     include/msgpack/predef/os/android.h | ||||||
|  |     include/msgpack/predef/os/beos.h | ||||||
|  |     include/msgpack/predef/os/bsd.h | ||||||
|  |     include/msgpack/predef/os/bsd/bsdi.h | ||||||
|  |     include/msgpack/predef/os/bsd/dragonfly.h | ||||||
|  |     include/msgpack/predef/os/bsd/free.h | ||||||
|  |     include/msgpack/predef/os/bsd/net.h | ||||||
|  |     include/msgpack/predef/os/bsd/open.h | ||||||
|  |     include/msgpack/predef/os/cygwin.h | ||||||
|  |     include/msgpack/predef/os/haiku.h | ||||||
|  |     include/msgpack/predef/os/hpux.h | ||||||
|  |     include/msgpack/predef/os/ios.h | ||||||
|  |     include/msgpack/predef/os/irix.h | ||||||
|  |     include/msgpack/predef/os/linux.h | ||||||
|  |     include/msgpack/predef/os/macos.h | ||||||
|  |     include/msgpack/predef/os/os400.h | ||||||
|  |     include/msgpack/predef/os/qnxnto.h | ||||||
|  |     include/msgpack/predef/os/solaris.h | ||||||
|  |     include/msgpack/predef/os/unix.h | ||||||
|  |     include/msgpack/predef/os/vms.h | ||||||
|  |     include/msgpack/predef/os/windows.h | ||||||
|  |     include/msgpack/predef/other.h | ||||||
|  |     include/msgpack/predef/other/endian.h | ||||||
|  |     include/msgpack/predef/platform.h | ||||||
|  |     include/msgpack/predef/platform/mingw.h | ||||||
|  |     include/msgpack/predef/platform/windows_desktop.h | ||||||
|  |     include/msgpack/predef/platform/windows_phone.h | ||||||
|  |     include/msgpack/predef/platform/windows_runtime.h | ||||||
|  |     include/msgpack/predef/platform/windows_store.h | ||||||
|  |     include/msgpack/predef/version.h | ||||||
|  |     include/msgpack/predef/version_number.h | ||||||
|  |     include/msgpack/sbuffer.h | ||||||
|  |     include/msgpack/sysdep.h | ||||||
|  |     include/msgpack/unpack.h | ||||||
|  |     include/msgpack/unpack_define.h | ||||||
|  |     include/msgpack/unpack_template.h | ||||||
|  |     include/msgpack/util.h | ||||||
|  |     include/msgpack/version.h | ||||||
|  |     include/msgpack/version_master.h | ||||||
|  |     include/msgpack/vrefbuffer.h | ||||||
|  |     include/msgpack/zbuffer.h | ||||||
|  |     include/msgpack/zone.h | ||||||
|  | ) | ||||||
|  | IF (MSGPACK_ENABLE_CXX) | ||||||
|  |     LIST (APPEND msgpackc_HEADERS | ||||||
|  |         include/msgpack.hpp | ||||||
|  |         include/msgpack/adaptor/adaptor_base.hpp | ||||||
|  |         include/msgpack/adaptor/adaptor_base_decl.hpp | ||||||
|  |         include/msgpack/adaptor/array_ref.hpp | ||||||
|  |         include/msgpack/adaptor/array_ref_decl.hpp | ||||||
|  |         include/msgpack/adaptor/bool.hpp | ||||||
|  |         include/msgpack/adaptor/boost/fusion.hpp | ||||||
|  |         include/msgpack/adaptor/boost/msgpack_variant.hpp | ||||||
|  |         include/msgpack/adaptor/boost/msgpack_variant_decl.hpp | ||||||
|  |         include/msgpack/adaptor/boost/optional.hpp | ||||||
|  |         include/msgpack/adaptor/boost/string_ref.hpp | ||||||
|  |         include/msgpack/adaptor/boost/string_view.hpp | ||||||
|  |         include/msgpack/adaptor/carray.hpp | ||||||
|  |         include/msgpack/adaptor/char_ptr.hpp | ||||||
|  |         include/msgpack/adaptor/check_container_size.hpp | ||||||
|  |         include/msgpack/adaptor/check_container_size_decl.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/array.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/array_char.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/array_unsigned_char.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/forward_list.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/reference_wrapper.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/shared_ptr.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/tuple.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/unique_ptr.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/unordered_map.hpp | ||||||
|  |         include/msgpack/adaptor/cpp11/unordered_set.hpp | ||||||
|  |         include/msgpack/adaptor/cpp17/optional.hpp | ||||||
|  |         include/msgpack/adaptor/cpp17/string_view.hpp | ||||||
|  |         include/msgpack/adaptor/define.hpp | ||||||
|  |         include/msgpack/adaptor/define_decl.hpp | ||||||
|  |         include/msgpack/adaptor/deque.hpp | ||||||
|  |         include/msgpack/adaptor/ext.hpp | ||||||
|  |         include/msgpack/adaptor/ext_decl.hpp | ||||||
|  |         include/msgpack/adaptor/fixint.hpp | ||||||
|  |         include/msgpack/adaptor/fixint_decl.hpp | ||||||
|  |         include/msgpack/adaptor/float.hpp | ||||||
|  |         include/msgpack/adaptor/int.hpp | ||||||
|  |         include/msgpack/adaptor/int_decl.hpp | ||||||
|  |         include/msgpack/adaptor/list.hpp | ||||||
|  |         include/msgpack/adaptor/map.hpp | ||||||
|  |         include/msgpack/adaptor/map_decl.hpp | ||||||
|  |         include/msgpack/adaptor/msgpack_tuple.hpp | ||||||
|  |         include/msgpack/adaptor/msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/adaptor/nil.hpp | ||||||
|  |         include/msgpack/adaptor/nil_decl.hpp | ||||||
|  |         include/msgpack/adaptor/pair.hpp | ||||||
|  |         include/msgpack/adaptor/raw.hpp | ||||||
|  |         include/msgpack/adaptor/raw_decl.hpp | ||||||
|  |         include/msgpack/adaptor/set.hpp | ||||||
|  |         include/msgpack/adaptor/size_equal_only.hpp | ||||||
|  |         include/msgpack/adaptor/size_equal_only_decl.hpp | ||||||
|  |         include/msgpack/adaptor/string.hpp | ||||||
|  |         include/msgpack/adaptor/tr1/unordered_map.hpp | ||||||
|  |         include/msgpack/adaptor/tr1/unordered_set.hpp | ||||||
|  |         include/msgpack/adaptor/v4raw.hpp | ||||||
|  |         include/msgpack/adaptor/v4raw_decl.hpp | ||||||
|  |         include/msgpack/adaptor/vector.hpp | ||||||
|  |         include/msgpack/adaptor/vector_bool.hpp | ||||||
|  |         include/msgpack/adaptor/vector_char.hpp | ||||||
|  |         include/msgpack/adaptor/vector_unsigned_char.hpp | ||||||
|  |         include/msgpack/cpp_config.hpp | ||||||
|  |         include/msgpack/cpp_config_decl.hpp | ||||||
|  |         include/msgpack/fbuffer.hpp | ||||||
|  |         include/msgpack/fbuffer_decl.hpp | ||||||
|  |         include/msgpack/gcc_atomic.hpp | ||||||
|  |         include/msgpack/iterator.hpp | ||||||
|  |         include/msgpack/iterator_decl.hpp | ||||||
|  |         include/msgpack/meta.hpp | ||||||
|  |         include/msgpack/meta_decl.hpp | ||||||
|  |         include/msgpack/object.hpp | ||||||
|  |         include/msgpack/object_decl.hpp | ||||||
|  |         include/msgpack/object_fwd.hpp | ||||||
|  |         include/msgpack/object_fwd_decl.hpp | ||||||
|  |         include/msgpack/pack.hpp | ||||||
|  |         include/msgpack/pack_decl.hpp | ||||||
|  |         include/msgpack/parse_return.hpp | ||||||
|  |         include/msgpack/preprocessor.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/add.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/dec.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/detail/div_base.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/div.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/inc.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/mod.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/mul.hpp | ||||||
|  |         include/msgpack/preprocessor/arithmetic/sub.hpp | ||||||
|  |         include/msgpack/preprocessor/array.hpp | ||||||
|  |         include/msgpack/preprocessor/array/data.hpp | ||||||
|  |         include/msgpack/preprocessor/array/detail/get_data.hpp | ||||||
|  |         include/msgpack/preprocessor/array/elem.hpp | ||||||
|  |         include/msgpack/preprocessor/array/enum.hpp | ||||||
|  |         include/msgpack/preprocessor/array/insert.hpp | ||||||
|  |         include/msgpack/preprocessor/array/pop_back.hpp | ||||||
|  |         include/msgpack/preprocessor/array/pop_front.hpp | ||||||
|  |         include/msgpack/preprocessor/array/push_back.hpp | ||||||
|  |         include/msgpack/preprocessor/array/push_front.hpp | ||||||
|  |         include/msgpack/preprocessor/array/remove.hpp | ||||||
|  |         include/msgpack/preprocessor/array/replace.hpp | ||||||
|  |         include/msgpack/preprocessor/array/reverse.hpp | ||||||
|  |         include/msgpack/preprocessor/array/size.hpp | ||||||
|  |         include/msgpack/preprocessor/array/to_list.hpp | ||||||
|  |         include/msgpack/preprocessor/array/to_seq.hpp | ||||||
|  |         include/msgpack/preprocessor/array/to_tuple.hpp | ||||||
|  |         include/msgpack/preprocessor/assert_msg.hpp | ||||||
|  |         include/msgpack/preprocessor/cat.hpp | ||||||
|  |         include/msgpack/preprocessor/comma.hpp | ||||||
|  |         include/msgpack/preprocessor/comma_if.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison/equal.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison/greater.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison/greater_equal.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison/less.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison/less_equal.hpp | ||||||
|  |         include/msgpack/preprocessor/comparison/not_equal.hpp | ||||||
|  |         include/msgpack/preprocessor/config/config.hpp | ||||||
|  |         include/msgpack/preprocessor/config/limits.hpp | ||||||
|  |         include/msgpack/preprocessor/control.hpp | ||||||
|  |         include/msgpack/preprocessor/control/deduce_d.hpp | ||||||
|  |         include/msgpack/preprocessor/control/detail/dmc/while.hpp | ||||||
|  |         include/msgpack/preprocessor/control/detail/edg/while.hpp | ||||||
|  |         include/msgpack/preprocessor/control/detail/msvc/while.hpp | ||||||
|  |         include/msgpack/preprocessor/control/detail/while.hpp | ||||||
|  |         include/msgpack/preprocessor/control/expr_if.hpp | ||||||
|  |         include/msgpack/preprocessor/control/expr_iif.hpp | ||||||
|  |         include/msgpack/preprocessor/control/if.hpp | ||||||
|  |         include/msgpack/preprocessor/control/iif.hpp | ||||||
|  |         include/msgpack/preprocessor/control/while.hpp | ||||||
|  |         include/msgpack/preprocessor/debug.hpp | ||||||
|  |         include/msgpack/preprocessor/debug/assert.hpp | ||||||
|  |         include/msgpack/preprocessor/debug/error.hpp | ||||||
|  |         include/msgpack/preprocessor/debug/line.hpp | ||||||
|  |         include/msgpack/preprocessor/dec.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/auto_rec.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/check.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/dmc/auto_rec.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/is_binary.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/is_nullary.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/is_unary.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/null.hpp | ||||||
|  |         include/msgpack/preprocessor/detail/split.hpp | ||||||
|  |         include/msgpack/preprocessor/empty.hpp | ||||||
|  |         include/msgpack/preprocessor/enum.hpp | ||||||
|  |         include/msgpack/preprocessor/enum_params.hpp | ||||||
|  |         include/msgpack/preprocessor/enum_params_with_a_default.hpp | ||||||
|  |         include/msgpack/preprocessor/enum_params_with_defaults.hpp | ||||||
|  |         include/msgpack/preprocessor/enum_shifted.hpp | ||||||
|  |         include/msgpack/preprocessor/enum_shifted_params.hpp | ||||||
|  |         include/msgpack/preprocessor/expand.hpp | ||||||
|  |         include/msgpack/preprocessor/expr_if.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/apply.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/detail/is_empty.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/empty.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/expand.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/identity.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/intercept.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/is_1.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/is_empty.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/is_empty_or_1.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/is_empty_variadic.hpp | ||||||
|  |         include/msgpack/preprocessor/facilities/overload.hpp | ||||||
|  |         include/msgpack/preprocessor/for.hpp | ||||||
|  |         include/msgpack/preprocessor/identity.hpp | ||||||
|  |         include/msgpack/preprocessor/if.hpp | ||||||
|  |         include/msgpack/preprocessor/inc.hpp | ||||||
|  |         include/msgpack/preprocessor/iterate.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/lower1.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/lower2.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/lower3.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/lower4.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/lower5.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/upper1.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/upper2.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/upper3.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/upper4.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/bounds/upper5.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/finish.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/forward1.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/forward2.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/forward3.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/forward4.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/forward5.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/reverse1.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/reverse2.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/reverse3.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/reverse4.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/iter/reverse5.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/local.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/rlocal.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/self.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/detail/start.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/iterate.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/local.hpp | ||||||
|  |         include/msgpack/preprocessor/iteration/self.hpp | ||||||
|  |         include/msgpack/preprocessor/library.hpp | ||||||
|  |         include/msgpack/preprocessor/limits.hpp | ||||||
|  |         include/msgpack/preprocessor/list.hpp | ||||||
|  |         include/msgpack/preprocessor/list/adt.hpp | ||||||
|  |         include/msgpack/preprocessor/list/append.hpp | ||||||
|  |         include/msgpack/preprocessor/list/at.hpp | ||||||
|  |         include/msgpack/preprocessor/list/cat.hpp | ||||||
|  |         include/msgpack/preprocessor/list/detail/dmc/fold_left.hpp | ||||||
|  |         include/msgpack/preprocessor/list/detail/edg/fold_left.hpp | ||||||
|  |         include/msgpack/preprocessor/list/detail/edg/fold_right.hpp | ||||||
|  |         include/msgpack/preprocessor/list/detail/fold_left.hpp | ||||||
|  |         include/msgpack/preprocessor/list/detail/fold_right.hpp | ||||||
|  |         include/msgpack/preprocessor/list/enum.hpp | ||||||
|  |         include/msgpack/preprocessor/list/filter.hpp | ||||||
|  |         include/msgpack/preprocessor/list/first_n.hpp | ||||||
|  |         include/msgpack/preprocessor/list/fold_left.hpp | ||||||
|  |         include/msgpack/preprocessor/list/fold_right.hpp | ||||||
|  |         include/msgpack/preprocessor/list/for_each.hpp | ||||||
|  |         include/msgpack/preprocessor/list/for_each_i.hpp | ||||||
|  |         include/msgpack/preprocessor/list/for_each_product.hpp | ||||||
|  |         include/msgpack/preprocessor/list/rest_n.hpp | ||||||
|  |         include/msgpack/preprocessor/list/reverse.hpp | ||||||
|  |         include/msgpack/preprocessor/list/size.hpp | ||||||
|  |         include/msgpack/preprocessor/list/to_array.hpp | ||||||
|  |         include/msgpack/preprocessor/list/to_seq.hpp | ||||||
|  |         include/msgpack/preprocessor/list/to_tuple.hpp | ||||||
|  |         include/msgpack/preprocessor/list/transform.hpp | ||||||
|  |         include/msgpack/preprocessor/logical.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/and.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/bitand.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/bitnor.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/bitor.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/bitxor.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/bool.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/compl.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/nor.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/not.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/or.hpp | ||||||
|  |         include/msgpack/preprocessor/logical/xor.hpp | ||||||
|  |         include/msgpack/preprocessor/max.hpp | ||||||
|  |         include/msgpack/preprocessor/min.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/comma.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/comma_if.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/detail/is_begin_parens.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/is_begin_parens.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/paren.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/paren_if.hpp | ||||||
|  |         include/msgpack/preprocessor/punctuation/remove_parens.hpp | ||||||
|  |         include/msgpack/preprocessor/repeat.hpp | ||||||
|  |         include/msgpack/preprocessor/repeat_2nd.hpp | ||||||
|  |         include/msgpack/preprocessor/repeat_3rd.hpp | ||||||
|  |         include/msgpack/preprocessor/repeat_from_to.hpp | ||||||
|  |         include/msgpack/preprocessor/repeat_from_to_2nd.hpp | ||||||
|  |         include/msgpack/preprocessor/repeat_from_to_3rd.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/deduce_r.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/deduce_z.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/detail/dmc/for.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/detail/edg/for.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/detail/for.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/detail/msvc/for.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_binary_params.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_params.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_params_with_a_default.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_params_with_defaults.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_shifted.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_shifted_binary_params.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_shifted_params.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_trailing.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_trailing_binary_params.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/enum_trailing_params.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/for.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/repeat.hpp | ||||||
|  |         include/msgpack/preprocessor/repetition/repeat_from_to.hpp | ||||||
|  |         include/msgpack/preprocessor/selection.hpp | ||||||
|  |         include/msgpack/preprocessor/selection/max.hpp | ||||||
|  |         include/msgpack/preprocessor/selection/min.hpp | ||||||
|  |         include/msgpack/preprocessor/seq.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/cat.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/detail/binary_transform.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/detail/is_empty.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/detail/split.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/elem.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/enum.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/filter.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/first_n.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/fold_left.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/fold_right.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/for_each.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/for_each_i.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/for_each_product.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/insert.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/pop_back.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/pop_front.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/push_back.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/push_front.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/remove.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/replace.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/rest_n.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/reverse.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/seq.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/size.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/subseq.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/to_array.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/to_list.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/to_tuple.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/transform.hpp | ||||||
|  |         include/msgpack/preprocessor/seq/variadic_seq_to_seq.hpp | ||||||
|  |         include/msgpack/preprocessor/slot.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/counter.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/counter.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/def.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/shared.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/slot1.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/slot2.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/slot3.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/slot4.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/detail/slot5.hpp | ||||||
|  |         include/msgpack/preprocessor/slot/slot.hpp | ||||||
|  |         include/msgpack/preprocessor/stringize.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/detail/is_single_return.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/eat.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/elem.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/enum.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/insert.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/pop_back.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/pop_front.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/push_back.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/push_front.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/rem.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/remove.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/replace.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/reverse.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/size.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/to_array.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/to_list.hpp | ||||||
|  |         include/msgpack/preprocessor/tuple/to_seq.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/detail/is_single_return.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/elem.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/size.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/to_array.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/to_list.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/to_seq.hpp | ||||||
|  |         include/msgpack/preprocessor/variadic/to_tuple.hpp | ||||||
|  |         include/msgpack/preprocessor/while.hpp | ||||||
|  |         include/msgpack/preprocessor/wstringize.hpp | ||||||
|  |         include/msgpack/sbuffer.hpp | ||||||
|  |         include/msgpack/sbuffer_decl.hpp | ||||||
|  |         include/msgpack/type.hpp | ||||||
|  |         include/msgpack/unpack.hpp | ||||||
|  |         include/msgpack/unpack_decl.hpp | ||||||
|  |         include/msgpack/unpack_exception.hpp | ||||||
|  |         include/msgpack/v1/adaptor/adaptor_base.hpp | ||||||
|  |         include/msgpack/v1/adaptor/adaptor_base_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/array_ref.hpp | ||||||
|  |         include/msgpack/v1/adaptor/array_ref_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/bool.hpp | ||||||
|  |         include/msgpack/v1/adaptor/boost/fusion.hpp | ||||||
|  |         include/msgpack/v1/adaptor/boost/msgpack_variant.hpp | ||||||
|  |         include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/boost/optional.hpp | ||||||
|  |         include/msgpack/v1/adaptor/boost/string_ref.hpp | ||||||
|  |         include/msgpack/v1/adaptor/boost/string_view.hpp | ||||||
|  |         include/msgpack/v1/adaptor/carray.hpp | ||||||
|  |         include/msgpack/v1/adaptor/char_ptr.hpp | ||||||
|  |         include/msgpack/v1/adaptor/check_container_size.hpp | ||||||
|  |         include/msgpack/v1/adaptor/check_container_size_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/array.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/array_char.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/forward_list.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/reference_wrapper.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/shared_ptr.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/tuple.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/unique_ptr.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/unordered_map.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp11/unordered_set.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp17/optional.hpp | ||||||
|  |         include/msgpack/v1/adaptor/cpp17/string_view.hpp | ||||||
|  |         include/msgpack/v1/adaptor/define.hpp | ||||||
|  |         include/msgpack/v1/adaptor/define_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/deque.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp03_define_array.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp03_define_map.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp11_define_array.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp11_define_array_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp11_define_map.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp11_define_map_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp | ||||||
|  |         include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/ext.hpp | ||||||
|  |         include/msgpack/v1/adaptor/ext_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/fixint.hpp | ||||||
|  |         include/msgpack/v1/adaptor/fixint_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/float.hpp | ||||||
|  |         include/msgpack/v1/adaptor/int.hpp | ||||||
|  |         include/msgpack/v1/adaptor/int_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/list.hpp | ||||||
|  |         include/msgpack/v1/adaptor/map.hpp | ||||||
|  |         include/msgpack/v1/adaptor/map_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/msgpack_tuple.hpp | ||||||
|  |         include/msgpack/v1/adaptor/msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/nil.hpp | ||||||
|  |         include/msgpack/v1/adaptor/nil_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/pair.hpp | ||||||
|  |         include/msgpack/v1/adaptor/raw.hpp | ||||||
|  |         include/msgpack/v1/adaptor/raw_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/set.hpp | ||||||
|  |         include/msgpack/v1/adaptor/size_equal_only.hpp | ||||||
|  |         include/msgpack/v1/adaptor/size_equal_only_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/string.hpp | ||||||
|  |         include/msgpack/v1/adaptor/tr1/unordered_map.hpp | ||||||
|  |         include/msgpack/v1/adaptor/tr1/unordered_set.hpp | ||||||
|  |         include/msgpack/v1/adaptor/v4raw.hpp | ||||||
|  |         include/msgpack/v1/adaptor/v4raw_decl.hpp | ||||||
|  |         include/msgpack/v1/adaptor/vector.hpp | ||||||
|  |         include/msgpack/v1/adaptor/vector_bool.hpp | ||||||
|  |         include/msgpack/v1/adaptor/vector_char.hpp | ||||||
|  |         include/msgpack/v1/adaptor/vector_unsigned_char.hpp | ||||||
|  |         include/msgpack/v1/cpp_config.hpp | ||||||
|  |         include/msgpack/v1/cpp_config_decl.hpp | ||||||
|  |         include/msgpack/v1/detail/cpp03_zone.hpp | ||||||
|  |         include/msgpack/v1/detail/cpp03_zone_decl.hpp | ||||||
|  |         include/msgpack/v1/detail/cpp11_zone.hpp | ||||||
|  |         include/msgpack/v1/detail/cpp11_zone_decl.hpp | ||||||
|  |         include/msgpack/v1/fbuffer.hpp | ||||||
|  |         include/msgpack/v1/fbuffer_decl.hpp | ||||||
|  |         include/msgpack/v1/iterator.hpp | ||||||
|  |         include/msgpack/v1/iterator_decl.hpp | ||||||
|  |         include/msgpack/v1/meta.hpp | ||||||
|  |         include/msgpack/v1/meta_decl.hpp | ||||||
|  |         include/msgpack/v1/object.hpp | ||||||
|  |         include/msgpack/v1/object_decl.hpp | ||||||
|  |         include/msgpack/v1/object_fwd.hpp | ||||||
|  |         include/msgpack/v1/object_fwd_decl.hpp | ||||||
|  |         include/msgpack/v1/pack.hpp | ||||||
|  |         include/msgpack/v1/pack_decl.hpp | ||||||
|  |         include/msgpack/v1/parse_return.hpp | ||||||
|  |         include/msgpack/v1/preprocessor.hpp | ||||||
|  |         include/msgpack/v1/sbuffer.hpp | ||||||
|  |         include/msgpack/v1/sbuffer_decl.hpp | ||||||
|  |         include/msgpack/v1/unpack.hpp | ||||||
|  |         include/msgpack/v1/unpack_decl.hpp | ||||||
|  |         include/msgpack/v1/unpack_exception.hpp | ||||||
|  |         include/msgpack/v1/version.hpp | ||||||
|  |         include/msgpack/v1/versioning.hpp | ||||||
|  |         include/msgpack/v1/vrefbuffer.hpp | ||||||
|  |         include/msgpack/v1/vrefbuffer_decl.hpp | ||||||
|  |         include/msgpack/v1/zbuffer.hpp | ||||||
|  |         include/msgpack/v1/zbuffer_decl.hpp | ||||||
|  |         include/msgpack/v1/zone.hpp | ||||||
|  |         include/msgpack/v1/zone_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/adaptor_base.hpp | ||||||
|  |         include/msgpack/v2/adaptor/adaptor_base_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/array_ref_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/check_container_size_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/define_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/detail/cpp03_define_array_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/detail/cpp03_define_map_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/detail/cpp03_msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/detail/cpp11_define_array_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/detail/cpp11_define_map_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/detail/cpp11_msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/ext_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/fixint_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/int_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/map_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/msgpack_tuple_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/nil_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/raw_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/size_equal_only_decl.hpp | ||||||
|  |         include/msgpack/v2/adaptor/v4raw_decl.hpp | ||||||
|  |         include/msgpack/v2/cpp_config_decl.hpp | ||||||
|  |         include/msgpack/v2/create_object_visitor.hpp | ||||||
|  |         include/msgpack/v2/detail/cpp03_zone_decl.hpp | ||||||
|  |         include/msgpack/v2/detail/cpp11_zone_decl.hpp | ||||||
|  |         include/msgpack/v2/fbuffer_decl.hpp | ||||||
|  |         include/msgpack/v2/iterator_decl.hpp | ||||||
|  |         include/msgpack/v2/meta_decl.hpp | ||||||
|  |         include/msgpack/v2/null_visitor.hpp | ||||||
|  |         include/msgpack/v2/object.hpp | ||||||
|  |         include/msgpack/v2/object_decl.hpp | ||||||
|  |         include/msgpack/v2/object_fwd.hpp | ||||||
|  |         include/msgpack/v2/object_fwd_decl.hpp | ||||||
|  |         include/msgpack/v2/pack_decl.hpp | ||||||
|  |         include/msgpack/v2/parse.hpp | ||||||
|  |         include/msgpack/v2/parse_return.hpp | ||||||
|  |         include/msgpack/v2/sbuffer_decl.hpp | ||||||
|  |         include/msgpack/v2/unpack.hpp | ||||||
|  |         include/msgpack/v2/unpack_decl.hpp | ||||||
|  |         include/msgpack/v2/vrefbuffer_decl.hpp | ||||||
|  |         include/msgpack/v2/x3_parse.hpp | ||||||
|  |         include/msgpack/v2/x3_unpack.hpp | ||||||
|  |         include/msgpack/v2/zbuffer_decl.hpp | ||||||
|  |         include/msgpack/v2/zone_decl.hpp | ||||||
|  |         include/msgpack/version.hpp | ||||||
|  |         include/msgpack/versioning.hpp | ||||||
|  |         include/msgpack/vrefbuffer.hpp | ||||||
|  |         include/msgpack/vrefbuffer_decl.hpp | ||||||
|  |         include/msgpack/zbuffer.hpp | ||||||
|  |         include/msgpack/zbuffer_decl.hpp | ||||||
|  |         include/msgpack/zone.hpp | ||||||
|  |         include/msgpack/zone_decl.hpp | ||||||
|  |     ) | ||||||
|  | ENDIF () | ||||||
							
								
								
									
										202
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										202
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,202 +0,0 @@ | |||||||
|  |  | ||||||
|                                  Apache License |  | ||||||
|                            Version 2.0, January 2004 |  | ||||||
|                         http://www.apache.org/licenses/ |  | ||||||
|  |  | ||||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |  | ||||||
|  |  | ||||||
|    1. Definitions. |  | ||||||
|  |  | ||||||
|       "License" shall mean the terms and conditions for use, reproduction, |  | ||||||
|       and distribution as defined by Sections 1 through 9 of this document. |  | ||||||
|  |  | ||||||
|       "Licensor" shall mean the copyright owner or entity authorized by |  | ||||||
|       the copyright owner that is granting the License. |  | ||||||
|  |  | ||||||
|       "Legal Entity" shall mean the union of the acting entity and all |  | ||||||
|       other entities that control, are controlled by, or are under common |  | ||||||
|       control with that entity. For the purposes of this definition, |  | ||||||
|       "control" means (i) the power, direct or indirect, to cause the |  | ||||||
|       direction or management of such entity, whether by contract or |  | ||||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the |  | ||||||
|       outstanding shares, or (iii) beneficial ownership of such entity. |  | ||||||
|  |  | ||||||
|       "You" (or "Your") shall mean an individual or Legal Entity |  | ||||||
|       exercising permissions granted by this License. |  | ||||||
|  |  | ||||||
|       "Source" form shall mean the preferred form for making modifications, |  | ||||||
|       including but not limited to software source code, documentation |  | ||||||
|       source, and configuration files. |  | ||||||
|  |  | ||||||
|       "Object" form shall mean any form resulting from mechanical |  | ||||||
|       transformation or translation of a Source form, including but |  | ||||||
|       not limited to compiled object code, generated documentation, |  | ||||||
|       and conversions to other media types. |  | ||||||
|  |  | ||||||
|       "Work" shall mean the work of authorship, whether in Source or |  | ||||||
|       Object form, made available under the License, as indicated by a |  | ||||||
|       copyright notice that is included in or attached to the work |  | ||||||
|       (an example is provided in the Appendix below). |  | ||||||
|  |  | ||||||
|       "Derivative Works" shall mean any work, whether in Source or Object |  | ||||||
|       form, that is based on (or derived from) the Work and for which the |  | ||||||
|       editorial revisions, annotations, elaborations, or other modifications |  | ||||||
|       represent, as a whole, an original work of authorship. For the purposes |  | ||||||
|       of this License, Derivative Works shall not include works that remain |  | ||||||
|       separable from, or merely link (or bind by name) to the interfaces of, |  | ||||||
|       the Work and Derivative Works thereof. |  | ||||||
|  |  | ||||||
|       "Contribution" shall mean any work of authorship, including |  | ||||||
|       the original version of the Work and any modifications or additions |  | ||||||
|       to that Work or Derivative Works thereof, that is intentionally |  | ||||||
|       submitted to Licensor for inclusion in the Work by the copyright owner |  | ||||||
|       or by an individual or Legal Entity authorized to submit on behalf of |  | ||||||
|       the copyright owner. For the purposes of this definition, "submitted" |  | ||||||
|       means any form of electronic, verbal, or written communication sent |  | ||||||
|       to the Licensor or its representatives, including but not limited to |  | ||||||
|       communication on electronic mailing lists, source code control systems, |  | ||||||
|       and issue tracking systems that are managed by, or on behalf of, the |  | ||||||
|       Licensor for the purpose of discussing and improving the Work, but |  | ||||||
|       excluding communication that is conspicuously marked or otherwise |  | ||||||
|       designated in writing by the copyright owner as "Not a Contribution." |  | ||||||
|  |  | ||||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity |  | ||||||
|       on behalf of whom a Contribution has been received by Licensor and |  | ||||||
|       subsequently incorporated within the Work. |  | ||||||
|  |  | ||||||
|    2. Grant of Copyright License. Subject to the terms and conditions of |  | ||||||
|       this License, each Contributor hereby grants to You a perpetual, |  | ||||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable |  | ||||||
|       copyright license to reproduce, prepare Derivative Works of, |  | ||||||
|       publicly display, publicly perform, sublicense, and distribute the |  | ||||||
|       Work and such Derivative Works in Source or Object form. |  | ||||||
|  |  | ||||||
|    3. Grant of Patent License. Subject to the terms and conditions of |  | ||||||
|       this License, each Contributor hereby grants to You a perpetual, |  | ||||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable |  | ||||||
|       (except as stated in this section) patent license to make, have made, |  | ||||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, |  | ||||||
|       where such license applies only to those patent claims licensable |  | ||||||
|       by such Contributor that are necessarily infringed by their |  | ||||||
|       Contribution(s) alone or by combination of their Contribution(s) |  | ||||||
|       with the Work to which such Contribution(s) was submitted. If You |  | ||||||
|       institute patent litigation against any entity (including a |  | ||||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work |  | ||||||
|       or a Contribution incorporated within the Work constitutes direct |  | ||||||
|       or contributory patent infringement, then any patent licenses |  | ||||||
|       granted to You under this License for that Work shall terminate |  | ||||||
|       as of the date such litigation is filed. |  | ||||||
|  |  | ||||||
|    4. Redistribution. You may reproduce and distribute copies of the |  | ||||||
|       Work or Derivative Works thereof in any medium, with or without |  | ||||||
|       modifications, and in Source or Object form, provided that You |  | ||||||
|       meet the following conditions: |  | ||||||
|  |  | ||||||
|       (a) You must give any other recipients of the Work or |  | ||||||
|           Derivative Works a copy of this License; and |  | ||||||
|  |  | ||||||
|       (b) You must cause any modified files to carry prominent notices |  | ||||||
|           stating that You changed the files; and |  | ||||||
|  |  | ||||||
|       (c) You must retain, in the Source form of any Derivative Works |  | ||||||
|           that You distribute, all copyright, patent, trademark, and |  | ||||||
|           attribution notices from the Source form of the Work, |  | ||||||
|           excluding those notices that do not pertain to any part of |  | ||||||
|           the Derivative Works; and |  | ||||||
|  |  | ||||||
|       (d) If the Work includes a "NOTICE" text file as part of its |  | ||||||
|           distribution, then any Derivative Works that You distribute must |  | ||||||
|           include a readable copy of the attribution notices contained |  | ||||||
|           within such NOTICE file, excluding those notices that do not |  | ||||||
|           pertain to any part of the Derivative Works, in at least one |  | ||||||
|           of the following places: within a NOTICE text file distributed |  | ||||||
|           as part of the Derivative Works; within the Source form or |  | ||||||
|           documentation, if provided along with the Derivative Works; or, |  | ||||||
|           within a display generated by the Derivative Works, if and |  | ||||||
|           wherever such third-party notices normally appear. The contents |  | ||||||
|           of the NOTICE file are for informational purposes only and |  | ||||||
|           do not modify the License. You may add Your own attribution |  | ||||||
|           notices within Derivative Works that You distribute, alongside |  | ||||||
|           or as an addendum to the NOTICE text from the Work, provided |  | ||||||
|           that such additional attribution notices cannot be construed |  | ||||||
|           as modifying the License. |  | ||||||
|  |  | ||||||
|       You may add Your own copyright statement to Your modifications and |  | ||||||
|       may provide additional or different license terms and conditions |  | ||||||
|       for use, reproduction, or distribution of Your modifications, or |  | ||||||
|       for any such Derivative Works as a whole, provided Your use, |  | ||||||
|       reproduction, and distribution of the Work otherwise complies with |  | ||||||
|       the conditions stated in this License. |  | ||||||
|  |  | ||||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, |  | ||||||
|       any Contribution intentionally submitted for inclusion in the Work |  | ||||||
|       by You to the Licensor shall be under the terms and conditions of |  | ||||||
|       this License, without any additional terms or conditions. |  | ||||||
|       Notwithstanding the above, nothing herein shall supersede or modify |  | ||||||
|       the terms of any separate license agreement you may have executed |  | ||||||
|       with Licensor regarding such Contributions. |  | ||||||
|  |  | ||||||
|    6. Trademarks. This License does not grant permission to use the trade |  | ||||||
|       names, trademarks, service marks, or product names of the Licensor, |  | ||||||
|       except as required for reasonable and customary use in describing the |  | ||||||
|       origin of the Work and reproducing the content of the NOTICE file. |  | ||||||
|  |  | ||||||
|    7. Disclaimer of Warranty. Unless required by applicable law or |  | ||||||
|       agreed to in writing, Licensor provides the Work (and each |  | ||||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, |  | ||||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |  | ||||||
|       implied, including, without limitation, any warranties or conditions |  | ||||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |  | ||||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the |  | ||||||
|       appropriateness of using or redistributing the Work and assume any |  | ||||||
|       risks associated with Your exercise of permissions under this License. |  | ||||||
|  |  | ||||||
|    8. Limitation of Liability. In no event and under no legal theory, |  | ||||||
|       whether in tort (including negligence), contract, or otherwise, |  | ||||||
|       unless required by applicable law (such as deliberate and grossly |  | ||||||
|       negligent acts) or agreed to in writing, shall any Contributor be |  | ||||||
|       liable to You for damages, including any direct, indirect, special, |  | ||||||
|       incidental, or consequential damages of any character arising as a |  | ||||||
|       result of this License or out of the use or inability to use the |  | ||||||
|       Work (including but not limited to damages for loss of goodwill, |  | ||||||
|       work stoppage, computer failure or malfunction, or any and all |  | ||||||
|       other commercial damages or losses), even if such Contributor |  | ||||||
|       has been advised of the possibility of such damages. |  | ||||||
|  |  | ||||||
|    9. Accepting Warranty or Additional Liability. While redistributing |  | ||||||
|       the Work or Derivative Works thereof, You may choose to offer, |  | ||||||
|       and charge a fee for, acceptance of support, warranty, indemnity, |  | ||||||
|       or other liability obligations and/or rights consistent with this |  | ||||||
|       License. However, in accepting such obligations, You may act only |  | ||||||
|       on Your own behalf and on Your sole responsibility, not on behalf |  | ||||||
|       of any other Contributor, and only if You agree to indemnify, |  | ||||||
|       defend, and hold each Contributor harmless for any liability |  | ||||||
|       incurred by, or claims asserted against, such Contributor by reason |  | ||||||
|       of your accepting any such warranty or additional liability. |  | ||||||
|  |  | ||||||
|    END OF TERMS AND CONDITIONS |  | ||||||
|  |  | ||||||
|    APPENDIX: How to apply the Apache License to your work. |  | ||||||
|  |  | ||||||
|       To apply the Apache License to your work, attach the following |  | ||||||
|       boilerplate notice, with the fields enclosed by brackets "[]" |  | ||||||
|       replaced with your own identifying information. (Don't include |  | ||||||
|       the brackets!)  The text should be enclosed in the appropriate |  | ||||||
|       comment syntax for the file format. We also recommend that a |  | ||||||
|       file or class name and description of purpose be included on the |  | ||||||
|       same "printed page" as the copyright notice for easier |  | ||||||
|       identification within third-party archives. |  | ||||||
|  |  | ||||||
|    Copyright [yyyy] [name of copyright owner] |  | ||||||
|  |  | ||||||
|    Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|    you may not use this file except in compliance with the License. |  | ||||||
|    You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|    Unless required by applicable law or agreed to in writing, software |  | ||||||
|    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|    See the License for the specific language governing permissions and |  | ||||||
|    limitations under the License. |  | ||||||
							
								
								
									
										23
									
								
								LICENSE_1_0.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								LICENSE_1_0.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | Boost Software License - Version 1.0 - August 17th, 2003 | ||||||
|  |  | ||||||
|  | Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | do so, all subject to the following: | ||||||
|  |  | ||||||
|  | The copyright notices in the Software and this entire statement, including | ||||||
|  | the above license grant, this restriction and the following disclaimer, | ||||||
|  | must be included in all copies of the Software, in whole or in part, and | ||||||
|  | all derivative works of the Software, unless such copies or derivative | ||||||
|  | works are solely in the form of machine-executable object code generated by | ||||||
|  | a source language processor. | ||||||
|  |  | ||||||
|  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | DEALINGS IN THE SOFTWARE. | ||||||
							
								
								
									
										19
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -1,19 +0,0 @@ | |||||||
| SUBDIRS = src test |  | ||||||
|  |  | ||||||
| DOC_FILES = \ |  | ||||||
| 		README.md \ |  | ||||||
| 		LICENSE \ |  | ||||||
| 		NOTICE \ |  | ||||||
| 		msgpack_vc8.vcproj \ |  | ||||||
| 		msgpack_vc8.sln |  | ||||||
|  |  | ||||||
| EXTRA_DIST = \ |  | ||||||
| 		$(DOC_FILES) CMakeLists.txt test/CMakeLists.txt example |  | ||||||
|  |  | ||||||
| pkgconfigdir = $(libdir)/pkgconfig |  | ||||||
| pkgconfig_DATA = msgpack.pc |  | ||||||
|  |  | ||||||
| doxygen: |  | ||||||
| 	./preprocess clean |  | ||||||
| 	cd src && $(MAKE) doxygen |  | ||||||
| 	./preprocess |  | ||||||
							
								
								
									
										34
									
								
								NOTICE
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								NOTICE
									
									
									
									
									
								
							| @@ -1,5 +1,9 @@ | |||||||
| This product bundles Boost Predef, which is available under a | This product bundles Boost Predef and Boost Preprocessor. | ||||||
| Boost Software License - Version 1.0.  For details, see the following files | They are 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) | ||||||
|  |  | ||||||
|  | For details, see the following files: | ||||||
|  |  | ||||||
| external/boost/predef | external/boost/predef | ||||||
| include/msgpack/predef.h | include/msgpack/predef.h | ||||||
| @@ -8,29 +12,3 @@ include/msgpack/predef/* | |||||||
| external/boost/preprocessor | external/boost/preprocessor | ||||||
| include/msgpack/preprocessor.hpp | include/msgpack/preprocessor.hpp | ||||||
| include/msgpack/preprocessor/* | include/msgpack/preprocessor/* | ||||||
|  |  | ||||||
| --------------------------------------------------------------------------- |  | ||||||
| Boost Software License - Version 1.0 - August 17th, 2003 |  | ||||||
|  |  | ||||||
| Permission is hereby granted, free of charge, to any person or organization |  | ||||||
| obtaining a copy of the software and accompanying documentation covered by |  | ||||||
| this license (the "Software") to use, reproduce, display, distribute, |  | ||||||
| execute, and transmit the Software, and to prepare derivative works of the |  | ||||||
| Software, and to permit third-parties to whom the Software is furnished to |  | ||||||
| do so, all subject to the following: |  | ||||||
|  |  | ||||||
| The copyright notices in the Software and this entire statement, including |  | ||||||
| the above license grant, this restriction and the following disclaimer, |  | ||||||
| must be included in all copies of the Software, in whole or in part, and |  | ||||||
| all derivative works of the Software, unless such copies or derivative |  | ||||||
| works are solely in the form of machine-executable object code generated by |  | ||||||
| a source language processor. |  | ||||||
|  |  | ||||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT |  | ||||||
| SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE |  | ||||||
| FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, |  | ||||||
| ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |  | ||||||
| DEALINGS IN THE SOFTWARE. |  | ||||||
| --------------------------------------------------------------------------- |  | ||||||
|   | |||||||
| @@ -36,9 +36,9 @@ On Gentoo Linux, you can use emerge. Install [dev-libs/msgpack|http://gentoo-por | |||||||
| On the other UNIX-like platforms, download source package from [Releases|http://msgpack.org/releases/cpp/] and run `./configure && make && make install`. | On the other UNIX-like platforms, download source package from [Releases|http://msgpack.org/releases/cpp/] and run `./configure && make && make install`. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ wget http://msgpack.org/releases/cpp/msgpack-0.5.5.tar.gz | $ wget http://msgpack.org/releases/cpp/msgpack-1.3.0.tar.gz | ||||||
| $ tar zxvf msgpack-0.5.5.tar.gz | $ tar zxvf msgpack-1.3.0.tar.gz | ||||||
| $ cd msgpack-0.5.5 | $ cd msgpack-1.3.0 | ||||||
| $ ./configure | $ ./configure | ||||||
| $ make | $ make | ||||||
| $ sudo make install | $ sudo make install | ||||||
| @@ -88,15 +88,15 @@ int main(void) { | |||||||
|  |  | ||||||
|         /* serializes ["Hello", "MessagePack"]. */ |         /* serializes ["Hello", "MessagePack"]. */ | ||||||
|         msgpack_pack_array(pk, 2); |         msgpack_pack_array(pk, 2); | ||||||
|         msgpack_pack_raw(pk, 5); |         msgpack_pack_bin(pk, 5); | ||||||
|         msgpack_pack_raw_body(pk, "Hello", 5); |         msgpack_pack_bin_body(pk, "Hello", 5); | ||||||
|         msgpack_pack_raw(pk, 11); |         msgpack_pack_bin(pk, 11); | ||||||
|         msgpack_pack_raw_body(pk, "MessagePack", 11); |         msgpack_pack_bin_body(pk, "MessagePack", 11); | ||||||
|  |  | ||||||
|         /* deserializes it. */ |         /* deserializes it. */ | ||||||
|         msgpack_unpacked msg; |         msgpack_unpacked msg; | ||||||
|         msgpack_unpacked_init(&msg); |         msgpack_unpacked_init(&msg); | ||||||
|         bool success = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); |         msgpack_unpack_return ret = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); | ||||||
|  |  | ||||||
|         /* prints the deserialized object. */ |         /* prints the deserialized object. */ | ||||||
|         msgpack_object obj = msg.data; |         msgpack_object obj = msg.data; | ||||||
| @@ -119,7 +119,7 @@ int main(void) { | |||||||
|         /* creates buffer and serializer instance. */ |         /* creates buffer and serializer instance. */ | ||||||
|         msgpack_sbuffer* buffer = msgpack_sbuffer_new(); |         msgpack_sbuffer* buffer = msgpack_sbuffer_new(); | ||||||
|         msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write); |         msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write); | ||||||
|          |  | ||||||
|         int j; |         int j; | ||||||
|  |  | ||||||
|         for(j = 0; j<23; j++) { |         for(j = 0; j<23; j++) { | ||||||
| @@ -128,16 +128,16 @@ int main(void) { | |||||||
|  |  | ||||||
|            /* serializes ["Hello", "MessagePack"]. */ |            /* serializes ["Hello", "MessagePack"]. */ | ||||||
|            msgpack_pack_array(pk, 3); |            msgpack_pack_array(pk, 3); | ||||||
|            msgpack_pack_raw(pk, 5); |            msgpack_pack_bin(pk, 5); | ||||||
|            msgpack_pack_raw_body(pk, "Hello", 5); |            msgpack_pack_bin_body(pk, "Hello", 5); | ||||||
|            msgpack_pack_raw(pk, 11); |            msgpack_pack_bin(pk, 11); | ||||||
|            msgpack_pack_raw_body(pk, "MessagePack", 11); |            msgpack_pack_bin_body(pk, "MessagePack", 11); | ||||||
|            msgpack_pack_int(pk, j); |            msgpack_pack_int(pk, j); | ||||||
|  |  | ||||||
|            /* deserializes it. */ |            /* deserializes it. */ | ||||||
|            msgpack_unpacked msg; |            msgpack_unpacked msg; | ||||||
|            msgpack_unpacked_init(&msg); |            msgpack_unpacked_init(&msg); | ||||||
|            bool success = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); |            msgpack_unpack_return ret = msgpack_unpack_next(&msg, buffer->data, buffer->size, NULL); | ||||||
|  |  | ||||||
|            /* prints the deserialized object. */ |            /* prints the deserialized object. */ | ||||||
|            msgpack_object obj = msg.data; |            msgpack_object obj = msg.data; | ||||||
| @@ -184,7 +184,7 @@ int main(void) { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         /* results: |         /* results: | ||||||
|          * $ gcc stream.cc -lmsgpack -o stream |          * $ gcc stream.cc -lmsgpackc -o stream | ||||||
|          * $ ./stream |          * $ ./stream | ||||||
|          * 1 |          * 1 | ||||||
|          * 2 |          * 2 | ||||||
|   | |||||||
| @@ -31,23 +31,23 @@ int main(void) { | |||||||
|         msgpack::pack(sbuf, vec); |         msgpack::pack(sbuf, vec); | ||||||
|  |  | ||||||
|         // deserialize it. |         // deserialize it. | ||||||
|         msgpack::unpacked msg; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(&msg, sbuf.data(), sbuf.size()); |             msgpack::unpack(sbuf.data(), sbuf.size()); | ||||||
|  |  | ||||||
|         // print the deserialized object. |         // print the deserialized object. | ||||||
|         msgpack::object obj = msg.get(); |         msgpack::object obj = oh.get(); | ||||||
|         std::cout << obj << std::endl;  //=> ["Hello", "MessagePack"] |         std::cout << obj << std::endl;  //=> ["Hello", "MessagePack"] | ||||||
|  |  | ||||||
|         // convert it into statically typed object. |         // convert it into statically typed object. | ||||||
|         std::vector<std::string> rvec; |         std::vector<std::string> rvec; | ||||||
|         obj.convert(&rvec); |         obj.convert(rvec); | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Compile it as follows: | Compile it as follows: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ g++ hello.cc -lmsgpack -o hello | $ g++ -Ipath_to_msgpack/include hello.cc -o hello | ||||||
| $ ./hello | $ ./hello | ||||||
| ["Hello", "MessagePack"] | ["Hello", "MessagePack"] | ||||||
| ``` | ``` | ||||||
| @@ -77,13 +77,13 @@ int main(void) { | |||||||
|         pac.buffer_consumed(buffer.size()); |         pac.buffer_consumed(buffer.size()); | ||||||
|  |  | ||||||
|         // now starts streaming deserialization. |         // now starts streaming deserialization. | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh; | ||||||
|         while(pac.next(&result)) { |         while(pac.next(oh)) { | ||||||
|             std::cout << result.get() << std::endl; |             std::cout << oh.get() << std::endl; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // results: |         // results: | ||||||
|         // $ g++ stream.cc -lmsgpack -o stream |         // $ g++ -Ipath_to_msgpack/include stream.cc -o stream | ||||||
|         // $ ./stream |         // $ ./stream | ||||||
|         // "Log message ... 1" |         // "Log message ... 1" | ||||||
|         // "Log message ... 2" |         // "Log message ... 2" | ||||||
| @@ -147,13 +147,13 @@ int main(void) { | |||||||
|         msgpack::sbuffer sbuf; |         msgpack::sbuffer sbuf; | ||||||
|         msgpack::pack(sbuf, vec); |         msgpack::pack(sbuf, vec); | ||||||
|  |  | ||||||
|         msgpack::unpacked msg; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(&msg, sbuf.data(), sbuf.size()); |             msgpack::unpack(sbuf.data(), sbuf.size()); | ||||||
|  |  | ||||||
|         msgpack::object obj = msg.get(); |         msgpack::object obj = oh.get(); | ||||||
|  |  | ||||||
|         // you can convert object to myclass directly |         // you can convert object to myclass directly | ||||||
|         std::vector<myclass> rvec; |         std::vector<myclass> rvec; | ||||||
|         obj.convert(&rvec); |         obj.convert(rvec); | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
|   | |||||||
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| `msgpack` for C/C++ | `msgpack` for C/C++ | ||||||
| =================== | =================== | ||||||
|  |  | ||||||
| Version 1.2.0 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) | Version 2.1.4 [](https://travis-ci.org/msgpack/msgpack-c) [](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) | ||||||
|  |  | ||||||
| It's like JSON but small and fast. | It's like JSON but small and fast. | ||||||
|  |  | ||||||
| @@ -83,12 +83,11 @@ int main(void) | |||||||
|     // deserialize the buffer into msgpack::object instance. |     // deserialize the buffer into msgpack::object instance. | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::unpacked result; |     msgpack::object_handle oh = | ||||||
|  |         msgpack::unpack(str.data(), str.size()); | ||||||
|  |  | ||||||
|     msgpack::unpack(result, str.data(), str.size()); |     // deserialized object is valid during the msgpack::object_handle instance is alive. | ||||||
|  |     msgpack::object deserialized = oh.get(); | ||||||
|     // deserialized object is valid during the msgpack::unpacked instance alive. |  | ||||||
|     msgpack::object deserialized = result.get(); |  | ||||||
|  |  | ||||||
|     // msgpack::object supports ostream. |     // msgpack::object supports ostream. | ||||||
|     std::cout << deserialized << std::endl; |     std::cout << deserialized << std::endl; | ||||||
| @@ -96,7 +95,7 @@ int main(void) | |||||||
|     // convert msgpack::object instance into the original type. |     // convert msgpack::object instance into the original type. | ||||||
|     // if the type is mismatched, it throws msgpack::type_error exception. |     // if the type is mismatched, it throws msgpack::type_error exception. | ||||||
|     msgpack::type::tuple<int, bool, std::string> dst; |     msgpack::type::tuple<int, bool, std::string> dst; | ||||||
|     deserialized.convert(&dst); |     deserialized.convert(dst); | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| @@ -121,36 +120,7 @@ also install the C and C++ versions of msgpack. | |||||||
|  |  | ||||||
| #### Install from git repository | #### Install from git repository | ||||||
|  |  | ||||||
| ##### Using autotools | ##### Using the Terminal (CLI) | ||||||
|  |  | ||||||
| You will need: |  | ||||||
|  |  | ||||||
|  - `gcc >= 4.1.0` or `clang >= 3.3.0` |  | ||||||
|  - `autoconf >= 2.60` |  | ||||||
|  - `automake >= 1.10` |  | ||||||
|  - `libtool >= 2.2.4` |  | ||||||
|  |  | ||||||
| The build steps below are for C and C++03. If compiling for C++11, |  | ||||||
| add `-std=c++11` to the environmental variable `CXXFLAGS` with |  | ||||||
| `export CXXFLAGS="$CXXFLAGS -std=c++11"` prior to following the |  | ||||||
| directions below. |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| $ git clone https://github.com/msgpack/msgpack-c |  | ||||||
| $ cd msgpack-c |  | ||||||
| $ ./bootstrap |  | ||||||
| $ ./configure |  | ||||||
| $ make |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| You can install the resulting library like this: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| $ sudo make install |  | ||||||
| ``` |  | ||||||
| ##### Using cmake |  | ||||||
|  |  | ||||||
| ###### Using the Terminal (CLI) |  | ||||||
|  |  | ||||||
| You will need: | You will need: | ||||||
|  |  | ||||||
| @@ -173,7 +143,7 @@ execute the following commands: | |||||||
|     $ cmake -DMSGPACK_CXX11=ON . |     $ cmake -DMSGPACK_CXX11=ON . | ||||||
|     $ sudo make install |     $ sudo make install | ||||||
|  |  | ||||||
| ##### GUI on Windows | #### GUI on Windows | ||||||
|  |  | ||||||
| Clone msgpack-c git repository. | Clone msgpack-c git repository. | ||||||
|  |  | ||||||
| @@ -215,5 +185,5 @@ Here's the list of [great contributors](https://github.com/msgpack/msgpack-c/gra | |||||||
| License | License | ||||||
| ------- | ------- | ||||||
|  |  | ||||||
| `msgpack-c` is licensed under the Apache License Version 2.0. See | `msgpack-c` is licensed under the Boost Software License, Version 1.0. See | ||||||
| the [`LICENSE`](./LICENSE) file for details. | the [`LICENSE_1_0.txt`](./LICENSE_1_0.txt) file for details. | ||||||
|   | |||||||
							
								
								
									
										66
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								appveyor.yml
									
									
									
									
									
								
							| @@ -1,42 +1,58 @@ | |||||||
| version: 1.1.0.{build} | version: 2.1.4.{build} | ||||||
| before_build: |  | ||||||
| - appveyor DownloadFile http://googletest.googlecode.com/files/gtest-1.7.0.zip -FileName gtest-1.7.0.zip | image: | ||||||
| - 7z x gtest-1.7.0.zip > NUL | - Visual Studio 2015 | ||||||
| - cd gtest-1.7.0 | environment: | ||||||
|  |   global: | ||||||
|  |     BOOST_ROOT: C:\Libraries\boost_1_60_0 | ||||||
|  |   matrix: | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  |       msvc: '"Visual Studio 10 2010"' | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  |       msvc: '"Visual Studio 11 2012"' | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  |       msvc: '"Visual Studio 12 2013"' | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=ON | ||||||
|  |       boost: -DMSGPACK_BOOST=ON | ||||||
|  |       msvc: '"Visual Studio 14 2015"' | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=ON | ||||||
|  |       msvc: '"Visual Studio 14 2015"' | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=ON | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  |       msvc: '"Visual Studio 14 2015"' | ||||||
|  |     - cpp11: -DMSGPACK_CXX11=OFF | ||||||
|  |       boost: -DMSGPACK_BOOST=OFF | ||||||
|  |       msvc: '"Visual Studio 14 2015"' | ||||||
|  | build_script: | ||||||
|  | - appveyor DownloadFile https://github.com/google/googletest/archive/release-1.7.0.zip -FileName googletest-release-1.7.0.zip | ||||||
|  | - 7z x googletest-release-1.7.0.zip > NUL | ||||||
|  | - cd googletest-release-1.7.0 | ||||||
| - md build | - md build | ||||||
| - cd build | - cd build | ||||||
| - cmake -DBUILD_SHARED_LIBS=ON .. | - cmake -G %msvc% -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_FLAGS=/D_VARIADIC_MAX=10 .. | ||||||
| - cmake --build . --config Release | - cmake --build . --config Release | ||||||
| - cd .. | - cd .. | ||||||
| - cd .. | - cd .. | ||||||
| - appveyor DownloadFile http://zlib.net/zlib-1.2.8.tar.gz -FileName zlib-1.2.8.tar.gz | - appveyor DownloadFile http://zlib.net/zlib-1.2.11.tar.gz -FileName zlib-1.2.11.tar.gz | ||||||
| - 7z x zlib-1.2.8.tar.gz > NUL | - 7z x zlib-1.2.11.tar.gz > NUL | ||||||
| - 7z x zlib-1.2.8.tar > NUL | - 7z x zlib-1.2.11.tar > NUL | ||||||
| - cd zlib-1.2.8 | - cd zlib-1.2.11 | ||||||
| - md build | - md build | ||||||
| - cd build | - cd build | ||||||
| - cmake .. | - cmake -G %msvc% .. | ||||||
| - cmake --build . --config Release | - cmake --build . --config Release | ||||||
| - copy zconf.h .. | - copy zconf.h .. | ||||||
| - cd .. | - cd .. | ||||||
| - cd .. | - cd .. | ||||||
|  |  | ||||||
| environment: |  | ||||||
|   matrix: |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=ON |  | ||||||
|       boost: -DMSGPACK_BOOST=ON |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=ON |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=ON |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
|     - cpp11: -DMSGPACK_CXX11=OFF |  | ||||||
|       boost: -DMSGPACK_BOOST=OFF |  | ||||||
| build_script: |  | ||||||
| - md build | - md build | ||||||
| - cd build | - cd build | ||||||
| - cmake %cpp11% %boost% -DMSGPACK_BOOST_DIR=C:\Libraries\\boost_1_58_0 -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8 .. | - cmake -G %msvc% %cpp11% %boost% %x3_parse% -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' .. | ||||||
| - cmake --build . --config Release | - cmake --build . --config Release | ||||||
|  |  | ||||||
| test_script: | test_script: | ||||||
| - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\gtest-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.8\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release | - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release | ||||||
| - ctest -V | - ctest -V | ||||||
|   | |||||||
							
								
								
									
										121
									
								
								bootstrap
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								bootstrap
									
									
									
									
									
								
							| @@ -1,121 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
| # vim:ts=4:sw=4 |  | ||||||
| # Calls autotools to build configure script and Makefile.in. |  | ||||||
| # Generated automatically using bootstrapper 0.2.1 |  | ||||||
| # http://bootstrapper.sourceforge.net/ |  | ||||||
| # |  | ||||||
| # Copyright (C) 2002 Anthony Ventimiglia |  | ||||||
| # |  | ||||||
| # This bootstrap script is free software; you can redistribute  |  | ||||||
| # it and/or modify it under the terms of the GNU General Public  |  | ||||||
| # License as published by the Free Software Foundation; either  |  | ||||||
| # version 2 of the License, or (at your option) any later version. |  | ||||||
| # |  | ||||||
| # |  | ||||||
| # Calls proper programs to create configure script and Makefile.in files. |  | ||||||
| # if run with the --clean option, bootstrap removes files it generates. To |  | ||||||
| # clean all autogenerated files (eg: for cvs imports) first run  |  | ||||||
| # make distclean, then bootstrap --clean |  | ||||||
| # see bootstrapper(1) for more infor |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if test x"$1" = x"--help"; then |  | ||||||
| 	echo "$0: automatic bootstrapping utility for GNU Autotools" |  | ||||||
| 	echo "		cleans up old autogenerated files and runs autoconf," |  | ||||||
| 	echo "		automake and aclocal on local directory" |  | ||||||
| 	echo  |  | ||||||
| 	echo "		--clean		clean up auto-generated files without" |  | ||||||
| 	echo "					creating new scripts" |  | ||||||
| 	echo  |  | ||||||
| 	exit 0 |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| mkdir -p ac |  | ||||||
| test -f AUTHORS   || touch AUTHORS |  | ||||||
| test -f COPYING   || touch COPYING |  | ||||||
| test -f ChangeLog || touch ChangeLog |  | ||||||
| test -f NEWS      || touch NEWS |  | ||||||
| test -f NOTICE    || touch NOTICE |  | ||||||
| test -f README    || cp -f README.md README |  | ||||||
|  |  | ||||||
| ACLOCAL="aclocal" |  | ||||||
| ACLOCAL_FILES="aclocal.m4" |  | ||||||
| ALWAYS_CLEAN="config.status config.log config.cache libtool" |  | ||||||
| AUTOCONF="autoconf" |  | ||||||
| AUTOCONF_FILES="configure" |  | ||||||
| AUTOHEADER="autoheader" |  | ||||||
| AUTOHEADER_FILES="" |  | ||||||
| AUTOMAKE="automake --add-missing --copy" |  | ||||||
| AUTOMAKE_FILES="config.sub stamp-h.in ltmain.sh missing mkinstalldirs install-sh config.guess" |  | ||||||
| CONFIG_AUX_DIR="." |  | ||||||
| CONFIG_FILES="stamp-h ltconfig" |  | ||||||
| CONFIG_HEADER="" |  | ||||||
| if [ x`uname` = x"Darwin" ]; then |  | ||||||
| 	LIBTOOLIZE="glibtoolize --force --copy" |  | ||||||
| else |  | ||||||
| 	LIBTOOLIZE="libtoolize --force --copy" |  | ||||||
| fi |  | ||||||
| LIBTOOLIZE_FILES="config.sub ltmain.sh config.guess" |  | ||||||
| RM="rm" |  | ||||||
| SUBDIRS="[]" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # These are files created by configure, so we'll always clean them |  | ||||||
| for i in $ALWAYS_CLEAN; do |  | ||||||
| 	test -f $i && \ |  | ||||||
| 	$RM $i |  | ||||||
| done |  | ||||||
|  |  | ||||||
| if test x"$1" = x"--clean"; then |  | ||||||
| 	# |  | ||||||
| 	#Clean Files left by previous bootstrap run |  | ||||||
| 	# |  | ||||||
| 	if test -n "$CONFIG_AUX_DIR";  |  | ||||||
| 		then CONFIG_AUX_DIR="$CONFIG_AUX_DIR/" |  | ||||||
| 	fi |  | ||||||
| 	# Clean Libtoolize generated files |  | ||||||
| 	for cf in $LIBTOOLIZE_FILES; do |  | ||||||
| 		cf="$CONFIG_AUX_DIR$cf" |  | ||||||
| 		test -f $cf && \ |  | ||||||
| 		$RM $cf |  | ||||||
| 	done |  | ||||||
| 	#aclocal.m4 created by aclocal |  | ||||||
| 	test -f $ACLOCAL_FILES && $RM $ACLOCAL_FILES |  | ||||||
| 	#Clean Autoheader Generated files |  | ||||||
| 	for cf in $AUTOHEADER_FILES; do |  | ||||||
| 		cf=$CONFIG_AUX_DIR$cf |  | ||||||
| 		test -f $cf && \ |  | ||||||
| 		$RM $cf |  | ||||||
| 	done |  | ||||||
| 	# remove config header (Usaually config.h) |  | ||||||
| 	test -n "$CONFIG_HEADER" && test -f $CONFIG_HEADER && $RM $CONFIG_HEADER |  | ||||||
| 	#Clean Automake generated files |  | ||||||
| 	for cf in $AUTOMAKE_FILES; do |  | ||||||
| 		cf=$CONFIG_AUX_DIR$cf |  | ||||||
| 		test -f $cf && \ |  | ||||||
| 		$RM $cf |  | ||||||
| 	done |  | ||||||
| 	for i in $SUBDIRS; do |  | ||||||
| 		test -f $i/Makefile.in && \ |  | ||||||
| 		$RM $i/Makefile.in |  | ||||||
| 	done |  | ||||||
| 	#Autoconf generated files |  | ||||||
| 	for cf in $AUTOCONF_FILES; do |  | ||||||
| 		test -f $cf && \ |  | ||||||
| 		$RM $cf |  | ||||||
| 	done |  | ||||||
| 	for cf in $CONFIG_FILES; do |  | ||||||
| 		cf="$CONFIG_AUX_DIR$cf" |  | ||||||
| 		test -f $cf && \ |  | ||||||
| 		$RM $cf |  | ||||||
| 	done |  | ||||||
| else |  | ||||||
| 	$LIBTOOLIZE |  | ||||||
| 	$ACLOCAL |  | ||||||
| 	$AUTOHEADER |  | ||||||
| 	$AUTOMAKE |  | ||||||
| 	$AUTOCONF |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1 +0,0 @@ | |||||||
| [false,true,null,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,127,127,255,65535,4294967295,-32,-32,-128,-32768,-2147483648,0.0,-0.0,1.0,-1.0,"a","a","a","","","",[0],[0],[0],[],[],[],{},{},{},{"a":97},{"a":97},{"a":97},[[]],[["a"]]] |  | ||||||
							
								
								
									
										99
									
								
								cases_gen.rb
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								cases_gen.rb
									
									
									
									
									
								
							| @@ -1,99 +0,0 @@ | |||||||
| # |  | ||||||
| # MessagePack format test case |  | ||||||
| # |  | ||||||
| begin |  | ||||||
| require 'rubygems' |  | ||||||
| rescue LoadError |  | ||||||
| end |  | ||||||
| require 'msgpack' |  | ||||||
| require 'json' |  | ||||||
|  |  | ||||||
| source = <<EOF |  | ||||||
| c2                          # false |  | ||||||
| c3                          # true |  | ||||||
| c0                          # nil |  | ||||||
| 00                          # 0 Positive FixNum |  | ||||||
| cc 00                       # 0 uint8 |  | ||||||
| cd 00 00                    # 0 uint16 |  | ||||||
| ce 00 00 00 00              # 0 uint32 |  | ||||||
| cf 00 00 00 00 00 00 00 00  # 0 uint64 |  | ||||||
| d0 00                       # 0 int8 |  | ||||||
| d1 00 00                    # 0 int16 |  | ||||||
| d2 00 00 00 00              # 0 int32 |  | ||||||
| d3 00 00 00 00 00 00 00 00  # 0 int64 |  | ||||||
| ff                          # -1 Negative FixNum |  | ||||||
| d0 ff                       # -1 int8 |  | ||||||
| d1 ff ff                    # -1 int16 |  | ||||||
| d2 ff ff ff ff              # -1 int32 |  | ||||||
| d3 ff ff ff ff ff ff ff ff  # -1 int64 |  | ||||||
| 7f                          # 127 Positive FixNum |  | ||||||
| cc 7f                       # 127 uint8 |  | ||||||
| cd 00 ff                    # 255 uint16 |  | ||||||
| ce 00 00 ff ff              # 65535 uint32 |  | ||||||
| cf 00 00 00 00 ff ff ff ff  # 4294967295 uint64 |  | ||||||
| e0                          # -32 Negative FixNum |  | ||||||
| d0 e0                       # -32 int8 |  | ||||||
| d1 ff 80                    # -128 int16 |  | ||||||
| d2 ff ff 80 00              # -32768 int32 |  | ||||||
| d3 ff ff ff ff 80 00 00 00  # -2147483648 int64 |  | ||||||
| #ca 00 00 00 00              # 0.0 float |  | ||||||
| cb 00 00 00 00 00 00 00 00  # 0.0 double |  | ||||||
| #ca 80 00 00 00              # -0.0 float |  | ||||||
| cb 80 00 00 00 00 00 00 00  # -0.0 double |  | ||||||
| cb 3f f0 00 00 00 00 00 00  # 1.0 double |  | ||||||
| cb bf f0 00 00 00 00 00 00  # -1.0 double |  | ||||||
| a1 61                       # "a" FixRaw |  | ||||||
| da 00 01 61                 # "a" raw 16 |  | ||||||
| db 00 00 00 01 61           # "a" raw 32 |  | ||||||
| a0                          # "" FixRaw |  | ||||||
| da 00 00                    # "" raw 16 |  | ||||||
| db 00 00 00 00              # "" raw 32 |  | ||||||
| 91 00                       # [0] FixArray |  | ||||||
| dc 00 01 00                 # [0] array 16 |  | ||||||
| dd 00 00 00 01 00           # [0] array 32 |  | ||||||
| 90                          # [] FixArray |  | ||||||
| dc 00 00                    # [] array 16 |  | ||||||
| dd 00 00 00 00              # [] array 32 |  | ||||||
| 80                          # {} FixMap |  | ||||||
| de 00 00                    # {} map 16 |  | ||||||
| df 00 00 00 00              # {} map 32 |  | ||||||
| 81 a1 61 61                 # {"a"=>97} FixMap |  | ||||||
| de 00 01 a1 61 61           # {"a"=>97} map 16 |  | ||||||
| df 00 00 00 01 a1 61 61     # {"a"=>97} map 32 |  | ||||||
| 91 90                       # [[]] |  | ||||||
| 91 91 a1 61                 # [["a"]] |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| source.gsub!(/\#.+$/,'') |  | ||||||
| bytes = source.strip.split(/\s+/).map {|x| x.to_i(16) }.pack('C*') |  | ||||||
|  |  | ||||||
| objs = [] |  | ||||||
| compact_bytes = "" |  | ||||||
|  |  | ||||||
| pac = MessagePack::Unpacker.new |  | ||||||
| pac.feed(bytes) |  | ||||||
| pac.each {|obj| |  | ||||||
| 	p obj |  | ||||||
| 	objs << obj |  | ||||||
| 	compact_bytes << obj.to_msgpack |  | ||||||
| } |  | ||||||
|  |  | ||||||
| json = objs.to_json |  | ||||||
|  |  | ||||||
| # self check |  | ||||||
| cpac = MessagePack::Unpacker.new |  | ||||||
| cpac.feed(compact_bytes) |  | ||||||
| cpac.each {|cobj| |  | ||||||
| 	obj = objs.shift |  | ||||||
| 	if obj != cobj |  | ||||||
| 		puts "** SELF CHECK FAILED **" |  | ||||||
| 		puts "expected: #{obj.inspect}" |  | ||||||
| 		puts "actual: #{cobj.inspect}" |  | ||||||
| 		exit 1 |  | ||||||
| 	end |  | ||||||
| } |  | ||||||
|  |  | ||||||
| File.open("cases.mpac","w") {|f| f.write(bytes) } |  | ||||||
| File.open("cases_compact.mpac","w") {|f| f.write(compact_bytes) } |  | ||||||
| File.open("cases.json","w") {|f| f.write(json) } |  | ||||||
|  |  | ||||||
| @@ -1,63 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| ./bootstrap |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ $1 = "cpp11" ] |  | ||||||
| then |  | ||||||
|     cpp11="-std=c++11" |  | ||||||
| else |  | ||||||
|     cpp11="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ $2 = "32" ] |  | ||||||
| then |  | ||||||
|     bit32="-m32" |  | ||||||
| else |  | ||||||
|     bit32="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ $3 = "boost" ] |  | ||||||
| then |  | ||||||
|     boost="-DMSGPACK_USE_BOOST" |  | ||||||
| else |  | ||||||
|     boost="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| ./configure CFLAGS="$bit32" CXXFLAGS="$bit32 $cpp11 $boost -I$4" |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| make |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| make check |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| make install DESTDIR=`pwd`/build/install |  | ||||||
|  |  | ||||||
| ret=$? |  | ||||||
| if [ $ret -ne 0 ] |  | ||||||
| then |  | ||||||
|     exit $ret |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exit 0 |  | ||||||
| @@ -16,42 +16,14 @@ then | |||||||
|     exit $ret |     exit $ret | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ $1 = "cpp11" ] | if [ "${ARCH}" == "32" ] | ||||||
| then | then | ||||||
|     cpp11="-DMSGPACK_CXX11=ON" |     export BIT32="ON" | ||||||
| else | else | ||||||
|     cpp11="" |     export BIT32="OFF" | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ $2 = "32" ] | cmake -DMSGPACK_CXX11=${CXX11} -DMSGPACK_32BIT=${BIT32} -DMSGPACK_BOOST=${BOOST} -DMSGPACK_ENABLE_SHARED=${SHARED} -DMSGPACK_CHAR_SIGN=${CHAR_SIGN} -DMSGPACK_DEFAULT_API_VERSION=${API_VERSION} -DMSGPACK_USE_X3_PARSE=${X3_PARSE} .. | ||||||
| then |  | ||||||
|     bit32="-DMSGPACK_32BIT=ON" |  | ||||||
| else |  | ||||||
|     bit32="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ $3 = "boost" ] |  | ||||||
| then |  | ||||||
|     boost="-DMSGPACK_BOOST=ON" |  | ||||||
| else |  | ||||||
|     boost="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ "$4" != "" ] |  | ||||||
| then |  | ||||||
|     boost_dir="-DMSGPACK_BOOST_DIR=$4" |  | ||||||
| else |  | ||||||
|     boost_dir="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ "$5" = "OFF" ] |  | ||||||
| then |  | ||||||
|     shared="-DMSGPACK_ENABLE_SHARED=OFF" |  | ||||||
| else |  | ||||||
|     shared="" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| cmake $cpp11 $bit32 $boost $boost_dir $shared .. |  | ||||||
|  |  | ||||||
| ret=$? | ret=$? | ||||||
| if [ $ret -ne 0 ] | if [ $ret -ne 0 ] | ||||||
| @@ -83,7 +55,7 @@ then | |||||||
|     exit $ret |     exit $ret | ||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ "$2" != "32" ] | if [ "${ARCH}" != "32" ] && [ `uname` = "Linux" ] | ||||||
| then | then | ||||||
|     ctest -T memcheck | tee memcheck.log |     ctest -T memcheck | tee memcheck.log | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										98
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										98
									
								
								configure.in
									
									
									
									
									
								
							| @@ -1,98 +0,0 @@ | |||||||
| AC_INIT(msgpack, m4_esyscmd([cat include/msgpack/version_master.h | tr -d "\n" | sed -e 's/#define MSGPACK_VERSION_MAJOR[[:space:]]*\([[:alnum:]]*\)/\1./g' -e 's/#define MSGPACK_VERSION_MINOR[[:space:]]*\([[:alnum:]]*\)/\1./g' -e 's/#define MSGPACK_VERSION_REVISION[[:space:]]*\([[:alnum:]]*\)/\1/g' | tr -d "\n"])) |  | ||||||
| AC_CONFIG_AUX_DIR(ac) |  | ||||||
| AM_INIT_AUTOMAKE |  | ||||||
| AC_CONFIG_HEADER(config.h) |  | ||||||
| AC_SUBST(CFLAGS) |  | ||||||
| CFLAGS="-O3 -Wall -Wextra -Werror $CFLAGS" |  | ||||||
|  |  | ||||||
| AC_SUBST(CXXFLAGS) |  | ||||||
| CXXFLAGS="-O3 -Wall -Wextra -Wno-mismatched-tags -Werror $CXXFLAGS" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_PROG_CC |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_MSG_CHECKING([if C++ API is enabled]) |  | ||||||
| AC_ARG_ENABLE(cxx, |  | ||||||
|     AS_HELP_STRING([--disable-cxx], |  | ||||||
|                    [don't build C++ API]) )   #' |  | ||||||
| AC_MSG_RESULT([$enable_cxx]) |  | ||||||
| if test "$enable_cxx" != "no"; then |  | ||||||
|     AC_PROG_CXX |  | ||||||
|     AM_PROG_CC_C_O |  | ||||||
| fi |  | ||||||
| AM_CONDITIONAL(ENABLE_CXX, test "$enable_cxx" != "no") |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_PROG_LIBTOOL |  | ||||||
| AM_PROG_AS |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_MSG_CHECKING([if debug option is enabled]) |  | ||||||
| AC_ARG_ENABLE(debug, |  | ||||||
|     AS_HELP_STRING([--disable-debug], |  | ||||||
|                    [disable assert macros and omit -g option]) ) |  | ||||||
| AC_MSG_RESULT([$enable_debug]) |  | ||||||
| if test "$enable_debug" != "no"; then |  | ||||||
|     CXXFLAGS="$CXXFLAGS -g" |  | ||||||
|     CFLAGS="$CFLAGS -g" |  | ||||||
| else |  | ||||||
|     CXXFLAGS="$CXXFLAGS -DNDEBUG" |  | ||||||
|     CFLAGS="$CFLAGS -DNDEBUG" |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_CACHE_CHECK([for __sync_* atomic operations], msgpack_cv_atomic_ops, [ |  | ||||||
|     AC_TRY_LINK([ |  | ||||||
|         int atomic_sub(int i) { return __sync_sub_and_fetch(&i, 1); } |  | ||||||
|         int atomic_add(int i) { return __sync_add_and_fetch(&i, 1); } |  | ||||||
|     ], [atomic_sub(1); atomic_add(1);], msgpack_cv_atomic_ops="yes") |  | ||||||
| ]) |  | ||||||
| if test "$msgpack_cv_atomic_ops" != "yes"; then |  | ||||||
|     if test "$enable_cxx" = "no"; then |  | ||||||
|         AC_MSG_ERROR([__sync_* atomic operations are not found. Try to enable C++ support. |  | ||||||
| If you are using gcc >= 4.1 and the default target CPU architecture is "i386", try to |  | ||||||
| add CFLAGS="-march=i686" and CXXFLAGS="-march=i686" options to ./configure as follows: |  | ||||||
|  |  | ||||||
|   $ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686" |  | ||||||
|         ]) |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     AC_LANG_PUSH([C++]) |  | ||||||
|     AC_CACHE_CHECK([for __gnu_cxx::__exchange_and_add], msgpack_cv_gcc_cxx_atomic_ops, [ |  | ||||||
|         AC_TRY_LINK([ |  | ||||||
|             #include <bits/atomicity.h> |  | ||||||
|             int atomic_sub(int i) { return __gnu_cxx::__exchange_and_add(&i, -1) - 1; } |  | ||||||
|             int atomic_add(int i) { return __gnu_cxx::__exchange_and_add(&i, 1) + 1; } |  | ||||||
|         ], [atomic_sub(1); atomic_add(1);], msgpack_cv_gcc_cxx_atomic_ops="yes") |  | ||||||
|     ]) |  | ||||||
|     AC_LANG_POP([C++]) |  | ||||||
|  |  | ||||||
|     if test "$msgpack_cv_gcc_cxx_atomic_ops" != "yes"; then |  | ||||||
|         AC_MSG_ERROR([__sync_* atomic operations nor __gnu_cxx::__exchange_and_add are not found. |  | ||||||
|  |  | ||||||
| If you are using gcc >= 4.1 and the default target CPU architecture is "i386", try to |  | ||||||
| add CFLAGS="-march=i686" and CXXFLAGS="-march=i686" options to ./configure as follows: |  | ||||||
|  |  | ||||||
|   $ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686" |  | ||||||
|         ]) |  | ||||||
|  |  | ||||||
|     else |  | ||||||
|         enable_gcc_cxx_atomic=yes |  | ||||||
|     fi |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| AM_CONDITIONAL(ENABLE_GCC_CXX_ATOMIC, test "$enable_gcc_cxx_atomic" = "yes") |  | ||||||
|  |  | ||||||
| major=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\1/'` |  | ||||||
| minor=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\2/'` |  | ||||||
| revision=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).\([[0-9]]*\).*/\3/'` |  | ||||||
| AC_SUBST(VERSION_MAJOR, $major) |  | ||||||
| AC_SUBST(VERSION_MINOR, $minor) |  | ||||||
| AC_SUBST(VERSION_REVISION, $revision) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AC_OUTPUT([Makefile |  | ||||||
|            msgpack.pc |  | ||||||
|            src/Makefile |  | ||||||
|            test/Makefile]) |  | ||||||
							
								
								
									
										133
									
								
								crosslang.cc
									
									
									
									
									
								
							
							
						
						
									
										133
									
								
								crosslang.cc
									
									
									
									
									
								
							| @@ -1,133 +0,0 @@ | |||||||
| // |  | ||||||
| // MessagePack cross-language test tool |  | ||||||
| // |  | ||||||
| // $ cd ../cpp && ./configure && make && make install |  | ||||||
| // or |  | ||||||
| // $ port install msgpack  # MacPorts |  | ||||||
| // |  | ||||||
| // $ g++ -Wall crosslang.cc -lmsgpack |  | ||||||
| // |  | ||||||
| #include <msgpack.hpp> |  | ||||||
| #include <iostream> |  | ||||||
| #include <unistd.h> |  | ||||||
| #include <fcntl.h> |  | ||||||
| #include <errno.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
|  |  | ||||||
| static int run(int infd, int outfd) |  | ||||||
| try { |  | ||||||
| 	msgpack::unpacker pac; |  | ||||||
|  |  | ||||||
| 	while(true) { |  | ||||||
| 		pac.reserve_buffer(32*1024); |  | ||||||
|  |  | ||||||
| 		ssize_t count = |  | ||||||
| 			read(infd, pac.buffer(), pac.buffer_capacity()); |  | ||||||
|  |  | ||||||
| 		if(count <= 0) { |  | ||||||
| 			if(count == 0) { |  | ||||||
| 				return 0; |  | ||||||
| 			} |  | ||||||
| 			if(errno == EAGAIN || errno == EINTR) { |  | ||||||
| 				continue; |  | ||||||
| 			} |  | ||||||
| 			return 1; |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		pac.buffer_consumed(count); |  | ||||||
|  |  | ||||||
| 		msgpack::unpacked result; |  | ||||||
| 		while(pac.next(&result)) { |  | ||||||
| 			msgpack::sbuffer sbuf; |  | ||||||
| 			msgpack::pack(sbuf, result.get()); |  | ||||||
|  |  | ||||||
| 			const char* p = sbuf.data(); |  | ||||||
| 			const char* const pend = p + sbuf.size(); |  | ||||||
| 			while(p < pend) { |  | ||||||
| 				ssize_t bytes = write(outfd, p, pend-p); |  | ||||||
|  |  | ||||||
| 				if(bytes <= 0) { |  | ||||||
| 					if(count == 0) { |  | ||||||
| 						return 0; |  | ||||||
| 					} |  | ||||||
| 					if(errno == EAGAIN || errno == EINTR) { |  | ||||||
| 						continue; |  | ||||||
| 					} |  | ||||||
| 					return 1; |  | ||||||
| 				} |  | ||||||
|  |  | ||||||
| 				p += bytes; |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
|  |  | ||||||
| } catch (std::exception& e) { |  | ||||||
| 	std::cerr << e.what() << std::endl; |  | ||||||
| 	return 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void usage(const char* prog) |  | ||||||
| { |  | ||||||
| 	printf( |  | ||||||
| 		"Usage: %s [in-file] [out-file]\n" |  | ||||||
| 		"\n" |  | ||||||
| 		"This tool is for testing of MessagePack implementation.\n" |  | ||||||
| 		"This does following behavior:\n" |  | ||||||
| 		"\n" |  | ||||||
| 		"  1. Reads objects serialized by MessagePack from <in-file> (default: stdin)\n" |  | ||||||
| 		"  2. Re-serializes the objects using C++ implementation of MessagePack (Note that C++ implementation is considered valid)\n" |  | ||||||
| 		"  3. Writes the re-serialized objects into <out-file> (default: stdout)\n" |  | ||||||
| 		"\n" |  | ||||||
| 		, prog); |  | ||||||
| 	exit(1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int main(int argc, char* argv[]) |  | ||||||
| { |  | ||||||
| 	int infd = 0; |  | ||||||
| 	int outfd = 1; |  | ||||||
|  |  | ||||||
| 	if(argc < 1 || argc > 3) { |  | ||||||
| 		usage(argv[0]); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for(int i=1; i < argc; ++i) { |  | ||||||
| 		if(strlen(argv[i]) > 1 && argv[i][0] == '-') { |  | ||||||
| 			usage(argv[0]); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if(argc >= 2) { |  | ||||||
| 		const char* fname = argv[1]; |  | ||||||
| 		if(strcmp(fname, "-") != 0) { |  | ||||||
| 			infd = open(fname, O_RDONLY); |  | ||||||
| 			if(infd < 0) { |  | ||||||
| 				perror("can't open input file"); |  | ||||||
| 				exit(1); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if(argc >= 3) { |  | ||||||
| 		const char* fname = argv[2]; |  | ||||||
| 		if(strcmp(fname, "-") != 0) { |  | ||||||
| 			outfd = open(fname, O_WRONLY | O_CREAT| O_TRUNC, 0666); |  | ||||||
| 			if(outfd < 0) { |  | ||||||
| 				perror("can't open output file"); |  | ||||||
| 				exit(1); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	int code = run(infd, outfd); |  | ||||||
|  |  | ||||||
| 	close(infd); |  | ||||||
| 	close(outfd); |  | ||||||
|  |  | ||||||
| 	return code; |  | ||||||
| } |  | ||||||
|  |  | ||||||
							
								
								
									
										88
									
								
								crosslang.rb
									
									
									
									
									
								
							
							
						
						
									
										88
									
								
								crosslang.rb
									
									
									
									
									
								
							| @@ -1,88 +0,0 @@ | |||||||
| # |  | ||||||
| # MessagePack cross-language test tool |  | ||||||
| # |  | ||||||
| # $ gem install msgpack |  | ||||||
| # or |  | ||||||
| # $ port install rb_msgpack   # MacPorts |  | ||||||
| # |  | ||||||
| begin |  | ||||||
| require 'rubygems' |  | ||||||
| rescue LoadError |  | ||||||
| end |  | ||||||
| require 'msgpack' |  | ||||||
|  |  | ||||||
| def run(inio, outio) |  | ||||||
| 	pac = MessagePack::Unpacker.new(inio) |  | ||||||
|  |  | ||||||
| 	begin |  | ||||||
| 		pac.each {|obj| |  | ||||||
| 			outio.write MessagePack.pack(obj) |  | ||||||
| 			outio.flush |  | ||||||
| 		} |  | ||||||
| 	rescue EOFError |  | ||||||
| 		return 0 |  | ||||||
| 	rescue |  | ||||||
| 		$stderr.puts $! |  | ||||||
| 		return 1 |  | ||||||
| 	end |  | ||||||
|  |  | ||||||
| 	return 0 |  | ||||||
| end |  | ||||||
|  |  | ||||||
| def usage |  | ||||||
| 	puts <<EOF |  | ||||||
| Usage: #{$0} [in-file] [out-file] |  | ||||||
|  |  | ||||||
| This tool is for testing of MessagePack implementation. |  | ||||||
| This does following behavior: |  | ||||||
|  |  | ||||||
|   1. Reads objects serialized by MessagePack from <in-file> (default: stdin) |  | ||||||
|   2. Re-serializes the objects using Ruby implementation of MessagePack (Note that Ruby implementation is considered valid) |  | ||||||
|   3. Writes the re-serialized objects into <out-file> (default: stdout) |  | ||||||
|  |  | ||||||
| EOF |  | ||||||
| 	exit 1 |  | ||||||
| end |  | ||||||
|  |  | ||||||
| inio = $stdin |  | ||||||
| outio = $stdout |  | ||||||
|  |  | ||||||
| if ARGV.length > 2 |  | ||||||
| 	usage |  | ||||||
| end |  | ||||||
|  |  | ||||||
| ARGV.each {|str| |  | ||||||
| 	if str.size > 1 && str[0] == ?- |  | ||||||
| 		usage |  | ||||||
| 	end |  | ||||||
| } |  | ||||||
|  |  | ||||||
| if fname = ARGV[0] |  | ||||||
| 	unless fname == "-" |  | ||||||
| 		begin |  | ||||||
| 			inio = File.open(fname) |  | ||||||
| 		rescue |  | ||||||
| 			puts "can't open output file: #{$!}" |  | ||||||
| 			exit 1 |  | ||||||
| 		end |  | ||||||
| 	end |  | ||||||
| end |  | ||||||
|  |  | ||||||
| if fname = ARGV[1] |  | ||||||
| 	unless fname == "-" |  | ||||||
| 		begin |  | ||||||
| 			outio = File.open(fname, "w") |  | ||||||
| 		rescue |  | ||||||
| 			puts "can't open output file: #{$!}" |  | ||||||
| 			exit 1 |  | ||||||
| 		end |  | ||||||
| 	end |  | ||||||
| end |  | ||||||
|  |  | ||||||
| code = run(inio, outio) |  | ||||||
|  |  | ||||||
| inio.close |  | ||||||
| outio.close |  | ||||||
|  |  | ||||||
| exit code |  | ||||||
|  |  | ||||||
| @@ -1,181 +0,0 @@ | |||||||
| // |  | ||||||
| // MessagePack for C++ static resolution routine |  | ||||||
| // |  | ||||||
| // Copyright (C) 2008-2009 FURUHASHI Sadayuki |  | ||||||
| // |  | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| //    you may not use this file except in compliance with the License. |  | ||||||
| //    You may obtain a copy of the License at |  | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP |  | ||||||
| #define MSGPACK_CPP03_DEFINE_ARRAY_HPP |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" |  | ||||||
| #include "msgpack/adaptor/msgpack_tuple.hpp" |  | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/object_fwd.hpp" |  | ||||||
|  |  | ||||||
| #define MSGPACK_DEFINE_ARRAY(...) \ |  | ||||||
|     template <typename Packer> \ |  | ||||||
|     void msgpack_pack(Packer& pk) const \ |  | ||||||
|     { \ |  | ||||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ |  | ||||||
|     } \ |  | ||||||
|     void msgpack_unpack(msgpack::object const& o) \ |  | ||||||
|     { \ |  | ||||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ |  | ||||||
|     }\ |  | ||||||
|     template <typename MSGPACK_OBJECT> \ |  | ||||||
|     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ |  | ||||||
|     { \ |  | ||||||
|         msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this))) |  | ||||||
|  |  | ||||||
| // MSGPACK_ADD_ENUM must be used in the global namespace. |  | ||||||
| #define MSGPACK_ADD_ENUM(enum_name) \ |  | ||||||
|   namespace msgpack { \ |  | ||||||
|   /** @cond */ \ |  | ||||||
|   MSGPACK_API_VERSION_NAMESPACE(v1) { \ |  | ||||||
|   /** @endcond */ \ |  | ||||||
|   namespace adaptor { \ |  | ||||||
|     template<> \ |  | ||||||
|     struct convert<enum_name> { \ |  | ||||||
|       msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\ |  | ||||||
|         int tmp; \ |  | ||||||
|         o >> tmp; \ |  | ||||||
|         v = static_cast<enum_name>(tmp); \ |  | ||||||
|         return o; \ |  | ||||||
|       } \ |  | ||||||
|     }; \ |  | ||||||
|     template<> \ |  | ||||||
|     struct object<enum_name> { \ |  | ||||||
|       void operator()(msgpack::object& o, const enum_name& v) const {\ |  | ||||||
|         o << static_cast<int>(v); \ |  | ||||||
|       } \ |  | ||||||
|     }; \ |  | ||||||
|     template<> \ |  | ||||||
|     struct object_with_zone<enum_name> { \ |  | ||||||
|       void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \ |  | ||||||
|         o << static_cast<int>(v); \ |  | ||||||
|       } \ |  | ||||||
|     }; \ |  | ||||||
|     template<> \ |  | ||||||
|     struct pack<enum_name> { \ |  | ||||||
|       template <typename Stream> \ |  | ||||||
|       msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \ |  | ||||||
|         return o << static_cast<int>(v); \ |  | ||||||
|       } \ |  | ||||||
|     }; \ |  | ||||||
|   } \ |  | ||||||
|   /** @cond */ \ |  | ||||||
|   } \ |  | ||||||
|   /** @endcond */ \ |  | ||||||
|   } |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
| namespace type { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| <% GENERATION_LIMIT = 31 %> |  | ||||||
| template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> |  | ||||||
| struct define_array; |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct define_array<> { |  | ||||||
|     typedef define_array<> value_type; |  | ||||||
|     typedef tuple<> tuple_type; |  | ||||||
|     template <typename Packer> |  | ||||||
|     void msgpack_pack(Packer& pk) const |  | ||||||
|     { |  | ||||||
|         pk.pack_array(0); |  | ||||||
|     } |  | ||||||
|     void msgpack_unpack(msgpack::object const& o) |  | ||||||
|     { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|     } |  | ||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone&) const |  | ||||||
|     { |  | ||||||
|         o->type = msgpack::type::ARRAY; |  | ||||||
|         o->via.array.ptr = nullptr; |  | ||||||
|         o->via.array.size = 0; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| <%0.upto(GENERATION_LIMIT) {|i|%> |  | ||||||
| template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> |  | ||||||
| struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { |  | ||||||
|     typedef define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type; |  | ||||||
|     typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> tuple_type; |  | ||||||
|     define_array(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) : |  | ||||||
|         a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {} |  | ||||||
|     template <typename Packer> |  | ||||||
|     void msgpack_pack(Packer& pk) const |  | ||||||
|     { |  | ||||||
|         pk.pack_array(<%=i+1%>); |  | ||||||
|         <%0.upto(i) {|j|%> |  | ||||||
|         pk.pack(a<%=j%>);<%}%> |  | ||||||
|     } |  | ||||||
|     void msgpack_unpack(msgpack::object const& o) |  | ||||||
|     { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         const size_t size = o.via.array.size; |  | ||||||
|         if(size > 0) { |  | ||||||
|             msgpack::object *ptr = o.via.array.ptr; |  | ||||||
|             switch(size) { |  | ||||||
|             default:<%(i).downto(0) {|j|%> |  | ||||||
|             case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>);<%}%> |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone& z) const |  | ||||||
|     { |  | ||||||
|         o->type = msgpack::type::ARRAY; |  | ||||||
|         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>)); |  | ||||||
|         o->via.array.size = <%=i+1%>; |  | ||||||
|         <%0.upto(i) {|j|%> |  | ||||||
|         o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%> |  | ||||||
|     } |  | ||||||
|     <%0.upto(i) {|j|%> |  | ||||||
|     A<%=j%>& a<%=j%>;<%}%> |  | ||||||
| }; |  | ||||||
| <%}%> |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| inline define_array<> make_define_array() |  | ||||||
| { |  | ||||||
|     return define_array<>(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| <%0.upto(GENERATION_LIMIT) {|i|%> |  | ||||||
| template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> |  | ||||||
| inline define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_array(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>) |  | ||||||
| { |  | ||||||
|     return define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); |  | ||||||
| } |  | ||||||
| <%}%> |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| }  // namespace type |  | ||||||
| /// @cond |  | ||||||
| }  // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
| }  // namespace msgpack |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP |  | ||||||
							
								
								
									
										110
									
								
								erb/v1/cpp03_define_array.hpp.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								erb/v1/cpp03_define_array.hpp.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP | ||||||
|  | #define MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/detail/cpp03_define_array_decl.hpp" | ||||||
|  | #include "msgpack/adaptor/msgpack_tuple.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/object_fwd.hpp" | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  | namespace type { | ||||||
|  |  | ||||||
|  | <% GENERATION_LIMIT = 31 %> | ||||||
|  | template <> | ||||||
|  | struct define_array<> { | ||||||
|  |     typedef define_array<> value_type; | ||||||
|  |     typedef tuple<> tuple_type; | ||||||
|  |     template <typename Packer> | ||||||
|  |     void msgpack_pack(Packer& pk) const | ||||||
|  |     { | ||||||
|  |         pk.pack_array(0); | ||||||
|  |     } | ||||||
|  |     void msgpack_unpack(msgpack::object const& o) | ||||||
|  |     { | ||||||
|  |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |     } | ||||||
|  |     void msgpack_object(msgpack::object* o, msgpack::zone&) const | ||||||
|  |     { | ||||||
|  |         o->type = msgpack::type::ARRAY; | ||||||
|  |         o->via.array.ptr = MSGPACK_NULLPTR; | ||||||
|  |         o->via.array.size = 0; | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
|  | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | ||||||
|  |     typedef define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type; | ||||||
|  |     typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> tuple_type; | ||||||
|  |     define_array(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) : | ||||||
|  |         a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {} | ||||||
|  |     template <typename Packer> | ||||||
|  |     void msgpack_pack(Packer& pk) const | ||||||
|  |     { | ||||||
|  |         pk.pack_array(<%=i+1%>); | ||||||
|  |         <%0.upto(i) {|j|%> | ||||||
|  |         pk.pack(a<%=j%>);<%}%> | ||||||
|  |     } | ||||||
|  |     void msgpack_unpack(msgpack::object const& o) | ||||||
|  |     { | ||||||
|  |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|  |         const size_t size = o.via.array.size; | ||||||
|  |         if(size > 0) { | ||||||
|  |             msgpack::object *ptr = o.via.array.ptr; | ||||||
|  |             switch(size) { | ||||||
|  |             default:<%(i).downto(0) {|j|%> | ||||||
|  |             case <%=j+1%>: ptr[<%=j%>].convert(a<%=j%>); | ||||||
|  |             // fallthrough | ||||||
|  | <%}%> | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     void msgpack_object(msgpack::object* o, msgpack::zone& z) const | ||||||
|  |     { | ||||||
|  |         o->type = msgpack::type::ARRAY; | ||||||
|  |         o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object))); | ||||||
|  |         o->via.array.size = <%=i+1%>; | ||||||
|  |         <%0.upto(i) {|j|%> | ||||||
|  |         o->via.array.ptr[<%=j%>] = msgpack::object(a<%=j%>, z);<%}%> | ||||||
|  |     } | ||||||
|  |     <%0.upto(i) {|j|%> | ||||||
|  |     A<%=j%>& a<%=j%>;<%}%> | ||||||
|  | }; | ||||||
|  | <%}%> | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | inline define_array<> make_define_array() | ||||||
|  | { | ||||||
|  |     return define_array<>(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
|  | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | inline define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_array(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>) | ||||||
|  | { | ||||||
|  |     return define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); | ||||||
|  | } | ||||||
|  | <%}%> | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace type | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_HPP | ||||||
							
								
								
									
										42
									
								
								erb/v1/cpp03_define_array_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								erb/v1/cpp03_define_array_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_V1_CPP03_DEFINE_ARRAY_DECL_HPP | ||||||
|  | #define MSGPACK_V1_CPP03_DEFINE_ARRAY_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  | namespace type { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <% GENERATION_LIMIT = 31 %> | ||||||
|  | template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> | ||||||
|  | struct define_array; | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | define_array<> make_define_array(); | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
|  | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | inline define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_array(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>); | ||||||
|  | <%}%> | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace type | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_V1_CPP03_DEFINE_ARRAY_DECL_HPP | ||||||
| @@ -1,78 +1,21 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015-2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 | #ifndef MSGPACK_V1_CPP03_DEFINE_MAP_HPP | ||||||
| // | #define MSGPACK_V1_CPP03_DEFINE_MAP_HPP | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_CPP03_DEFINE_MAP_HPP |  | ||||||
| #define MSGPACK_CPP03_DEFINE_MAP_HPP |  | ||||||
| 
 | 
 | ||||||
| // BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp | #include "msgpack/v1/adaptor/detail/cpp03_define_map_decl.hpp" | ||||||
| // http://www.boost.org/libs/preprocessor/doc/ref/variadics.html |  | ||||||
| // However, supporting compiler detection is not complete. msgpack-c requires |  | ||||||
| // variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly. |  | ||||||
| #if !defined(MSGPACK_PP_VARIADICS) |  | ||||||
| #define MSGPACK_PP_VARIADICS |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #include <msgpack/preprocessor.hpp> |  | ||||||
| 
 |  | ||||||
| #include "msgpack/versioning.hpp" |  | ||||||
| #include "msgpack/adaptor/msgpack_tuple.hpp" | #include "msgpack/adaptor/msgpack_tuple.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
| #include "msgpack/object_fwd.hpp" | #include "msgpack/object_fwd.hpp" | ||||||
| 
 | 
 | ||||||
| #define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \ | #include <map> | ||||||
|     MSGPACK_PP_IF( \ |  | ||||||
|         MSGPACK_PP_IS_BEGIN_PARENS(elem), \ |  | ||||||
|         elem, \ |  | ||||||
|         (MSGPACK_PP_STRINGIZE(elem))(elem) \ |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
| #define MSGPACK_DEFINE_MAP_IMPL(...) \ |  | ||||||
|     MSGPACK_PP_SEQ_TO_TUPLE( \ |  | ||||||
|         MSGPACK_PP_SEQ_FOR_EACH( \ |  | ||||||
|             MSGPACK_DEFINE_MAP_EACH_PROC, \ |  | ||||||
|             0, \ |  | ||||||
|             MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ |  | ||||||
|         ) \ |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
| #define MSGPACK_DEFINE_MAP(...) \ |  | ||||||
|     template <typename Packer> \ |  | ||||||
|     void msgpack_pack(Packer& pk) const \ |  | ||||||
|     { \ |  | ||||||
|         msgpack::type::make_define_map \ |  | ||||||
|             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ |  | ||||||
|             .msgpack_pack(pk); \ |  | ||||||
|     } \ |  | ||||||
|     void msgpack_unpack(msgpack::object const& o) \ |  | ||||||
|     { \ |  | ||||||
|         msgpack::type::make_define_map \ |  | ||||||
|             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ |  | ||||||
|             .msgpack_unpack(o); \ |  | ||||||
|     }\ |  | ||||||
|     template <typename MSGPACK_OBJECT> \ |  | ||||||
|     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ |  | ||||||
|     { \ |  | ||||||
|         msgpack::type::make_define_map \ |  | ||||||
|             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ |  | ||||||
|             .msgpack_object(o, z); \ |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| #define MSGPACK_BASE_MAP(base) \ |  | ||||||
|     (MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this))) |  | ||||||
| 
 | 
 | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| /// @cond | /// @cond | ||||||
| @@ -80,12 +23,7 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { | |||||||
| /// @endcond | /// @endcond | ||||||
| namespace type { | namespace type { | ||||||
| 
 | 
 | ||||||
| /// @cond |  | ||||||
| <% GENERATION_LIMIT = 31 %> | <% GENERATION_LIMIT = 31 %> | ||||||
| template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> |  | ||||||
| struct define_map; |  | ||||||
| /// @endcond |  | ||||||
| 
 |  | ||||||
| template <> | template <> | ||||||
| struct define_map<> { | struct define_map<> { | ||||||
|     template <typename Packer> |     template <typename Packer> | ||||||
| @@ -100,7 +38,7 @@ struct define_map<> { | |||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone&) const |     void msgpack_object(msgpack::object* o, msgpack::zone&) const | ||||||
|     { |     { | ||||||
|         o->type = msgpack::type::MAP; |         o->type = msgpack::type::MAP; | ||||||
|         o->via.map.ptr = nullptr; |         o->via.map.ptr = MSGPACK_NULLPTR; | ||||||
|         o->via.map.size = 0; |         o->via.map.size = 0; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -144,7 +82,7 @@ struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | |||||||
|     void msgpack_object(msgpack::object* o, msgpack::zone& z) const |     void msgpack_object(msgpack::object* o, msgpack::zone& z) const | ||||||
|     { |     { | ||||||
|         o->type = msgpack::type::MAP; |         o->type = msgpack::type::MAP; | ||||||
|         o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>)); |         o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>, MSGPACK_ZONE_ALIGNOF(msgpack::object_kv))); | ||||||
|         o->via.map.size = <%=(i+1)/2%>; |         o->via.map.size = <%=(i+1)/2%>; | ||||||
|         <%0.step(i,2) {|j|%> |         <%0.step(i,2) {|j|%> | ||||||
|         o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z); |         o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z); | ||||||
| @@ -178,4 +116,4 @@ inline define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1. | |||||||
| /// @endcond | /// @endcond | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_CPP03_DEFINE_MAP_HPP | #endif // MSGPACK_V1_CPP03_DEFINE_MAP_HPP | ||||||
							
								
								
									
										42
									
								
								erb/v1/cpp03_define_map_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								erb/v1/cpp03_define_map_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2015-2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_V1_CPP03_DEFINE_MAP_DECL_HPP | ||||||
|  | #define MSGPACK_V1_CPP03_DEFINE_MAP_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  | namespace type { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <% GENERATION_LIMIT = 31 %> | ||||||
|  | template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> | ||||||
|  | struct define_map; | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | define_map<> make_define_map(); | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
|  | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>); | ||||||
|  | <%}%> | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace type | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_V1_CPP03_DEFINE_MAP_DECL_HPP | ||||||
| @@ -1,26 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 | #ifndef MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP | ||||||
| // | #define MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_CPP03_MSGPACK_TUPLE_HPP |  | ||||||
| #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP |  | ||||||
| 
 | 
 | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/msgpack_tuple_decl.hpp" | ||||||
| #include "msgpack/object.hpp" |  | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| 
 | 
 | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| 
 | 
 | ||||||
| @@ -34,17 +24,6 @@ namespace type { | |||||||
| // FIXME operator!= | // FIXME operator!= | ||||||
| <% GENERATION_LIMIT = 31 %> | <% GENERATION_LIMIT = 31 %> | ||||||
| 
 | 
 | ||||||
| /// @cond |  | ||||||
| template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> |  | ||||||
| struct tuple; |  | ||||||
| /// @endcond |  | ||||||
| 
 |  | ||||||
| template <typename Tuple, int N> |  | ||||||
| struct tuple_element; |  | ||||||
| 
 |  | ||||||
| template <typename Tuple, int N> |  | ||||||
| struct const_tuple_element; |  | ||||||
| 
 |  | ||||||
| template <typename T> | template <typename T> | ||||||
| struct tuple_type { | struct tuple_type { | ||||||
|     typedef T type; |     typedef T type; | ||||||
| @@ -104,6 +83,7 @@ struct tuple<> { | |||||||
|     tuple() {} |     tuple() {} | ||||||
|     tuple(msgpack::object const& o) { o.convert(*this); } |     tuple(msgpack::object const& o) { o.convert(*this); } | ||||||
|     typedef tuple<> value_type; |     typedef tuple<> value_type; | ||||||
|  |     std::size_t size() const { return 0; } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /// @cond | /// @cond | ||||||
| @@ -111,6 +91,7 @@ struct tuple<> { | |||||||
| template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
| struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> { | ||||||
|     typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type; |     typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type; | ||||||
|  |     std::size_t size() const { return <%=i+1%>; } | ||||||
|     tuple() {} |     tuple() {} | ||||||
|     tuple(typename tuple_type<A0>::transparent_reference _a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference _a<%=j%><%}%>) : |     tuple(typename tuple_type<A0>::transparent_reference _a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference _a<%=j%><%}%>) : | ||||||
|         a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {} |         a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {} | ||||||
| @@ -169,10 +150,10 @@ struct convert<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > { | |||||||
|         msgpack::object const& o, |         msgpack::object const& o, | ||||||
|         type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { |         type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } | ||||||
|         if(o.via.array.size < <%=i+1%>) { throw msgpack::type_error(); } |  | ||||||
|         <%0.upto(i) {|j|%> |         <%0.upto(i) {|j|%> | ||||||
|         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. |         // In order to avoid clang++'s invalid warning, msgpack::object:: has been added. | ||||||
|         o.via.array.ptr[<%=j%>].msgpack::object::convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%> |         if(o.via.array.size > <%=j%>) | ||||||
|  |             o.via.array.ptr[<%=j%>].msgpack::object::convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%> | ||||||
|         return o; |         return o; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -213,7 +194,7 @@ struct object_with_zone<type::tuple<> > { | |||||||
|         msgpack::object::with_zone& o, |         msgpack::object::with_zone& o, | ||||||
|         const type::tuple<>&) const { |         const type::tuple<>&) const { | ||||||
|         o.type = msgpack::type::ARRAY; |         o.type = msgpack::type::ARRAY; | ||||||
|         o.via.array.ptr = nullptr; |         o.via.array.ptr = MSGPACK_NULLPTR; | ||||||
|         o.via.array.size = 0; |         o.via.array.size = 0; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| @@ -226,7 +207,7 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > { | |||||||
|         msgpack::object::with_zone& o, |         msgpack::object::with_zone& o, | ||||||
|         const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { |         const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const { | ||||||
|         o.type = msgpack::type::ARRAY; |         o.type = msgpack::type::ARRAY; | ||||||
|         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>)); |         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>, MSGPACK_ZONE_ALIGNOF(msgpack::object))); | ||||||
|         o.via.array.size = <%=i+1%>; |         o.via.array.size = <%=i+1%>; | ||||||
|         <%0.upto(i) {|j|%> |         <%0.upto(i) {|j|%> | ||||||
|         o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> |         o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%> | ||||||
| @@ -243,4 +224,4 @@ struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > { | |||||||
| 
 | 
 | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP | #endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_HPP | ||||||
							
								
								
									
										69
									
								
								erb/v1/cpp03_msgpack_tuple_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								erb/v1/cpp03_msgpack_tuple_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_V1_CPP03_MSGPACK_TUPLE_DECL_HPP | ||||||
|  | #define MSGPACK_V1_CPP03_MSGPACK_TUPLE_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  | #include "msgpack/object.hpp" | ||||||
|  | #include "msgpack/adaptor/adaptor_base.hpp" | ||||||
|  |  | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | namespace type { | ||||||
|  |  | ||||||
|  | // FIXME operator== | ||||||
|  | // FIXME operator!= | ||||||
|  | <% GENERATION_LIMIT = 31 %> | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>> | ||||||
|  | struct tuple; | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | template <typename Tuple, int N> | ||||||
|  | struct tuple_element; | ||||||
|  |  | ||||||
|  | template <typename Tuple, int N> | ||||||
|  | struct const_tuple_element; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct tuple_type; | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
|  | template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | typename type::tuple_element<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>, N>::reference get(type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& t); | ||||||
|  | template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | typename type::const_tuple_element<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>, N>::const_reference get(type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> const& t); | ||||||
|  | <%}%> | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | tuple<> make_tuple(); | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | <%0.upto(GENERATION_LIMIT) {|i|%> | ||||||
|  | template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
|  | tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>); | ||||||
|  | <%}%> | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace type | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_V1_CPP03_MSGPACK_TUPLE_DECL_HPP | ||||||
| @@ -1,36 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ memory pool | // MessagePack for C++ memory pool | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2010 FURUHASHI Sadayuki | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 | #ifndef MSGPACK_V1_CPP03_ZONE_HPP | ||||||
| // | #define MSGPACK_V1_CPP03_ZONE_HPP | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_CPP03_ZONE_HPP |  | ||||||
| #define MSGPACK_CPP03_ZONE_HPP |  | ||||||
| 
 | 
 | ||||||
| #include <cstdlib> | #include "msgpack/zone_decl.hpp" | ||||||
| #include <memory> |  | ||||||
| #include <vector> |  | ||||||
| 
 |  | ||||||
| #include "msgpack/versioning.hpp" |  | ||||||
| 
 |  | ||||||
| #ifndef MSGPACK_ZONE_CHUNK_SIZE |  | ||||||
| #define MSGPACK_ZONE_CHUNK_SIZE 8192 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifndef MSGPACK_ZONE_ALIGN |  | ||||||
| #define MSGPACK_ZONE_ALIGN sizeof(void*) |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| <% GENERATION_LIMIT = 15 %> | <% GENERATION_LIMIT = 15 %> | ||||||
| namespace msgpack { | namespace msgpack { | ||||||
| @@ -47,7 +27,7 @@ class zone { | |||||||
|         void* m_data; |         void* m_data; | ||||||
|     }; |     }; | ||||||
|     struct finalizer_array { |     struct finalizer_array { | ||||||
|         finalizer_array():m_tail(nullptr), m_end(nullptr), m_array(nullptr) {} |         finalizer_array():m_tail(MSGPACK_NULLPTR), m_end(MSGPACK_NULLPTR), m_array(MSGPACK_NULLPTR) {} | ||||||
|         void call() { |         void call() { | ||||||
|             finalizer* fin = m_tail; |             finalizer* fin = m_tail; | ||||||
|             for(; fin != m_array; --fin) (*(fin-1))(); |             for(; fin != m_array; --fin) (*(fin-1))(); | ||||||
| @@ -113,7 +93,7 @@ class zone { | |||||||
|             m_head = c; |             m_head = c; | ||||||
|             m_free = chunk_size; |             m_free = chunk_size; | ||||||
|             m_ptr  = reinterpret_cast<char*>(c) + sizeof(chunk); |             m_ptr  = reinterpret_cast<char*>(c) + sizeof(chunk); | ||||||
|             c->m_next = nullptr; |             c->m_next = MSGPACK_NULLPTR; | ||||||
|         } |         } | ||||||
|         ~chunk_list() |         ~chunk_list() | ||||||
|         { |         { | ||||||
| @@ -133,10 +113,11 @@ class zone { | |||||||
|                     ::free(c); |                     ::free(c); | ||||||
|                     c = n; |                     c = n; | ||||||
|                 } else { |                 } else { | ||||||
|  |                     m_head = c; | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             m_head->m_next = nullptr; |             m_head->m_next = MSGPACK_NULLPTR; | ||||||
|             m_free = chunk_size; |             m_free = chunk_size; | ||||||
|             m_ptr  = reinterpret_cast<char*>(m_head) + sizeof(chunk); |             m_ptr  = reinterpret_cast<char*>(m_head) + sizeof(chunk); | ||||||
|         } |         } | ||||||
| @@ -197,7 +178,9 @@ private: | |||||||
|     template <typename T> |     template <typename T> | ||||||
|     static void object_delete(void* obj); |     static void object_delete(void* obj); | ||||||
| 
 | 
 | ||||||
|     void* allocate_expand(size_t size); |     static char* get_aligned(char* ptr, size_t align); | ||||||
|  | 
 | ||||||
|  |     char* allocate_expand(size_t size); | ||||||
| private: | private: | ||||||
|     zone(const zone&); |     zone(const zone&); | ||||||
|     zone& operator=(const zone&); |     zone& operator=(const zone&); | ||||||
| @@ -207,37 +190,42 @@ inline zone::zone(size_t chunk_size) /* throw() */ :m_chunk_size(chunk_size), m_ | |||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void* zone::allocate_align(size_t size, size_t align) | inline char* zone::get_aligned(char* ptr, size_t align) | ||||||
| { | { | ||||||
|     char* aligned = |     return | ||||||
|         reinterpret_cast<char*>( |         reinterpret_cast<char*>( | ||||||
|             reinterpret_cast<size_t>( |             reinterpret_cast<size_t>( | ||||||
|                 (m_chunk_list.m_ptr + (align - 1))) / align * align); |             (ptr + (align - 1))) / align * align); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline void* zone::allocate_align(size_t size, size_t align) | ||||||
|  | { | ||||||
|  |     char* aligned = get_aligned(m_chunk_list.m_ptr, align); | ||||||
|     size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr); |     size_t adjusted_size = size + (aligned - m_chunk_list.m_ptr); | ||||||
|     if(m_chunk_list.m_free >= adjusted_size) { |     if (m_chunk_list.m_free < adjusted_size) { | ||||||
|         m_chunk_list.m_free -= adjusted_size; |         size_t enough_size = size + align - 1; | ||||||
|         m_chunk_list.m_ptr  += adjusted_size; |         char* ptr = allocate_expand(enough_size); | ||||||
|         return aligned; |         aligned = get_aligned(ptr, align); | ||||||
|  |         adjusted_size = size + (aligned - m_chunk_list.m_ptr); | ||||||
|     } |     } | ||||||
|     return reinterpret_cast<char*>( |     m_chunk_list.m_free -= adjusted_size; | ||||||
|         reinterpret_cast<size_t>( |     m_chunk_list.m_ptr  += adjusted_size; | ||||||
|             allocate_expand(size + (align - 1))) / align * align); |     return aligned; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void* zone::allocate_no_align(size_t size) | inline void* zone::allocate_no_align(size_t size) | ||||||
| { | { | ||||||
|     if(m_chunk_list.m_free < size) { |  | ||||||
|         return allocate_expand(size); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     char* ptr = m_chunk_list.m_ptr; |     char* ptr = m_chunk_list.m_ptr; | ||||||
|  |     if(m_chunk_list.m_free < size) { | ||||||
|  |         ptr = allocate_expand(size); | ||||||
|  |     } | ||||||
|     m_chunk_list.m_free -= size; |     m_chunk_list.m_free -= size; | ||||||
|     m_chunk_list.m_ptr  += size; |     m_chunk_list.m_ptr  += size; | ||||||
| 
 | 
 | ||||||
|     return ptr; |     return ptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void* zone::allocate_expand(size_t size) | inline char* zone::allocate_expand(size_t size) | ||||||
| { | { | ||||||
|     chunk_list* const cl = &m_chunk_list; |     chunk_list* const cl = &m_chunk_list; | ||||||
| 
 | 
 | ||||||
| @@ -259,8 +247,8 @@ inline void* zone::allocate_expand(size_t size) | |||||||
| 
 | 
 | ||||||
|     c->m_next  = cl->m_head; |     c->m_next  = cl->m_head; | ||||||
|     cl->m_head = c; |     cl->m_head = c; | ||||||
|     cl->m_free = sz - size; |     cl->m_free = sz; | ||||||
|     cl->m_ptr  = ptr + size; |     cl->m_ptr  = ptr; | ||||||
| 
 | 
 | ||||||
|     return ptr; |     return ptr; | ||||||
| } | } | ||||||
| @@ -310,7 +298,7 @@ inline void zone::undo_allocate(size_t size) | |||||||
| 
 | 
 | ||||||
| inline std::size_t aligned_size( | inline std::size_t aligned_size( | ||||||
|     std::size_t size, |     std::size_t size, | ||||||
|     std::size_t align = MSGPACK_ZONE_ALIGN) { |     std::size_t align) { | ||||||
|     return (size + align - 1) / align * align; |     return (size + align - 1) / align * align; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -319,7 +307,7 @@ inline std::size_t aligned_size( | |||||||
| template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>> | ||||||
| T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) | T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) | ||||||
| { | { | ||||||
|     void* x = allocate_align(sizeof(T)); |     void* x = allocate_align(sizeof(T), MSGPACK_ZONE_ALIGNOF(T)); | ||||||
|     try { |     try { | ||||||
|         m_finalizer_array.push(&zone::object_destruct<T>, x); |         m_finalizer_array.push(&zone::object_destruct<T>, x); | ||||||
|     } catch (...) { |     } catch (...) { | ||||||
| @@ -343,4 +331,4 @@ T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>) | |||||||
| 
 | 
 | ||||||
| }  // namespace msgpack | }  // namespace msgpack | ||||||
| 
 | 
 | ||||||
| #endif // MSGPACK_CPP03_ZONE_HPP | #endif // MSGPACK_V1_CPP03_ZONE_HPP | ||||||
							
								
								
									
										54
									
								
								erb/v1/cpp03_zone_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								erb/v1/cpp03_zone_decl.hpp.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ memory pool | ||||||
|  | // | ||||||
|  | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_V1_CPP03_ZONE_DECL_HPP | ||||||
|  | #define MSGPACK_V1_CPP03_ZONE_DECL_HPP | ||||||
|  |  | ||||||
|  | #include <cstdlib> | ||||||
|  | #include <memory> | ||||||
|  | #include <vector> | ||||||
|  |  | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  |  | ||||||
|  | #ifndef MSGPACK_ZONE_CHUNK_SIZE | ||||||
|  | #define MSGPACK_ZONE_CHUNK_SIZE 8192 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifndef MSGPACK_ZONE_ALIGN | ||||||
|  | #define MSGPACK_ZONE_ALIGN sizeof(void*) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(_MSC_VER) | ||||||
|  | #define MSGPACK_ZONE_ALIGNOF(type) __alignof(type) | ||||||
|  | #else | ||||||
|  | #define MSGPACK_ZONE_ALIGNOF(type) __alignof__(type) | ||||||
|  | #endif | ||||||
|  | // For a compiler that doesn't support __alignof__: | ||||||
|  | // #define MSGPACK_ZONE_ALIGNOF(type) MSGPACK_ZONE_ALIGN | ||||||
|  |  | ||||||
|  | <% GENERATION_LIMIT = 15 %> | ||||||
|  | namespace msgpack { | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | MSGPACK_API_VERSION_NAMESPACE(v1) { | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | class zone; | ||||||
|  |  | ||||||
|  | std::size_t aligned_size( | ||||||
|  |     std::size_t size, | ||||||
|  |     std::size_t align = MSGPACK_ZONE_ALIGN); | ||||||
|  |  | ||||||
|  | /// @cond | ||||||
|  | }  // MSGPACK_API_VERSION_NAMESPACE(v1) | ||||||
|  | /// @endcond | ||||||
|  |  | ||||||
|  | }  // namespace msgpack | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_V1_CPP03_ZONE_DECL_HPP | ||||||
| @@ -2,3 +2,4 @@ ADD_SUBDIRECTORY (c) | |||||||
| ADD_SUBDIRECTORY (cpp03) | ADD_SUBDIRECTORY (cpp03) | ||||||
| ADD_SUBDIRECTORY (cpp11) | ADD_SUBDIRECTORY (cpp11) | ||||||
| ADD_SUBDIRECTORY (boost) | ADD_SUBDIRECTORY (boost) | ||||||
|  | ADD_SUBDIRECTORY (x3) | ||||||
|   | |||||||
| @@ -3,6 +3,20 @@ IF (MSGPACK_BOOST) | |||||||
|         msgpack_variant_capitalize.cpp |         msgpack_variant_capitalize.cpp | ||||||
|         msgpack_variant_mapbased.cpp |         msgpack_variant_mapbased.cpp | ||||||
|     ) |     ) | ||||||
|  |     IF (MSGPACK_CXX11 OR MSGPACK_CXX17) | ||||||
|  |         FIND_PACKAGE (Threads REQUIRED) | ||||||
|  |         LIST (APPEND exec_PROGRAMS | ||||||
|  |             asio_send_recv.cpp | ||||||
|  |         ) | ||||||
|  |         IF (ZLIB_FOUND) | ||||||
|  |             INCLUDE_DIRECTORIES ( | ||||||
|  |                 ${ZLIB_INCLUDE_DIRS} | ||||||
|  |             ) | ||||||
|  |             LIST (APPEND exec_PROGRAMS | ||||||
|  |                 asio_send_recv_zlib.cpp | ||||||
|  |             ) | ||||||
|  |         ENDIF () | ||||||
|  |     ENDIF () | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| FOREACH (source_file ${exec_PROGRAMS}) | FOREACH (source_file ${exec_PROGRAMS}) | ||||||
| @@ -11,9 +25,27 @@ FOREACH (source_file ${exec_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|  |     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |         PRIVATE | ||||||
|  |             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |     ) | ||||||
|  |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|  |         ${Boost_SYSTEM_LIBRARY} | ||||||
|  |         ${CMAKE_THREAD_LIBS_INIT} | ||||||
|  |     ) | ||||||
|  |     IF (ZLIB_FOUND) | ||||||
|  |         TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|  |             ${ZLIB_LIBRARIES} | ||||||
|  |         ) | ||||||
|  |     ENDIF() | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|  |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |         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_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
							
								
								
									
										95
									
								
								example/boost/asio_send_recv.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								example/boost/asio_send_recv.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | |||||||
|  | // MessagePack for C++ example | ||||||
|  | // | ||||||
|  | // Copyright (C) 2017 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #include <string> | ||||||
|  | #include <sstream> | ||||||
|  | #include <iostream> | ||||||
|  |  | ||||||
|  | #include <boost/asio.hpp> | ||||||
|  | #include <boost/lexical_cast.hpp> | ||||||
|  |  | ||||||
|  | #include <msgpack.hpp> | ||||||
|  |  | ||||||
|  | int main() { | ||||||
|  |     boost::asio::io_service ios; | ||||||
|  |     std::uint16_t const port = 12345; | ||||||
|  |  | ||||||
|  |     // Server | ||||||
|  |     std::size_t const window_size = 10; | ||||||
|  |     boost::asio::ip::tcp::acceptor ac(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)); | ||||||
|  |     boost::asio::ip::tcp::socket ss(ios); | ||||||
|  |     std::function<void()> do_accept; | ||||||
|  |     std::function<void()> do_async_read_some; | ||||||
|  |  | ||||||
|  |     msgpack::unpacker unp; | ||||||
|  |  | ||||||
|  |     do_accept = [&] { | ||||||
|  |         ac.async_accept( | ||||||
|  |             ss, | ||||||
|  |             [&] | ||||||
|  |             (boost::system::error_code const& e) { | ||||||
|  |                 if (e) { | ||||||
|  |                     std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 unp.reserve_buffer(window_size); | ||||||
|  |                 do_async_read_some = [&] { | ||||||
|  |                     ss.async_read_some( | ||||||
|  |                         boost::asio::buffer(unp.buffer(), window_size), | ||||||
|  |                         [&](boost::system::error_code const& e, std::size_t bytes_transferred) { | ||||||
|  |                             if (e) { | ||||||
|  |                                 std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||||
|  |                                 return; | ||||||
|  |                             } | ||||||
|  |                             std::cout << bytes_transferred << " bytes read." << std::endl; | ||||||
|  |                             unp.buffer_consumed(bytes_transferred); | ||||||
|  |                             msgpack::object_handle oh; | ||||||
|  |                             while (unp.next(oh)) { | ||||||
|  |                                 std::cout << oh.get() << std::endl; | ||||||
|  |                                 // In order to finish the program, | ||||||
|  |                                 // return if one complete msgpack is processed. | ||||||
|  |                                 // In actual server, don't return here. | ||||||
|  |                                 return; | ||||||
|  |                             } | ||||||
|  |                             do_async_read_some(); | ||||||
|  |                         } | ||||||
|  |                     ); | ||||||
|  |                 }; | ||||||
|  |                 do_async_read_some(); | ||||||
|  |             } | ||||||
|  |         ); | ||||||
|  |     }; | ||||||
|  |     do_accept(); | ||||||
|  |  | ||||||
|  |     // Client | ||||||
|  |     auto host = "localhost"; | ||||||
|  |     boost::asio::ip::tcp::resolver r(ios); | ||||||
|  |     boost::asio::ip::tcp::resolver::query q(host, boost::lexical_cast<std::string>(port)); | ||||||
|  |     auto it = r.resolve(q); | ||||||
|  |     boost::asio::ip::tcp::socket cs(ios); | ||||||
|  |     boost::asio::async_connect( | ||||||
|  |         cs, | ||||||
|  |  | ||||||
|  |         it, | ||||||
|  |         [&] | ||||||
|  |         (boost::system::error_code const& e, boost::asio::ip::tcp::resolver::iterator) { | ||||||
|  |             if (e) { | ||||||
|  |                 std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             std::cout << __LINE__ << ":client connected" << std::endl; | ||||||
|  |             msgpack::sbuffer sb; | ||||||
|  |             msgpack::pack(sb, std::make_tuple(42, false, "hello world", 12.3456)); | ||||||
|  |             write(cs, boost::asio::buffer(sb.data(), sb.size())); | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     // Start | ||||||
|  |     ios.run(); | ||||||
|  | } | ||||||
							
								
								
									
										165
									
								
								example/boost/asio_send_recv_zlib.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								example/boost/asio_send_recv_zlib.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | |||||||
|  | // MessagePack for C++ example | ||||||
|  | // | ||||||
|  | // Copyright (C) 2017 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #include <string> | ||||||
|  | #include <sstream> | ||||||
|  | #include <iostream> | ||||||
|  |  | ||||||
|  | #include <boost/asio.hpp> | ||||||
|  | #include <boost/lexical_cast.hpp> | ||||||
|  |  | ||||||
|  | #include <msgpack.hpp> | ||||||
|  | #include <msgpack/zbuffer.hpp> | ||||||
|  |  | ||||||
|  | #include <zlib.h> | ||||||
|  |  | ||||||
|  | void print(std::string const& buf) { | ||||||
|  |     for (std::string::const_iterator it = buf.begin(), end = buf.end(); | ||||||
|  |          it != end; | ||||||
|  |          ++it) { | ||||||
|  |         std::cout | ||||||
|  |             << std::setw(2) | ||||||
|  |             << std::hex | ||||||
|  |             << std::setfill('0') | ||||||
|  |             << (static_cast<int>(*it) & 0xff) | ||||||
|  |             << ' '; | ||||||
|  |     } | ||||||
|  |     std::cout << std::dec << std::endl; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int main() { | ||||||
|  |     boost::asio::io_service ios; | ||||||
|  |     std::uint16_t const port = 12345; | ||||||
|  |  | ||||||
|  |     int num_of_zlib_data = 2; | ||||||
|  |     int idx_zlib_data = 0; | ||||||
|  |  | ||||||
|  |     // Server | ||||||
|  |     std::size_t const window_size = 11; | ||||||
|  |     boost::asio::ip::tcp::acceptor ac(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)); | ||||||
|  |     boost::asio::ip::tcp::socket ss(ios); | ||||||
|  |     std::function<void()> do_accept; | ||||||
|  |     std::function<void()> do_async_read_some; | ||||||
|  |  | ||||||
|  |     // zlib for decompress | ||||||
|  |     z_stream strm; | ||||||
|  |     auto zlib_init = [&] { | ||||||
|  |         strm.zalloc = Z_NULL; | ||||||
|  |         strm.zfree = Z_NULL; | ||||||
|  |         strm.opaque = Z_NULL; | ||||||
|  |         strm.next_in = Z_NULL; | ||||||
|  |         { | ||||||
|  |             int zret = inflateInit(&strm); | ||||||
|  |             if (zret != Z_OK) { | ||||||
|  |                 std::cout << "Zlib inflateInit() error = " << zret << std::endl; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     zlib_init(); | ||||||
|  |     std::vector<char> buf(4); // buf size | ||||||
|  |  | ||||||
|  |     msgpack::unpacker unp; | ||||||
|  |  | ||||||
|  |     do_accept = [&] { | ||||||
|  |         ac.async_accept( | ||||||
|  |             ss, | ||||||
|  |             [&] | ||||||
|  |             (boost::system::error_code const& e) { | ||||||
|  |                 if (e) { | ||||||
|  |                     std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 do_async_read_some = [&] { | ||||||
|  |                     ss.async_read_some( | ||||||
|  |                         boost::asio::buffer(buf), | ||||||
|  |                         [&](boost::system::error_code const& e, std::size_t bytes_transferred) { | ||||||
|  |                             if (e) { | ||||||
|  |                                 std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||||
|  |                                 return; | ||||||
|  |                             } | ||||||
|  |                             std::cout << bytes_transferred << " bytes read." << std::endl; | ||||||
|  |                             print(std::string(std::string(&buf[0], buf.size()))); | ||||||
|  |                             strm.avail_in = bytes_transferred; | ||||||
|  |                             do { | ||||||
|  |                                 strm.next_in = reinterpret_cast<unsigned char*>(&buf[0]) + (bytes_transferred - strm.avail_in); | ||||||
|  |                                 int zret; | ||||||
|  |                                 unp.reserve_buffer(window_size); | ||||||
|  |                                 strm.avail_out = window_size; | ||||||
|  |                                 strm.next_out = reinterpret_cast<unsigned char*>(unp.buffer()); | ||||||
|  |                                 do { | ||||||
|  |                                     zret = inflate(&strm, Z_NO_FLUSH); | ||||||
|  |                                     assert(zret != Z_STREAM_ERROR); | ||||||
|  |                                     switch (zret) { | ||||||
|  |                                     case Z_NEED_DICT: | ||||||
|  |                                         zret = Z_DATA_ERROR; | ||||||
|  |                                         // fall through | ||||||
|  |                                     case Z_DATA_ERROR: | ||||||
|  |                                     case Z_MEM_ERROR: | ||||||
|  |                                         inflateEnd(&strm); | ||||||
|  |                                         std::cout << "Zlib inflate() error = " << zret << std::endl; | ||||||
|  |                                         std::exit(-1); | ||||||
|  |                                     } | ||||||
|  |                                     std::size_t decompressed_size = window_size - strm.avail_out; | ||||||
|  |                                     std::cout << decompressed_size << " bytes decompressed." << std::endl; | ||||||
|  |                                     unp.buffer_consumed(decompressed_size); | ||||||
|  |                                     msgpack::object_handle oh; | ||||||
|  |                                     while (unp.next(oh)) { | ||||||
|  |                                         std::cout << oh.get() << std::endl; | ||||||
|  |                                     } | ||||||
|  |                                 } while (strm.avail_out == 0); | ||||||
|  |                                 if (zret == Z_STREAM_END) { | ||||||
|  |                                     inflateEnd(&strm); | ||||||
|  |                                     std::cout << "Zlib decompress finished." << std::endl; | ||||||
|  |                                     ++idx_zlib_data; | ||||||
|  |                                     if (idx_zlib_data == num_of_zlib_data) { | ||||||
|  |                                         std::cout << "All zlib decompress finished." << std::endl; | ||||||
|  |                                         return; | ||||||
|  |                                     } | ||||||
|  |                                     zlib_init(); | ||||||
|  |                                 } | ||||||
|  |                             } while (strm.avail_in != 0); | ||||||
|  |                             do_async_read_some(); | ||||||
|  |                         } | ||||||
|  |                     ); | ||||||
|  |                 }; | ||||||
|  |                 do_async_read_some(); | ||||||
|  |             } | ||||||
|  |         ); | ||||||
|  |     }; | ||||||
|  |     do_accept(); | ||||||
|  |  | ||||||
|  |     // Client | ||||||
|  |     auto host = "localhost"; | ||||||
|  |     boost::asio::ip::tcp::resolver r(ios); | ||||||
|  |     boost::asio::ip::tcp::resolver::query q(host, boost::lexical_cast<std::string>(port)); | ||||||
|  |     auto it = r.resolve(q); | ||||||
|  |     boost::asio::ip::tcp::socket cs(ios); | ||||||
|  |     boost::asio::async_connect( | ||||||
|  |         cs, | ||||||
|  |         it, | ||||||
|  |         [&] | ||||||
|  |         (boost::system::error_code const& e, boost::asio::ip::tcp::resolver::iterator) { | ||||||
|  |             if (e) { | ||||||
|  |                 std::cout << __LINE__ << ":" << e.message() << std::endl; | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             std::cout << __LINE__ << ":client connected" << std::endl; | ||||||
|  |             for (int i = 0; i != num_of_zlib_data; ++i) { | ||||||
|  |                 msgpack::zbuffer zb; | ||||||
|  |                 msgpack::pack(zb, std::make_tuple(i, false, "hello world", 12.3456)); | ||||||
|  |                 zb.flush(); // finalize zbuffer (don't forget it) | ||||||
|  |                 print(std::string(zb.data(), zb.size())); | ||||||
|  |                 write(cs, boost::asio::buffer(zb.data(), zb.size())); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     // Start | ||||||
|  |     ios.run(); | ||||||
|  | } | ||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <string> | #include <string> | ||||||
| @@ -81,8 +73,8 @@ int main() { | |||||||
|     msgpack::pack(ss1, u); |     msgpack::pack(ss1, u); | ||||||
|     print(ss1.str()); |     print(ss1.str()); | ||||||
|  |  | ||||||
|     msgpack::unpacked unp1 = msgpack::unpack(ss1.str().data(), ss1.str().size()); |     msgpack::object_handle oh1 = msgpack::unpack(ss1.str().data(), ss1.str().size()); | ||||||
|     msgpack::object const& obj1 = unp1.get(); |     msgpack::object const& obj1 = oh1.get(); | ||||||
|     std::cout << "Unpacked msgpack object." << std::endl; |     std::cout << "Unpacked msgpack object." << std::endl; | ||||||
|     std::cout << obj1 << std::endl; |     std::cout << obj1 << std::endl; | ||||||
|  |  | ||||||
| @@ -95,8 +87,8 @@ int main() { | |||||||
|     msgpack::pack(ss2, v); |     msgpack::pack(ss2, v); | ||||||
|     print(ss2.str()); |     print(ss2.str()); | ||||||
|  |  | ||||||
|     msgpack::unpacked unp2 = msgpack::unpack(ss2.str().data(), ss2.str().size()); |     msgpack::object_handle oh2 = msgpack::unpack(ss2.str().data(), ss2.str().size()); | ||||||
|     msgpack::object const& obj2 = unp2.get(); |     msgpack::object const& obj2 = oh2.get(); | ||||||
|     std::cout << "Modified msgpack object." << std::endl; |     std::cout << "Modified msgpack object." << std::endl; | ||||||
|     std::cout << obj2 << std::endl; |     std::cout << obj2 << std::endl; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <string> | #include <string> | ||||||
| @@ -53,7 +45,11 @@ struct proc:boost::static_visitor<void> { | |||||||
|                 // You can remove key-value pair from msgpack::type::variant_ref |                 // You can remove key-value pair from msgpack::type::variant_ref | ||||||
|  |  | ||||||
| #if defined(MSGPACK_USE_CPP03) | #if defined(MSGPACK_USE_CPP03) | ||||||
|  | #  if MSGPACK_LIB_STD_CXX | ||||||
|  |                 v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it++)); | ||||||
|  | #  else  // MSGPACK_LIB_STD_CXX | ||||||
|                 v.erase(it++); |                 v.erase(it++); | ||||||
|  | #  endif // MSGPACK_LIB_STD_CXX | ||||||
| #else  // defined(MSGPACK_USE_CPP03) | #else  // defined(MSGPACK_USE_CPP03) | ||||||
| #  if MSGPACK_LIB_STD_CXX | #  if MSGPACK_LIB_STD_CXX | ||||||
|                 it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it)); |                 it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it)); | ||||||
| @@ -87,8 +83,8 @@ int main() { | |||||||
|     u.address = "Tokyo"; |     u.address = "Tokyo"; | ||||||
|     msgpack::pack(ss, u); |     msgpack::pack(ss, u); | ||||||
|  |  | ||||||
|     msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size()); |     msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     msgpack::object const& obj = unp.get(); |     msgpack::object const& obj = oh.get(); | ||||||
|     std::cout << "Unpacked msgpack object." << std::endl; |     std::cout << "Unpacked msgpack object." << std::endl; | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>(); |     msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>(); | ||||||
|   | |||||||
| @@ -1,6 +1,9 @@ | |||||||
| INCLUDE_DIRECTORIES ( | IF (MSGPACK_ENABLE_SHARED) | ||||||
|     ../include |     SET (MSGPACK_LIB msgpackc) | ||||||
| ) | ELSE () | ||||||
|  |     SET (MSGPACK_LIB msgpackc-static) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
|  |  | ||||||
| LIST (APPEND exec_PROGRAMS | LIST (APPEND exec_PROGRAMS | ||||||
|     lib_buffer_unpack.c |     lib_buffer_unpack.c | ||||||
| @@ -17,11 +20,16 @@ FOREACH (source_file ${exec_PROGRAMS}) | |||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|         msgpack |         ${MSGPACK_LIB} | ||||||
|     ) |     ) | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|  |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |         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_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
| @@ -44,13 +44,14 @@ size_t receiver_recv(receiver *r, char* buf, size_t try_size) { | |||||||
| size_t receiver_to_unpacker(receiver* r, size_t request_size, | size_t receiver_to_unpacker(receiver* r, size_t request_size, | ||||||
|         msgpack_unpacker *unpacker) |         msgpack_unpacker *unpacker) | ||||||
| { | { | ||||||
|  |     size_t recv_len; | ||||||
|     // make sure there's enough room, or expand the unpacker accordingly |     // make sure there's enough room, or expand the unpacker accordingly | ||||||
|     if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) { |     if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) { | ||||||
|         msgpack_unpacker_reserve_buffer(unpacker, request_size); |         msgpack_unpacker_reserve_buffer(unpacker, request_size); | ||||||
|         assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size); |         assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size); | ||||||
|     } |     } | ||||||
|     size_t recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker), |     recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker), | ||||||
|                                     request_size); |                              request_size); | ||||||
|     msgpack_unpacker_buffer_consumed(unpacker, recv_len); |     msgpack_unpacker_buffer_consumed(unpacker, recv_len); | ||||||
|     return recv_len; |     return recv_len; | ||||||
| } | } | ||||||
| @@ -70,7 +71,11 @@ void unpack(receiver* r) { | |||||||
|     while (true) { |     while (true) { | ||||||
|         recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp); |         recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp); | ||||||
|         if (recv_len == 0) break; // (reached end of input) |         if (recv_len == 0) break; // (reached end of input) | ||||||
|  | #if defined(_MSC_VER) || defined(__MINGW32__) | ||||||
|  |         printf("receive count: %d %Id bytes received.\n", recv_count++, recv_len); | ||||||
|  | #else // defined(_MSC_VER) || defined(__MINGW32__) | ||||||
|         printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len); |         printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len); | ||||||
|  | #endif // defined(_MSC_VER) || defined(__MINGW32__) | ||||||
|         ret = msgpack_unpacker_next(unp, &result); |         ret = msgpack_unpacker_next(unp, &result); | ||||||
|         while (ret == MSGPACK_UNPACK_SUCCESS) { |         while (ret == MSGPACK_UNPACK_SUCCESS) { | ||||||
|             msgpack_object obj = result.data; |             msgpack_object obj = result.data; | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ void test() | |||||||
|  |  | ||||||
|     msgpack_unpacked_init(&msg); |     msgpack_unpacked_init(&msg); | ||||||
|  |  | ||||||
|     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos)) { |     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     msgpack_sbuffer_destroy(&buf); |     msgpack_sbuffer_destroy(&buf); | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ void test() | |||||||
|  |  | ||||||
|     msgpack_unpacked_init(&msg); |     msgpack_unpacked_init(&msg); | ||||||
|  |  | ||||||
|     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos)) { |     while (msgpack_unpack_next(&msg, buf.data, buf.size, &upk_pos) == MSGPACK_UNPACK_SUCCESS) { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     msgpack_sbuffer_destroy(&buf); |     msgpack_sbuffer_destroy(&buf); | ||||||
|   | |||||||
| @@ -2,6 +2,8 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
|  |  | ||||||
|  | #define UNPACKED_BUFFER_SIZE 2048 | ||||||
|  |  | ||||||
| void prepare(msgpack_sbuffer* sbuf) { | void prepare(msgpack_sbuffer* sbuf) { | ||||||
|     msgpack_packer pk; |     msgpack_packer pk; | ||||||
|  |  | ||||||
| @@ -27,6 +29,7 @@ void unpack(char const* buf, size_t len) { | |||||||
|     size_t off = 0; |     size_t off = 0; | ||||||
|     msgpack_unpack_return ret; |     msgpack_unpack_return ret; | ||||||
|     int i = 0; |     int i = 0; | ||||||
|  |     char unpacked_buffer[UNPACKED_BUFFER_SIZE]; | ||||||
|     msgpack_unpacked_init(&result); |     msgpack_unpacked_init(&result); | ||||||
|     ret = msgpack_unpack_next(&result, buf, len, &off); |     ret = msgpack_unpack_next(&result, buf, len, &off); | ||||||
|     while (ret == MSGPACK_UNPACK_SUCCESS) { |     while (ret == MSGPACK_UNPACK_SUCCESS) { | ||||||
| @@ -36,6 +39,8 @@ void unpack(char const* buf, size_t len) { | |||||||
|         printf("Object no %d:\n", ++i); |         printf("Object no %d:\n", ++i); | ||||||
|         msgpack_object_print(stdout, obj); |         msgpack_object_print(stdout, obj); | ||||||
|         printf("\n"); |         printf("\n"); | ||||||
|  |         msgpack_object_print_buffer(unpacked_buffer, UNPACKED_BUFFER_SIZE, obj); | ||||||
|  |         printf("%s\n", unpacked_buffer); | ||||||
|         /* If you want to allocate something on the zone, you can use zone. */ |         /* If you want to allocate something on the zone, you can use zone. */ | ||||||
|         /* msgpack_zone* zone = result.zone; */ |         /* msgpack_zone* zone = result.zone; */ | ||||||
|         /* The lifetime of the obj and the zone,  */ |         /* The lifetime of the obj and the zone,  */ | ||||||
|   | |||||||
| @@ -5,12 +5,17 @@ LIST (APPEND exec_PROGRAMS | |||||||
|     custom.cpp |     custom.cpp | ||||||
|     enum.cpp |     enum.cpp | ||||||
|     map_based_versionup.cpp |     map_based_versionup.cpp | ||||||
|     protocol.cpp |  | ||||||
|     protocol_new.cpp |     protocol_new.cpp | ||||||
|     reuse_zone.cpp |     reuse_zone.cpp | ||||||
|     simple.cpp |     simple.cpp | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | IF (MSGPACK_DEFAULT_API_VERSION EQUAL 1) | ||||||
|  |     LIST (APPEND exec_PROGRAMS | ||||||
|  |         protocol.cpp | ||||||
|  |     ) | ||||||
|  | ENDIF () | ||||||
|  |  | ||||||
| IF (NOT MSVC) | IF (NOT MSVC) | ||||||
|     LIST (APPEND with_pthread_PROGRAMS |     LIST (APPEND with_pthread_PROGRAMS | ||||||
|         stream.cpp |         stream.cpp | ||||||
| @@ -18,12 +23,10 @@ IF (NOT MSVC) | |||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| IF (MSGPACK_BOOST) | IF (MSGPACK_BOOST) | ||||||
|     IF (NOT MSVC) |     LIST (APPEND with_boost_lib_PROGRAMS | ||||||
|         LIST (APPEND with_boost_lib_PROGRAMS |         speed_test.cpp | ||||||
|             speed_test.cpp |         speed_test_nested_array.cpp | ||||||
|             speed_test_nested_array.cpp |     ) | ||||||
|         ) |  | ||||||
|     ENDIF () |  | ||||||
| ENDIF () | ENDIF () | ||||||
|  |  | ||||||
| FOREACH (source_file ${exec_PROGRAMS}) | FOREACH (source_file ${exec_PROGRAMS}) | ||||||
| @@ -32,8 +35,12 @@ FOREACH (source_file ${exec_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|  |     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |         PRIVATE | ||||||
|  |             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |     ) | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
| @@ -50,11 +57,15 @@ FOREACH (source_file ${with_pthread_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|  |     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |         PRIVATE | ||||||
|  |             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |     ) | ||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|         pthread |         ${CMAKE_THREAD_LIBS_INIT} | ||||||
|     ) |     ) | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3 -pthread") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
| @@ -75,6 +86,10 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS}) | |||||||
|         ${source_file_we} |         ${source_file_we} | ||||||
|         ${source_file} |         ${source_file} | ||||||
|     ) |     ) | ||||||
|  |     TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |         PRIVATE | ||||||
|  |             $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |     ) | ||||||
|     LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) |     LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) | ||||||
|     TARGET_LINK_LIBRARIES (${source_file_we} |     TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|         ${Boost_TIMER_LIBRARY} |         ${Boost_TIMER_LIBRARY} | ||||||
| @@ -86,9 +101,15 @@ FOREACH (source_file ${with_boost_lib_PROGRAMS}) | |||||||
|             rt |             rt | ||||||
|         ) |         ) | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3") |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -O3") | ||||||
|     ENDIF () |     ENDIF () | ||||||
|  |  | ||||||
|  |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |         SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |     ENDIF () | ||||||
|  |  | ||||||
|     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") |     IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |         IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |             STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <string> | #include <string> | ||||||
| @@ -92,9 +84,9 @@ int main() { | |||||||
|  |  | ||||||
|         print(ss.str()); |         print(ss.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked unp; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(unp, ss.str().data(), ss.str().size()); |             msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|         msgpack::object obj = unp.get(); |         msgpack::object obj = oh.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<my_class>() == my); |         assert(obj.as<my_class>() == my); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <string> | #include <string> | ||||||
| @@ -67,9 +59,9 @@ int main() { | |||||||
|  |  | ||||||
|         print(ss.str()); |         print(ss.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked unp; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(unp, ss.str().data(), ss.str().size()); |             msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|         msgpack::object obj = unp.get(); |         msgpack::object obj = oh.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<my_class>() == my); |         assert(obj.as<my_class>() == my); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <string> | #include <string> | ||||||
| @@ -77,7 +69,7 @@ struct object_with_zone<my_class> { | |||||||
|         o.type = type::ARRAY; |         o.type = type::ARRAY; | ||||||
|         o.via.array.size = 2; |         o.via.array.size = 2; | ||||||
|         o.via.array.ptr = static_cast<msgpack::object*>( |         o.via.array.ptr = static_cast<msgpack::object*>( | ||||||
|             o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size)); |             o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size, MSGPACK_ZONE_ALIGNOF(msgpack::object))); | ||||||
|         o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone); |         o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone); | ||||||
|         o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); |         o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone); | ||||||
|     } |     } | ||||||
| @@ -110,9 +102,9 @@ int main() { | |||||||
|  |  | ||||||
|         print(ss.str()); |         print(ss.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked unp; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(unp, ss.str().data(), ss.str().size()); |             msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|         msgpack::object obj = unp.get(); |         msgpack::object obj = oh.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<my_class>() == my); |         assert(obj.as<my_class>() == my); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <msgpack.hpp> | #include <msgpack.hpp> | ||||||
| @@ -48,11 +40,11 @@ int main(void) | |||||||
|         std::stringstream sbuf; |         std::stringstream sbuf; | ||||||
|         msgpack::pack(sbuf, oc); |         msgpack::pack(sbuf, oc); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size()); |             msgpack::unpack(sbuf.str().data(), sbuf.str().size()); | ||||||
|         msgpack::object obj = result.get(); |         msgpack::object obj = oh.get(); | ||||||
|  |  | ||||||
|         obj.convert(&nc); |         obj.convert(nc); | ||||||
|  |  | ||||||
|         std::cout << obj << " value=" << nc.value << " flag=" << nc.flag << std::endl; |         std::cout << obj << " value=" << nc.value << " flag=" << nc.flag << std::endl; | ||||||
|     } |     } | ||||||
| @@ -64,11 +56,11 @@ int main(void) | |||||||
|         std::stringstream sbuf; |         std::stringstream sbuf; | ||||||
|         msgpack::pack(sbuf, nc); |         msgpack::pack(sbuf, nc); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size()); |             msgpack::unpack(sbuf.str().data(), sbuf.str().size()); | ||||||
|         msgpack::object obj = result.get(); |         msgpack::object obj = oh.get(); | ||||||
|  |  | ||||||
|         obj.convert(&oc); |         obj.convert(oc); | ||||||
|  |  | ||||||
|         std::cout << obj << " value=" << oc.value << std::endl; |         std::cout << obj << " value=" << oc.value << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <sstream> | #include <sstream> | ||||||
| @@ -38,20 +30,20 @@ int main(void) | |||||||
|         my_enum e3 = elem3; |         my_enum e3 = elem3; | ||||||
|         msgpack::pack(sbuf, e3); |         msgpack::pack(sbuf, e3); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh; | ||||||
|         std::size_t off = 0; |         std::size_t off = 0; | ||||||
|  |  | ||||||
|         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off); |         msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off); | ||||||
|         std::cout << result.get().as<my_enum>() << std::endl; |         std::cout << oh.get().as<my_enum>() << std::endl; | ||||||
|         assert(result.get().as<my_enum>() == elem1); |         assert(oh.get().as<my_enum>() == elem1); | ||||||
|  |  | ||||||
|         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off); |         msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off); | ||||||
|         std::cout << result.get().as<my_enum>() << std::endl; |         std::cout << oh.get().as<my_enum>() << std::endl; | ||||||
|         assert(result.get().as<my_enum>() == elem2); |         assert(oh.get().as<my_enum>() == elem2); | ||||||
|  |  | ||||||
|         msgpack::unpack(result, sbuf.str().data(), sbuf.str().size(), off); |         msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off); | ||||||
|         std::cout << result.get().as<my_enum>() << std::endl; |         std::cout << oh.get().as<my_enum>() << std::endl; | ||||||
|         assert(result.get().as<my_enum>() == elem3); |         assert(oh.get().as<my_enum>() == elem3); | ||||||
|     } |     } | ||||||
|     {   // create object without zone |     {   // create object without zone | ||||||
|         msgpack::object obj(elem2); |         msgpack::object obj(elem2); | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <string> | #include <string> | ||||||
| @@ -79,9 +71,9 @@ int main() { | |||||||
|  |  | ||||||
|         print(ss.str()); |         print(ss.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size()); |         msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|  |  | ||||||
|         msgpack::object obj = unp.get(); |         msgpack::object obj = oh.get(); | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|  |  | ||||||
|         v2 newv = obj.as<v2>(); |         v2 newv = obj.as<v2>(); | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <msgpack.hpp> | #include <msgpack.hpp> | ||||||
| @@ -65,9 +57,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(result, buffer.data(), buffer.size()); |             msgpack::unpack(buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = result.get(); |         msgpack::object o = oh.get(); | ||||||
|  |  | ||||||
|         myprotocol::Get req; |         myprotocol::Get req; | ||||||
|         o.convert(req); |         o.convert(req); | ||||||
| @@ -93,9 +85,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(result, buffer.data(), buffer.size()); |             msgpack::unpack(buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = result.get(); |         msgpack::object o = oh.get(); | ||||||
|  |  | ||||||
|  |  | ||||||
|         myprotocol::MultiGet req; |         myprotocol::MultiGet req; | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <msgpack.hpp> | #include <msgpack.hpp> | ||||||
| @@ -52,9 +44,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(result, buffer.data(), buffer.size()); |             msgpack::unpack(buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = result.get(); |         msgpack::object o = oh.get(); | ||||||
|  |  | ||||||
|         myprotocol::Get req; |         myprotocol::Get req; | ||||||
|         o.convert(req); |         o.convert(req); | ||||||
| @@ -80,9 +72,9 @@ int main(void) | |||||||
|     { |     { | ||||||
|         std::string buffer(stream.str()); |         std::string buffer(stream.str()); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh = | ||||||
|         msgpack::unpack(result, buffer.data(), buffer.size()); |             msgpack::unpack(buffer.data(), buffer.size()); | ||||||
|         msgpack::object o = result.get(); |         msgpack::object o = oh.get(); | ||||||
|  |  | ||||||
|  |  | ||||||
|         myprotocol::MultiGet req; |         myprotocol::MultiGet req; | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <iostream> | #include <iostream> | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <msgpack.hpp> | #include <msgpack.hpp> | ||||||
| @@ -35,12 +27,10 @@ int main(void) | |||||||
|     // deserialize the buffer into msgpack::object instance. |     // deserialize the buffer into msgpack::object instance. | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::unpacked result; |     msgpack::object_handle oh = msgpack::unpack(str.data(), str.size()); | ||||||
|  |  | ||||||
|     msgpack::unpack(result, str.data(), str.size()); |     // deserialized object is valid during the msgpack::object_handle instance alive. | ||||||
|  |     msgpack::object deserialized = oh.get(); | ||||||
|     // deserialized object is valid during the msgpack::unpacked instance alive. |  | ||||||
|     msgpack::object deserialized = result.get(); |  | ||||||
|  |  | ||||||
|     // msgpack::object supports ostream. |     // msgpack::object supports ostream. | ||||||
|     std::cout << deserialized << std::endl; |     std::cout << deserialized << std::endl; | ||||||
| @@ -48,7 +38,7 @@ int main(void) | |||||||
|     // convert msgpack::object instance into the original type. |     // convert msgpack::object instance into the original type. | ||||||
|     // if the type is mismatched, it throws msgpack::type_error exception. |     // if the type is mismatched, it throws msgpack::type_error exception. | ||||||
|     msgpack::type::tuple<int, bool, std::string> dst; |     msgpack::type::tuple<int, bool, std::string> dst; | ||||||
|     deserialized.convert(&dst); |     deserialized.convert(dst); | ||||||
|  |  | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2013-2015 KONDO Takatoshi | // Copyright (C) 2013-2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| // g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system | // g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system | ||||||
| @@ -45,11 +37,11 @@ void test_map_pack_unpack() { | |||||||
|     buffer.seekg(0); |     buffer.seekg(0); | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::unpacked unpacked; |     msgpack::object_handle oh; | ||||||
|     std::cout << "Start unpacking...by void unpack(unpacked& result, const char* data, size_t len)" << std::endl; |     std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         msgpack::unpack(unpacked, str.data(), str.size()); |         msgpack::unpack(oh, str.data(), str.size()); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
| @@ -58,7 +50,7 @@ void test_map_pack_unpack() { | |||||||
|     std::cout << "Start converting..." << std::endl; |     std::cout << "Start converting..." << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         unpacked.get().convert(&m2); |         oh.get().convert(m2); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2013-2015 KONDO Takatoshi | // Copyright (C) 2013-2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| // g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system | // g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system | ||||||
| @@ -68,11 +60,11 @@ void test_array_of_array() { | |||||||
|     buffer.seekg(0); |     buffer.seekg(0); | ||||||
|     std::string str(buffer.str()); |     std::string str(buffer.str()); | ||||||
|  |  | ||||||
|     msgpack::unpacked unpacked; |     msgpack::object_handle oh; | ||||||
|     std::cout << "Start unpacking...by void unpack(unpacked& result, const char* data, size_t len)" << std::endl; |     std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         msgpack::unpack(unpacked, str.data(), str.size()); |         msgpack::unpack(oh, str.data(), str.size()); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
| @@ -81,7 +73,7 @@ void test_array_of_array() { | |||||||
|     std::cout << "Start converting..." << std::endl; |     std::cout << "Start converting..." << std::endl; | ||||||
|     { |     { | ||||||
|         boost::timer::cpu_timer timer; |         boost::timer::cpu_timer timer; | ||||||
|         unpacked.get().convert(&v2); |         oh.get().convert(v2); | ||||||
|         std::string result = timer.format(); |         std::string result = timer.format(); | ||||||
|         std::cout << result << std::endl; |         std::cout << result << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <msgpack.hpp> | #include <msgpack.hpp> | ||||||
| @@ -24,6 +16,12 @@ | |||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <pthread.h> | #include <pthread.h> | ||||||
|  |  | ||||||
|  | #if defined(_MSC_VER) || defined(__MINGW32__) | ||||||
|  | #include <io.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #define pipe(fds) _pipe(fds, 4096, _O_BINARY) | ||||||
|  | #endif // _MSC_VER || __MINGW32__ | ||||||
|  |  | ||||||
| class Server { | class Server { | ||||||
| public: | public: | ||||||
|     Server(int sock) : m_sock(sock) { } |     Server(int sock) : m_sock(sock) { } | ||||||
| @@ -51,10 +49,10 @@ public: | |||||||
|  |  | ||||||
|         m_pac.buffer_consumed(count); |         m_pac.buffer_consumed(count); | ||||||
|  |  | ||||||
|         msgpack::unpacked result; |         msgpack::object_handle oh; | ||||||
|         while (m_pac.next(&result)) { |         while (m_pac.next(oh)) { | ||||||
|             msgpack::object msg = result.get(); |             msgpack::object msg = oh.get(); | ||||||
|             unique_zone& life = result.zone(); |             unique_zone& life = oh.zone(); | ||||||
|             process_message(msg, life); |             process_message(msg, life); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,15 +8,30 @@ IF (MSGPACK_CXX11) | |||||||
|         non_def_con_class.cpp |         non_def_con_class.cpp | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |     IF ("${MSGPACK_DEFAULT_API_VERSION}" GREATER "1") | ||||||
|  |         LIST (APPEND exec_PROGRAMS | ||||||
|  |             socket_stream_example.cpp | ||||||
|  |         ) | ||||||
|  |     ENDIF () | ||||||
|  |  | ||||||
|     FOREACH (source_file ${exec_PROGRAMS}) |     FOREACH (source_file ${exec_PROGRAMS}) | ||||||
|         GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) |         GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) | ||||||
|         ADD_EXECUTABLE ( |         ADD_EXECUTABLE ( | ||||||
|             ${source_file_we} |             ${source_file_we} | ||||||
|             ${source_file} |             ${source_file} | ||||||
|         ) |         ) | ||||||
|  |         TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |             PRIVATE | ||||||
|  |                 $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |         ) | ||||||
|         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3") |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g -O3 ") | ||||||
|         ENDIF () |         ENDIF () | ||||||
|  |  | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |             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_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|             IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |             IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|                 STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |                 STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <iostream> | #include <iostream> | ||||||
| @@ -33,8 +25,8 @@ void array() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, a); |     msgpack::pack(ss, a); | ||||||
|  |  | ||||||
|     msgpack::unpacked und = msgpack::unpack(ss.str().data(), ss.str().size()); |     msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     msgpack::object obj = und.get(); |     msgpack::object obj = oh.get(); | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert((obj.as<std::array<int, 5>>()) == a); |     assert((obj.as<std::array<int, 5>>()) == a); | ||||||
| @@ -45,8 +37,8 @@ void tuple() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, t); |     msgpack::pack(ss, t); | ||||||
|  |  | ||||||
|     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); |     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto obj = und.get(); |     auto obj = oh.get(); | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<decltype(t)>() == t); |     assert(obj.as<decltype(t)>() == t); | ||||||
| @@ -57,8 +49,8 @@ void unordered_map() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, m); |     msgpack::pack(ss, m); | ||||||
|  |  | ||||||
|     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); |     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     msgpack::object obj = und.get(); |     msgpack::object obj = oh.get(); | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<decltype(m)>() == m); |     assert(obj.as<decltype(m)>() == m); | ||||||
| @@ -69,8 +61,8 @@ void unordered_set() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, s); |     msgpack::pack(ss, s); | ||||||
|  |  | ||||||
|     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); |     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto obj = und.get(); |     auto obj = oh.get(); | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<decltype(s)>() == s); |     assert(obj.as<decltype(s)>() == s); | ||||||
| @@ -82,8 +74,8 @@ void forward_list() { | |||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     msgpack::pack(ss, f); |     msgpack::pack(ss, f); | ||||||
|  |  | ||||||
|     auto und = msgpack::unpack(ss.str().data(), ss.str().size()); |     auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); | ||||||
|     auto obj = und.get(); |     auto obj = oh.get(); | ||||||
|  |  | ||||||
|     std::cout << obj << std::endl; |     std::cout << obj << std::endl; | ||||||
|     assert(obj.as<type>() == f); |     assert(obj.as<type>() == f); | ||||||
| @@ -106,40 +98,40 @@ void combi() { | |||||||
|     std::size_t offset = 0; |     std::size_t offset = 0; | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); |         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto obj = und.get(); |         auto obj = oh.get(); | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(a)>() == a); |         assert(obj.as<decltype(a)>() == a); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); |         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto obj = und.get(); |         auto obj = oh.get(); | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(t)>() == t); |         assert(obj.as<decltype(t)>() == t); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); |         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto obj = und.get(); |         auto obj = oh.get(); | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(m)>() == m); |         assert(obj.as<decltype(m)>() == m); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); |         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto obj = und.get(); |         auto obj = oh.get(); | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(s)>() == s); |         assert(obj.as<decltype(s)>() == s); | ||||||
|     } |     } | ||||||
|     std::cout << "offset: " << offset << std::endl; |     std::cout << "offset: " << offset << std::endl; | ||||||
|     { |     { | ||||||
|         auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset); |         auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset); | ||||||
|         auto obj = und.get(); |         auto obj = oh.get(); | ||||||
|  |  | ||||||
|         std::cout << obj << std::endl; |         std::cout << obj << std::endl; | ||||||
|         assert(obj.as<decltype(f)>() == f); |         assert(obj.as<decltype(f)>() == f); | ||||||
|   | |||||||
| @@ -2,17 +2,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #include <cassert> | #include <cassert> | ||||||
|   | |||||||
							
								
								
									
										157
									
								
								example/cpp11/socket_stream_example.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								example/cpp11/socket_stream_example.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,157 @@ | |||||||
|  | #include <iostream> | ||||||
|  | #include <sstream> | ||||||
|  | #include <msgpack.hpp> | ||||||
|  |  | ||||||
|  | struct json_like_visitor : msgpack::v2::null_visitor { | ||||||
|  |     json_like_visitor(std::string& s):m_s(s), m_ref(false) {} // m_ref is false by default | ||||||
|  |  | ||||||
|  |     bool visit_nil() { | ||||||
|  |         m_s += "null"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_boolean(bool v) { | ||||||
|  |         if (v) m_s += "true"; | ||||||
|  |         else m_s += "false"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_positive_integer(uint64_t v) { | ||||||
|  |         std::stringstream ss; | ||||||
|  |         ss << v; | ||||||
|  |         m_s += ss.str(); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_negative_integer(int64_t v) { | ||||||
|  |         std::stringstream ss; | ||||||
|  |         ss << v; | ||||||
|  |         m_s += ss.str(); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_str(const char* v, uint32_t size) { | ||||||
|  |         // I omit escape process. | ||||||
|  |         m_s += '"' + std::string(v, size) + '"'; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool start_array(uint32_t /*num_elements*/) { | ||||||
|  |         m_s += "["; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_array_item() { | ||||||
|  |         m_s += ","; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_array() { | ||||||
|  |         m_s.erase(m_s.size() - 1, 1); // remove the last ',' | ||||||
|  |         m_s += "]"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool start_map(uint32_t /*num_kv_pairs*/) { | ||||||
|  |         m_s += "{"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_map_key() { | ||||||
|  |         m_s += ":"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_map_value() { | ||||||
|  |         m_s += ","; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_map() { | ||||||
|  |         m_s.erase(m_s.size() - 1, 1); // remove the last ',' | ||||||
|  |         m_s += "}"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     void parse_error(size_t /*parsed_offset*/, size_t /*error_offset*/) { | ||||||
|  |         std::cerr << "parse error"<<std::endl; | ||||||
|  |     } | ||||||
|  |     void insufficient_bytes(size_t /*parsed_offset*/, size_t /*error_offset*/) { | ||||||
|  |         std::cout << "insufficient bytes"<<std::endl; | ||||||
|  |     } | ||||||
|  |     std::string& m_s; | ||||||
|  |  | ||||||
|  |     // These two functions are required by parser. | ||||||
|  |     void set_referenced(bool ref) { m_ref = ref; } | ||||||
|  |     bool referenced() const { return m_ref; } | ||||||
|  |     bool m_ref; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct do_nothing { | ||||||
|  |     void operator()(char* /*buffer*/) { | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class json_like_printer : public msgpack::parser<json_like_printer, do_nothing>, | ||||||
|  |                           public json_like_visitor { | ||||||
|  |     typedef parser<json_like_printer, do_nothing> parser_t; | ||||||
|  | public: | ||||||
|  |     json_like_printer(std::size_t initial_buffer_size = MSGPACK_UNPACKER_INIT_BUFFER_SIZE) | ||||||
|  |         :parser_t(do_nothing_, initial_buffer_size), | ||||||
|  |          json_like_visitor(json_str_) { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     json_like_visitor& visitor() { return *this; } | ||||||
|  |     void print() { std::cout << json_str_ << std::endl; json_str_.clear();} | ||||||
|  | private: | ||||||
|  |     do_nothing do_nothing_; | ||||||
|  |     std::string json_str_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct ref_buffer { | ||||||
|  |     ref_buffer(T& t):t(t) {} | ||||||
|  |     void write(char const* ptr, std::size_t len) { | ||||||
|  |         if (len > t.buffer_capacity()) { | ||||||
|  |             t.reserve_buffer(len - t.buffer_capacity()); | ||||||
|  |         } | ||||||
|  |         std::memcpy(t.buffer(), ptr, len); | ||||||
|  |         t.buffer_consumed(len); | ||||||
|  |     } | ||||||
|  |     T& t; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #define BUFFERING_SIZE_MAX 100 | ||||||
|  |  | ||||||
|  | //simulates streamed content (a socket for example) | ||||||
|  | bool produce( std::stringstream & ss, char* buff, std::size_t& size) | ||||||
|  | { | ||||||
|  |     ss.read(buff, BUFFERING_SIZE_MAX); | ||||||
|  |     size = static_cast<std::size_t>(ss.gcount()); | ||||||
|  |     return (size > 0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //shows how you can treat data  | ||||||
|  | void consume( const char* buff, const std::size_t size,  | ||||||
|  |     ref_buffer<json_like_printer> & rb, | ||||||
|  |     json_like_printer & jp | ||||||
|  |     ) | ||||||
|  | { | ||||||
|  |     rb.write(buff,size); | ||||||
|  |     while( jp.next() ) | ||||||
|  |     { | ||||||
|  |         //here we print the data, you could do any wanted processing | ||||||
|  |         jp.print(); | ||||||
|  |     }   | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int main() { | ||||||
|  |  | ||||||
|  |     std::vector<std::vector<int>> vvi1 { { 1,2,3,4,5}, { 6,7,8,9,10} };  | ||||||
|  |     std::vector<std::vector<int>> vvi2 { { 11,12,13,14,15}, { 16,17,18,19,20} }; | ||||||
|  |  | ||||||
|  |     std::stringstream ss; | ||||||
|  |      | ||||||
|  |     msgpack::pack(ss, vvi1); | ||||||
|  |     msgpack::pack(ss, vvi2); | ||||||
|  |  | ||||||
|  |     char buffer[BUFFERING_SIZE_MAX]; | ||||||
|  |     std::size_t size = 0; | ||||||
|  |  | ||||||
|  |     json_like_printer jp(1); // set initial buffer size explicitly | ||||||
|  |     ref_buffer<json_like_printer> rb(jp); | ||||||
|  |  | ||||||
|  |     while( produce(ss,buffer,size) ) | ||||||
|  |     { | ||||||
|  |         consume(buffer, size, rb, jp); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										72
									
								
								example/x3/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								example/x3/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | IF (MSGPACK_USE_X3_PARSE) | ||||||
|  |     INCLUDE_DIRECTORIES ( | ||||||
|  |         ../include | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     LIST (APPEND exec_PROGRAMS | ||||||
|  |         unpack.cpp | ||||||
|  |         parse.cpp | ||||||
|  |     ) | ||||||
|  |     IF (MSGPACK_BOOST) | ||||||
|  |         LIST (APPEND with_boost_PROGRAMS | ||||||
|  |             stream_unpack.cpp | ||||||
|  |         ) | ||||||
|  |     ENDIF () | ||||||
|  |     FOREACH (source_file ${exec_PROGRAMS}) | ||||||
|  |         GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) | ||||||
|  |         ADD_EXECUTABLE ( | ||||||
|  |             ${source_file_we} | ||||||
|  |             ${source_file} | ||||||
|  |         ) | ||||||
|  |         TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |             PRIVATE | ||||||
|  |                 $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |         ) | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g ") | ||||||
|  |         ENDIF () | ||||||
|  |  | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |         ENDIF () | ||||||
|  |  | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|  |             IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|  |                 STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|  |             ELSE () | ||||||
|  |                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX") | ||||||
|  |             ENDIF () | ||||||
|  |         ENDIF () | ||||||
|  |     ENDFOREACH () | ||||||
|  |     FOREACH (source_file ${with_boost_PROGRAMS}) | ||||||
|  |         GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE) | ||||||
|  |         ADD_EXECUTABLE ( | ||||||
|  |             ${source_file_we} | ||||||
|  |             ${source_file} | ||||||
|  |         ) | ||||||
|  |         TARGET_INCLUDE_DIRECTORIES (${source_file_we} | ||||||
|  |             PRIVATE | ||||||
|  |                 $<TARGET_PROPERTY:msgpackc,INTERFACE_INCLUDE_DIRECTORIES> | ||||||
|  |         ) | ||||||
|  |         TARGET_LINK_LIBRARIES (${source_file_we} | ||||||
|  |             ${Boost_CONTEXT_LIBRARY} | ||||||
|  |             ${Boost_SYSTEM_LIBRARY} | ||||||
|  |             ${CMAKE_THREAD_LIBS_INIT} | ||||||
|  |         ) | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") | ||||||
|  |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -g ") | ||||||
|  |         ENDIF () | ||||||
|  |  | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||||
|  |             SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-mismatched-tags") | ||||||
|  |         ENDIF () | ||||||
|  |  | ||||||
|  |         IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") | ||||||
|  |             IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | ||||||
|  |                 STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | ||||||
|  |             ELSE () | ||||||
|  |                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX") | ||||||
|  |             ENDIF () | ||||||
|  |         ENDIF () | ||||||
|  |     ENDFOREACH () | ||||||
|  | ENDIF () | ||||||
							
								
								
									
										125
									
								
								example/x3/parse.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								example/x3/parse.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | |||||||
|  | // MessagePack for C++ example | ||||||
|  | // | ||||||
|  | // Copyright (C) 2017 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #include <iostream> | ||||||
|  | #include <sstream> | ||||||
|  | #include <cassert> | ||||||
|  |  | ||||||
|  | // MSGPACK_USE_X3_PARSE should be defined before including msgpack.hpp | ||||||
|  | // It usually defined as a compiler option as -DMSGPACK_USE_X3_PARSE. | ||||||
|  |  | ||||||
|  | #include <msgpack.hpp> | ||||||
|  |  | ||||||
|  | struct json_like_visitor : msgpack::v2::null_visitor { | ||||||
|  |     json_like_visitor(std::string& s):m_s(s) {} | ||||||
|  |  | ||||||
|  |     bool visit_nil() { | ||||||
|  |         m_s += "null"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_boolean(bool v) { | ||||||
|  |         if (v) m_s += "true"; | ||||||
|  |         else m_s += "false"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_positive_integer(uint64_t v) { | ||||||
|  |         std::stringstream ss; | ||||||
|  |         ss << v; | ||||||
|  |         m_s += ss.str(); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_negative_integer(int64_t v) { | ||||||
|  |         std::stringstream ss; | ||||||
|  |         ss << v; | ||||||
|  |         m_s += ss.str(); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_float32(float v) { | ||||||
|  |         std::stringstream ss; | ||||||
|  |         ss << v; | ||||||
|  |         m_s += ss.str(); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_float64(double v) { | ||||||
|  |         std::stringstream ss; | ||||||
|  |         ss << v; | ||||||
|  |         m_s += ss.str(); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool visit_str(const char* v, uint32_t size) { | ||||||
|  |         m_s += '"' + std::string(v, size) + '"'; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool start_array(uint32_t /*num_elements*/) { | ||||||
|  |         m_s += "["; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_array_item() { | ||||||
|  |         m_s += ","; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_array() { | ||||||
|  |         m_s.erase(m_s.size() - 1, 1); // remove the last ',' | ||||||
|  |         m_s += "]"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool start_map(uint32_t /*num_kv_pairs*/) { | ||||||
|  |         m_s += "{"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_map_key() { | ||||||
|  |         m_s += ":"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_map_value() { | ||||||
|  |         m_s += ","; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     bool end_map() { | ||||||
|  |         m_s.erase(m_s.size() - 1, 1); // remove the last ',' | ||||||
|  |         m_s += "}"; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     void parse_error(size_t /*parsed_offset*/, size_t /*error_offset*/) { | ||||||
|  |     } | ||||||
|  |     void insufficient_bytes(size_t /*parsed_offset*/, size_t /*error_offset*/) { | ||||||
|  |     } | ||||||
|  |     std::string& m_s; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | int main() { | ||||||
|  |     std::stringstream ss; | ||||||
|  |     std::map<std::string, std::vector<int>> v1 { | ||||||
|  |         { "ABC", { 1, 2, 3 } }, | ||||||
|  |         { "DEFG", { 4, 5 } } | ||||||
|  |     }; | ||||||
|  |     std::vector<std::string> v2 { | ||||||
|  |         "HIJ", "KLM", "NOP" | ||||||
|  |     }; | ||||||
|  |     msgpack::pack(ss, v1); | ||||||
|  |     msgpack::pack(ss, v2); | ||||||
|  |  | ||||||
|  |     std::string const& buf = ss.str(); | ||||||
|  |     auto it = buf.begin(); | ||||||
|  |     auto end = buf.end(); | ||||||
|  |     { | ||||||
|  |         std::string str; | ||||||
|  |         bool ret = msgpack::parse(it, end, json_like_visitor(str)); | ||||||
|  |         // it is updated here. | ||||||
|  |         assert(ret); | ||||||
|  |         std::cout << str << std::endl; | ||||||
|  |     } | ||||||
|  |     { | ||||||
|  |         std::string str; | ||||||
|  |         bool ret = msgpack::parse(it, end, json_like_visitor(str)); | ||||||
|  |         // it is updated here. | ||||||
|  |         assert(ret); | ||||||
|  |         std::cout << str << std::endl; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										248
									
								
								example/x3/stream_unpack.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								example/x3/stream_unpack.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,248 @@ | |||||||
|  | // MessagePack for C++ example | ||||||
|  | // | ||||||
|  | // Copyright (C) 2017 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #include <iostream> | ||||||
|  | #include <sstream> | ||||||
|  | #include <cassert> | ||||||
|  | #include <thread> | ||||||
|  |  | ||||||
|  | // MSGPACK_USE_X3_PARSE should be defined before including msgpack.hpp | ||||||
|  | // It usually defined as a compiler option as -DMSGPACK_USE_X3_PARSE. | ||||||
|  |  | ||||||
|  | //#define MSGPACK_USE_X3_PARSE | ||||||
|  |  | ||||||
|  | #include <msgpack.hpp> | ||||||
|  |  | ||||||
|  | #include <boost/asio.hpp> | ||||||
|  | #include <boost/coroutine2/all.hpp> | ||||||
|  |  | ||||||
|  | #if defined(__clang__) | ||||||
|  | #pragma GCC diagnostic push | ||||||
|  | #pragma GCC diagnostic ignored "-Wunused-parameter" | ||||||
|  | #endif // defined(__clang__) | ||||||
|  |  | ||||||
|  | #include <boost/spirit/home/support/multi_pass.hpp> | ||||||
|  |  | ||||||
|  | #if defined(__clang__) | ||||||
|  | #pragma GCC diagnostic pop | ||||||
|  | #endif // defined(__clang__) | ||||||
|  |  | ||||||
|  | namespace as = boost::asio; | ||||||
|  | namespace x3 = boost::spirit::x3; | ||||||
|  | namespace coro2 = boost::coroutines2; | ||||||
|  |  | ||||||
|  | using pull_type = coro2::asymmetric_coroutine<std::shared_ptr<std::vector<char>>>::pull_type; | ||||||
|  |  | ||||||
|  | // iterator fetching data from coroutine2. | ||||||
|  | class buffered_iterator : public std::iterator<std::input_iterator_tag, char> { | ||||||
|  | public: | ||||||
|  |     using pointer_t = typename iterator::pointer; | ||||||
|  |     using reference_t = typename iterator::reference; | ||||||
|  |  | ||||||
|  |     explicit buffered_iterator(pull_type& source) noexcept | ||||||
|  |         : source_{ &source } { | ||||||
|  |         fetch_(); | ||||||
|  |     } | ||||||
|  |     buffered_iterator() = default; | ||||||
|  |  | ||||||
|  |     bool operator==(buffered_iterator const& other) const noexcept { | ||||||
|  |         if (!other.source_ && !source_ && !other.buf_ && !buf_) return true; | ||||||
|  |         return other.it_ == it_; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     bool operator!=(buffered_iterator const& other) const noexcept { | ||||||
|  |         return !(other == *this); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     buffered_iterator & operator++() { | ||||||
|  |         increment_(); | ||||||
|  |         return * this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     buffered_iterator operator++(int) = delete; | ||||||
|  |  | ||||||
|  |     reference_t operator*() noexcept { | ||||||
|  |         return *it_; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     pointer_t operator->() noexcept { | ||||||
|  |         return std::addressof(*it_); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     void fetch_() noexcept { | ||||||
|  |         BOOST_ASSERT( nullptr != source_); | ||||||
|  |         if (*source_) { | ||||||
|  |             buf_ = source_->get(); | ||||||
|  |             it_ = buf_->begin(); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             source_ = nullptr; | ||||||
|  |             buf_.reset(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void increment_() { | ||||||
|  |         BOOST_ASSERT( nullptr != source_); | ||||||
|  |         BOOST_ASSERT(*source_); | ||||||
|  |         if (++it_ == buf_->end()) { | ||||||
|  |             (*source_)(); | ||||||
|  |             fetch_(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     pull_type* source_{ nullptr }; | ||||||
|  |     std::shared_ptr<std::vector<char>> buf_; | ||||||
|  |     std::vector<char>::iterator it_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | // session class that corresponding to each client | ||||||
|  | class session : public std::enable_shared_from_this<session> { | ||||||
|  | public: | ||||||
|  |     session(as::ip::tcp::socket socket) | ||||||
|  |         : socket_(std::move(socket)) { | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     void start() { | ||||||
|  |         sink_ = std::make_shared<coro2::asymmetric_coroutine<std::shared_ptr<std::vector<char>>>::push_type>( | ||||||
|  |             [&, this](pull_type& source) { | ||||||
|  |                 // *1 is started when the first sink is called. | ||||||
|  |  | ||||||
|  |                 std::cout << "session started" << std::endl; | ||||||
|  |                 do_read(); | ||||||
|  |                 source(); | ||||||
|  |  | ||||||
|  |                 // use buffered_iterator here | ||||||
|  |                 // b is incremented in msgpack::unpack() and fetch data from sink | ||||||
|  |                 // via coroutine2 mechanism | ||||||
|  |                 auto b = boost::spirit::make_default_multi_pass(buffered_iterator(source)); | ||||||
|  |                 auto e = boost::spirit::make_default_multi_pass(buffered_iterator()); | ||||||
|  |  | ||||||
|  |                 // This is usually an infinity look, but for test, loop is finished when | ||||||
|  |                 // two message pack data is processed. | ||||||
|  |                 for (int i = 0; i != 2; ++i) { | ||||||
|  |                     auto oh = msgpack::unpack(b, e); | ||||||
|  |                     std::cout << oh.get() << std::endl; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         ); | ||||||
|  |         // send dummy data to start *1 | ||||||
|  |         (*sink_)({}); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     void do_read() { | ||||||
|  |         std::cout << "session do_read() is called" << std::endl; | ||||||
|  |         auto self(shared_from_this()); | ||||||
|  |         auto data = std::make_shared<std::vector<char>>(static_cast<std::size_t>(max_length)); | ||||||
|  |         socket_.async_read_some( | ||||||
|  |             boost::asio::buffer(*data), | ||||||
|  |             [this, self, data] | ||||||
|  |             (boost::system::error_code ec, std::size_t length) { | ||||||
|  |                 if (!ec) { | ||||||
|  |                     data->resize(length); | ||||||
|  |                     (*sink_)(data); | ||||||
|  |                     do_read(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     as::ip::tcp::socket socket_; | ||||||
|  |     static constexpr std::size_t const max_length = 1024; | ||||||
|  |     std::shared_ptr<coro2::asymmetric_coroutine<std::shared_ptr<std::vector<char>>>::push_type> sink_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class server { | ||||||
|  | public: | ||||||
|  |     server( | ||||||
|  |         as::io_service& ios, | ||||||
|  |         std::uint16_t port) | ||||||
|  |         : acceptor_(ios, as::ip::tcp::endpoint(as::ip::tcp::v4(), port)), | ||||||
|  |           socket_(ios) { | ||||||
|  |         do_accept(); | ||||||
|  |         std::cout << "server start accept" << std::endl; | ||||||
|  |         ios.run(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     void do_accept() { | ||||||
|  |         acceptor_.async_accept( | ||||||
|  |             socket_, | ||||||
|  |             [this](boost::system::error_code ec) { | ||||||
|  |                 if (!ec) { | ||||||
|  |                     std::make_shared<session>(std::move(socket_))->start(); | ||||||
|  |                 } | ||||||
|  |                 // for test, only one session is accepted. | ||||||
|  |                 // do_accept(); | ||||||
|  |             } | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     as::ip::tcp::acceptor acceptor_; | ||||||
|  |     as::ip::tcp::socket socket_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | int main() { | ||||||
|  |     std::thread srv( | ||||||
|  |         []{ | ||||||
|  |             boost::asio::io_service ios; | ||||||
|  |             server s(ios, 12345); | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     std::thread cli( | ||||||
|  |         []{ | ||||||
|  |             std::this_thread::sleep_for(std::chrono::seconds(1)); | ||||||
|  |             std::cout << "client start" << std::endl; | ||||||
|  |  | ||||||
|  |             std::stringstream ss; | ||||||
|  |             std::map<std::string, std::vector<int>> v1 { | ||||||
|  |                 { "ABC", { 1, 2, 3 } }, | ||||||
|  |                 { "DEFG", { 4, 5 } } | ||||||
|  |             }; | ||||||
|  |             std::vector<std::string> v2 { | ||||||
|  |                 "HIJ", "KLM", "NOP" | ||||||
|  |                     }; | ||||||
|  |             msgpack::pack(ss, v1); | ||||||
|  |             msgpack::pack(ss, v2); | ||||||
|  |  | ||||||
|  |             auto send_data = ss.str(); | ||||||
|  |  | ||||||
|  |             boost::asio::io_service ios; | ||||||
|  |             as::ip::tcp::resolver::query q("127.0.0.1", "12345"); | ||||||
|  |             as::ip::tcp::resolver r(ios); | ||||||
|  |             auto it = r.resolve(q); | ||||||
|  |  | ||||||
|  |             std::cout << "client connect" << std::endl; | ||||||
|  |             as::ip::tcp::socket s(ios); | ||||||
|  |             as::connect(s, it); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             std::size_t const size = 5; | ||||||
|  |             std::size_t rest = send_data.size(); | ||||||
|  |             std::size_t index = 0; | ||||||
|  |             while (rest != 0) { | ||||||
|  |                 std::cout << "client send data" << std::endl; | ||||||
|  |                 auto send_size = size < rest ? size : rest; | ||||||
|  |                 as::write(s, as::buffer(&send_data[index], send_size)); | ||||||
|  |                 rest -= send_size; | ||||||
|  |                 index += send_size; | ||||||
|  |                 std::cout << "client wait" << std::endl; | ||||||
|  |                 std::this_thread::sleep_for(std::chrono::seconds(1)); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     cli.join(); | ||||||
|  |     std::cout << "client joinded" << std::endl; | ||||||
|  |     srv.join(); | ||||||
|  |     std::cout << "server joinded" << std::endl; | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								example/x3/unpack.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								example/x3/unpack.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | // MessagePack for C++ example | ||||||
|  | // | ||||||
|  | // Copyright (C) 2017 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #include <iostream> | ||||||
|  | #include <sstream> | ||||||
|  | #include <cassert> | ||||||
|  |  | ||||||
|  | // MSGPACK_USE_X3_PARSE should be defined before including msgpack.hpp | ||||||
|  | // It usually defined as a compiler option as -DMSGPACK_USE_X3_PARSE. | ||||||
|  |  | ||||||
|  | #include <msgpack.hpp> | ||||||
|  |  | ||||||
|  | int main() { | ||||||
|  |     std::stringstream ss; | ||||||
|  |     std::map<std::string, std::vector<int>> v1 { | ||||||
|  |         { "ABC", { 1, 2, 3 } }, | ||||||
|  |         { "DEFG", { 4, 5 } } | ||||||
|  |     }; | ||||||
|  |     std::vector<std::string> v2 { | ||||||
|  |         "HIJ", "KLM", "NOP" | ||||||
|  |     }; | ||||||
|  |     msgpack::pack(ss, v1); | ||||||
|  |     msgpack::pack(ss, v2); | ||||||
|  |  | ||||||
|  |     std::string const& buf = ss.str(); | ||||||
|  |     auto it = buf.begin(); | ||||||
|  |     auto end = buf.end(); | ||||||
|  |     { | ||||||
|  |         auto oh = msgpack::unpack(it, end); | ||||||
|  |         // it is updated here. | ||||||
|  |         assert(v1 == (oh.get().as<std::map<std::string, std::vector<int>>>())); | ||||||
|  |     } | ||||||
|  |     { | ||||||
|  |         auto oh = msgpack::unpack(it, end); | ||||||
|  |         assert(v2 == oh.get().as<std::vector<std::string>>()); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								external/boost/predef
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/boost/predef
									
									
									
									
										vendored
									
									
								
							 Submodule external/boost/predef updated: c14eafa3ef...1e8d1c2cfc
									
								
							
							
								
								
									
										2
									
								
								external/boost/preprocessor
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								external/boost/preprocessor
									
									
									
									
										vendored
									
									
								
							 Submodule external/boost/preprocessor updated: 9cb039ab8b...c2beb74b90
									
								
							| @@ -3,17 +3,9 @@ | |||||||
|  * |  * | ||||||
|  * Copyright (C) 2008-2009 FURUHASHI Sadayuki |  * Copyright (C) 2008-2009 FURUHASHI Sadayuki | ||||||
|  * |  * | ||||||
|  *    Licensed under the Apache License, Version 2.0 (the "License"); |  *    Distributed under the Boost Software License, Version 1.0. | ||||||
|  *    you may not use this file except in compliance with the License. |  *    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  *    You may obtain a copy of the License at |  *    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  * |  | ||||||
|  *        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  * |  | ||||||
|  *    Unless required by applicable law or agreed to in writing, software |  | ||||||
|  *    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|  *    See the License for the specific language governing permissions and |  | ||||||
|  *    limitations under the License. |  | ||||||
|  */ |  */ | ||||||
| /** | /** | ||||||
|  * @defgroup msgpack MessagePack C |  * @defgroup msgpack MessagePack C | ||||||
|   | |||||||
| @@ -3,17 +3,9 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2008-2009 FURUHASHI Sadayuki | // Copyright (C) 2008-2009 FURUHASHI Sadayuki | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #include "msgpack/object.hpp" | #include "msgpack/object.hpp" | ||||||
| #include "msgpack/iterator.hpp" | #include "msgpack/iterator.hpp" | ||||||
|   | |||||||
| @@ -1,92 +1,18 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015-2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_ADAPTOR_BASE_HPP | #ifndef MSGPACK_ADAPTOR_BASE_HPP | ||||||
| #define MSGPACK_ADAPTOR_BASE_HPP | #define MSGPACK_ADAPTOR_BASE_HPP | ||||||
|  |  | ||||||
| #include "msgpack/object_fwd.hpp" | #include "msgpack/adaptor/adaptor_base_decl.hpp" | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| template <typename Stream> |  | ||||||
| class packer; |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| // Adaptor functors |  | ||||||
|  |  | ||||||
| template <typename T, typename Enabler = void> |  | ||||||
| struct convert { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, T& v) const; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Enabler = void> |  | ||||||
| struct pack { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, T const& v) const; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Enabler = void> |  | ||||||
| struct object { |  | ||||||
|     void operator()(msgpack::object& o, T const& v) const; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Enabler = void> |  | ||||||
| struct object_with_zone { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, T const& v) const; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| // operators |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline |  | ||||||
| msgpack::object const& operator>> (msgpack::object const& o, T& v) { |  | ||||||
|     return adaptor::convert<T>()(o, v); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename Stream, typename T> |  | ||||||
| inline |  | ||||||
| msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, T const& v) { |  | ||||||
|     return adaptor::pack<T>()(o, v); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline |  | ||||||
| void operator<< (msgpack::object& o, T const& v) { |  | ||||||
|     adaptor::object<T>()(o, v); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline |  | ||||||
| void operator<< (msgpack::object::with_zone& o, T const& v) { |  | ||||||
|     adaptor::object_with_zone<T>()(o, v); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/adaptor_base.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/adaptor_base.hpp" | ||||||
|  |  | ||||||
| #endif // MSGPACK_ADAPTOR_BASE_HPP | #endif // MSGPACK_ADAPTOR_BASE_HPP | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/adaptor_base_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/adaptor_base_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_ADAPTOR_BASE_DECL_HPP | ||||||
|  | #define MSGPACK_ADAPTOR_BASE_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/adaptor_base_decl.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/adaptor_base_decl.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_ADAPTOR_BASE_DECL_HPP | ||||||
| @@ -1,182 +1,17 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2009 FURUHASHI Sadayuki | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_ARRAY_REF_HPP | #ifndef MSGPACK_TYPE_ARRAY_REF_HPP | ||||||
| #define MSGPACK_TYPE_ARRAY_REF_HPP | #define MSGPACK_TYPE_ARRAY_REF_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/adaptor/array_ref_decl.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
| #include <cstring> |  | ||||||
| #include <string> |  | ||||||
|  |  | ||||||
| namespace msgpack { | #include "msgpack/v1/adaptor/array_ref.hpp" | ||||||
|  |  | ||||||
| /// @cond | #endif // MSGPACK_TYPE_ARRAY_REFL_HPP | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace type { |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct array_ref { |  | ||||||
|     array_ref() : data(nullptr) {} |  | ||||||
|     array_ref(T& t) : data(&t) {} |  | ||||||
|  |  | ||||||
|     T* data; |  | ||||||
|  |  | ||||||
|     template <typename U> |  | ||||||
|     bool operator==(array_ref<U> const& t) const { |  | ||||||
|         return *data == *t.data; |  | ||||||
|     } |  | ||||||
|     template <typename U> |  | ||||||
|     bool operator!=(array_ref<U> const& t) const { |  | ||||||
|         return !(*data == *t.data); |  | ||||||
|     } |  | ||||||
|     template <typename U> |  | ||||||
|     bool operator< (array_ref<U> const& t) const |  | ||||||
|     { |  | ||||||
|         return *data < *t.data; |  | ||||||
|     } |  | ||||||
|     template <typename U> |  | ||||||
|     bool operator> (array_ref<U> const& t) const |  | ||||||
|     { |  | ||||||
|         return *t.data < *data; |  | ||||||
|     } |  | ||||||
|     template <typename U> |  | ||||||
|     bool operator<= (array_ref<U> const& t) const |  | ||||||
|     { |  | ||||||
|         return !(*t.data < *data); |  | ||||||
|     } |  | ||||||
|     template <typename U> |  | ||||||
|     bool operator>= (array_ref<U> const& t) const |  | ||||||
|     { |  | ||||||
|         return !(*data < *t.data); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline array_ref<T const> make_array_ref(T const& t) { |  | ||||||
|     return array_ref<T const>(t); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline array_ref<T> make_array_ref(T& t) { |  | ||||||
|     return array_ref<T>(t); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } // namespace type |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct convert<msgpack::type::array_ref<T> > { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<T>& v) const { |  | ||||||
|         if (!v.data) { throw msgpack::type_error(); } |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if (v.data->size() < o.via.bin.size) { throw msgpack::type_error(); } |  | ||||||
|         if (o.via.array.size > 0) { |  | ||||||
|             msgpack::object* p = o.via.array.ptr; |  | ||||||
|             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; |  | ||||||
|             typename T::iterator it = v.data->begin(); |  | ||||||
|             do { |  | ||||||
|                 p->convert(*it); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct convert<msgpack::type::array_ref<std::vector<T> > > { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<std::vector<T> >& v) const { |  | ||||||
|         if (!v.data) { throw msgpack::type_error(); } |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         v.data->resize(o.via.bin.size); |  | ||||||
|         if (o.via.array.size > 0) { |  | ||||||
|             msgpack::object* p = o.via.array.ptr; |  | ||||||
|             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; |  | ||||||
|             typename std::vector<T>::iterator it = v.data->begin(); |  | ||||||
|             do { |  | ||||||
|                 p->convert(*it); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct pack<msgpack::type::array_ref<T> > { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::array_ref<T>& v) const { |  | ||||||
|         if (!v.data) { throw msgpack::type_error(); } |  | ||||||
|         uint32_t size = checked_get_container_size(v.data->size()); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         for (typename T::const_iterator it(v.data->begin()), it_end(v.data->end()); |  | ||||||
|             it != it_end; ++it) { |  | ||||||
|             o.pack(*it); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object_with_zone<msgpack::type::array_ref<T> > { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const msgpack::type::array_ref<T>& v) const { |  | ||||||
|         if (!v.data) { throw msgpack::type_error(); } |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         if (v.data->empty()) { |  | ||||||
|             o.via.array.ptr = nullptr; |  | ||||||
|             o.via.array.size = 0; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.data->size()); |  | ||||||
|             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|             msgpack::object* const pend = p + size; |  | ||||||
|             o.via.array.ptr = p; |  | ||||||
|             o.via.array.size = size; |  | ||||||
|             typename T::const_iterator it(v.data->begin()); |  | ||||||
|             do { |  | ||||||
| #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) |  | ||||||
| #pragma GCC diagnostic push |  | ||||||
| #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" |  | ||||||
| #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) |  | ||||||
|                 *p = msgpack::object(*it, o.zone); |  | ||||||
| #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) |  | ||||||
| #pragma GCC diagnostic pop |  | ||||||
| #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__) |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_ARRAY_REF_HPP |  | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/array_ref_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/array_ref_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_TYPE_ARRAY_REF_DECL_HPP | ||||||
|  | #define MSGPACK_TYPE_ARRAY_REF_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/array_ref_decl.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/array_ref_decl.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_ARRAY_REF_DECL_HPP | ||||||
| @@ -1,74 +1,15 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2009 FURUHASHI Sadayuki | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_BOOL_HPP | #ifndef MSGPACK_TYPE_BOOL_HPP | ||||||
| #define MSGPACK_TYPE_BOOL_HPP | #define MSGPACK_TYPE_BOOL_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/bool.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct convert<bool> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, bool& v) const { |  | ||||||
|         if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); } |  | ||||||
|         v = o.via.boolean; |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct pack<bool> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const bool& v) const { |  | ||||||
|         if(v) { o.pack_true(); } |  | ||||||
|         else { o.pack_false(); } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object<bool> { |  | ||||||
|     void operator()(msgpack::object& o, bool v) const { |  | ||||||
|         o.type = msgpack::type::BOOLEAN; |  | ||||||
|         o.via.boolean = v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object_with_zone<bool> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, bool v) const { |  | ||||||
|         static_cast<msgpack::object&>(o) << v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| }  // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| }  // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOL_HPP | #endif // MSGPACK_TYPE_BOOL_HPP | ||||||
|   | |||||||
| @@ -3,166 +3,13 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_BOOST_FUSION_HPP | #ifndef MSGPACK_TYPE_BOOST_FUSION_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_FUSION_HPP | #define MSGPACK_TYPE_BOOST_FUSION_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/boost/fusion.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
| #include "msgpack/meta.hpp" |  | ||||||
|  |  | ||||||
| #if !defined (MSGPACK_USE_CPP03) |  | ||||||
| #include "msgpack/adaptor/cpp11/tuple.hpp" |  | ||||||
| #endif // #if !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| #include <boost/fusion/support/is_sequence.hpp> |  | ||||||
| #include <boost/fusion/sequence/intrinsic/size.hpp> |  | ||||||
| #include <boost/fusion/algorithm/iteration/for_each.hpp> |  | ||||||
| #include <boost/fusion/sequence/intrinsic/at.hpp> |  | ||||||
| #include <boost/fusion/include/mpl.hpp> |  | ||||||
| #include <boost/mpl/size.hpp> |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| #if !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct as< |  | ||||||
|     T, |  | ||||||
|     typename msgpack::enable_if< |  | ||||||
|         boost::fusion::traits::is_sequence<T>::value && |  | ||||||
|         boost::mpl::fold< |  | ||||||
|             T, |  | ||||||
|             boost::mpl::bool_<true>, |  | ||||||
|             boost::mpl::if_ < |  | ||||||
|                 boost::mpl::and_< |  | ||||||
|                     boost::mpl::_1, |  | ||||||
|                     msgpack::has_as<boost::mpl::_2> |  | ||||||
|                 >, |  | ||||||
|                 boost::mpl::bool_<true>, |  | ||||||
|                 boost::mpl::bool_<false> |  | ||||||
|             > |  | ||||||
|         >::type::value |  | ||||||
|     >::type |  | ||||||
| > { |  | ||||||
|     T operator()(msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if (o.via.array.size != checked_get_container_size(boost::mpl::size<T>::value)) { |  | ||||||
|             throw msgpack::type_error(); |  | ||||||
|         } |  | ||||||
|         using tuple_t = decltype(to_tuple(std::declval<T>(), gen_seq<boost::mpl::size<T>::value>())); |  | ||||||
|         return to_t( |  | ||||||
|             o.as<tuple_t>(), |  | ||||||
|             msgpack::gen_seq<boost::mpl::size<T>::value>()); |  | ||||||
|     } |  | ||||||
|     template<std::size_t... Is, typename U> |  | ||||||
|     static std::tuple< |  | ||||||
|         typename std::remove_reference< |  | ||||||
|             typename boost::fusion::result_of::at_c<T, Is>::type |  | ||||||
|         >::type...> |  | ||||||
|     to_tuple(U const& u, seq<Is...>) { |  | ||||||
|         return std::make_tuple(boost::fusion::at_c<Is>(u)...); |  | ||||||
|     } |  | ||||||
|     template<std::size_t... Is, typename U> |  | ||||||
|     static T to_t(U const& u, seq<Is...>) { |  | ||||||
|         return T(std::get<Is>(u)...); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif // !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct convert<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, T& v) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) { |  | ||||||
|             throw msgpack::type_error(); |  | ||||||
|         } |  | ||||||
|         uint32_t index = 0; |  | ||||||
|         boost::fusion::for_each(v, convert_imp(o, index)); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| private: |  | ||||||
|     struct convert_imp { |  | ||||||
|         convert_imp(msgpack::object const& obj, uint32_t& index):obj_(obj), index_(index) {} |  | ||||||
|         template <typename U> |  | ||||||
|         void operator()(U& v) const { |  | ||||||
|             msgpack::adaptor::convert<U>()(obj_.via.array.ptr[index_++], v); |  | ||||||
|         } |  | ||||||
|     private: |  | ||||||
|         msgpack::object const& obj_; |  | ||||||
|         uint32_t& index_; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct pack<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(boost::fusion::size(v)); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         boost::fusion::for_each(v, pack_imp<Stream>(o)); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| private: |  | ||||||
|     template <typename Stream> |  | ||||||
|     struct pack_imp { |  | ||||||
|         pack_imp(msgpack::packer<Stream>& stream):stream_(stream) {} |  | ||||||
|         template <typename U> |  | ||||||
|         void operator()(U const& v) const { |  | ||||||
|             stream_.pack(v); |  | ||||||
|         } |  | ||||||
|     private: |  | ||||||
|         msgpack::packer<Stream>& stream_; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object_with_zone<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const T& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(boost::fusion::size(v)); |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|         o.via.array.size = size; |  | ||||||
|         uint32_t count = 0; |  | ||||||
|         boost::fusion::for_each(v, with_zone_imp(o, count)); |  | ||||||
|     } |  | ||||||
| private: |  | ||||||
|     struct with_zone_imp { |  | ||||||
|         with_zone_imp(msgpack::object::with_zone const& obj, uint32_t& count):obj_(obj), count_(count) {} |  | ||||||
|         template <typename U> |  | ||||||
|         void operator()(U const& v) const { |  | ||||||
|             obj_.via.array.ptr[count_++] = msgpack::object(v, obj_.zone); |  | ||||||
|         } |  | ||||||
|         msgpack::object::with_zone const& obj_; |  | ||||||
|         uint32_t& count_; |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_FUSION_HPP | #endif // MSGPACK_TYPE_BOOST_FUSION_HPP | ||||||
|   | |||||||
| @@ -1,438 +1,18 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015-2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | #ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | #define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | ||||||
|  |  | ||||||
| #if defined(MSGPACK_USE_BOOST) | #include "msgpack/adaptor/boost/msgpack_variant_decl.hpp" | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/boost/msgpack_variant.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | //#include "msgpack/v2/adaptor/boost/msgpack_variant.hpp" | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
| #include "msgpack/adaptor/boost/string_ref.hpp" |  | ||||||
|  |  | ||||||
| #include "msgpack/adaptor/nil.hpp" |  | ||||||
| #include "msgpack/adaptor/bool.hpp" |  | ||||||
| #include "msgpack/adaptor/int.hpp" |  | ||||||
| #include "msgpack/adaptor/float.hpp" |  | ||||||
| #include "msgpack/adaptor/string.hpp" |  | ||||||
| #include "msgpack/adaptor/vector_char.hpp" |  | ||||||
| #include "msgpack/adaptor/raw.hpp" |  | ||||||
| #include "msgpack/adaptor/ext.hpp" |  | ||||||
| #include "msgpack/adaptor/vector.hpp" |  | ||||||
| #include "msgpack/adaptor/map.hpp" |  | ||||||
|  |  | ||||||
| #include <boost/variant.hpp> |  | ||||||
| #include <boost/operators.hpp> |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace type { |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| struct basic_variant : |  | ||||||
|     boost::variant< |  | ||||||
|         nil,               // NIL |  | ||||||
|         bool,              // BOOL |  | ||||||
|         int64_t,           // NEGATIVE_INTEGER |  | ||||||
|         uint64_t,          // POSITIVE_INTEGER |  | ||||||
|         double,            // FLOAT |  | ||||||
|         std::string,       // STR |  | ||||||
| #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|         boost::string_ref, // STR |  | ||||||
| #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|         std::vector<char>, // BIN |  | ||||||
|         msgpack::type::raw_ref, // BIN |  | ||||||
|         ext,               // EXT |  | ||||||
|         ext_ref,           // EXT |  | ||||||
|         boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >, // ARRAY |  | ||||||
|         boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >, // MAP |  | ||||||
|         boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >// MAP |  | ||||||
|     >, |  | ||||||
|     private boost::totally_ordered<basic_variant<STR, BIN, EXT> > { |  | ||||||
|     typedef boost::variant< |  | ||||||
|         nil,               // NIL |  | ||||||
|         bool,              // BOOL |  | ||||||
|         int64_t,           // NEGATIVE_INTEGER |  | ||||||
|         uint64_t,          // POSITIVE_INTEGER |  | ||||||
|         double,            // FLOAT |  | ||||||
|         std::string,       // STR |  | ||||||
| #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|         boost::string_ref, // STR |  | ||||||
| #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|         std::vector<char>, // BIN |  | ||||||
|         msgpack::type::raw_ref, // BIN |  | ||||||
|         ext,               // EXT |  | ||||||
|         ext_ref,           // EXT |  | ||||||
|         boost::recursive_wrapper<std::vector<basic_variant<STR, BIN, EXT> > >, // ARRAY |  | ||||||
|         boost::recursive_wrapper<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >, // MAP |  | ||||||
|         boost::recursive_wrapper<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >// MAP |  | ||||||
|     > base; |  | ||||||
|     basic_variant() {} |  | ||||||
|     template <typename T> |  | ||||||
|     basic_variant(T const& t):base(t) {} |  | ||||||
|     basic_variant(char const* p):base(std::string(p)) {} |  | ||||||
|     basic_variant(char v) { |  | ||||||
|         int_init(v); |  | ||||||
|     } |  | ||||||
|     basic_variant(signed char v) { |  | ||||||
|         int_init(v); |  | ||||||
|     } |  | ||||||
|     basic_variant(unsigned char v):base(uint64_t(v)) {} |  | ||||||
|     basic_variant(signed int v) { |  | ||||||
|         int_init(v); |  | ||||||
|     } |  | ||||||
|     basic_variant(unsigned int v):base(uint64_t(v)) {} |  | ||||||
|     basic_variant(signed long v) { |  | ||||||
|         int_init(v); |  | ||||||
|     } |  | ||||||
|     basic_variant(unsigned long v):base(uint64_t(v)) {} |  | ||||||
|     basic_variant(signed long long v) { |  | ||||||
|         int_init(v); |  | ||||||
|     } |  | ||||||
|     basic_variant(unsigned long long v):base(uint64_t(v)) {} |  | ||||||
|  |  | ||||||
|     bool is_nil() const { |  | ||||||
|         return boost::get<nil>(this); |  | ||||||
|     } |  | ||||||
|     bool is_bool() const { |  | ||||||
|         return boost::get<bool>(this); |  | ||||||
|     } |  | ||||||
|     bool is_int64_t() const { |  | ||||||
|         return boost::get<int64_t>(this); |  | ||||||
|     } |  | ||||||
|     bool is_uint64_t() const { |  | ||||||
|         return boost::get<uint64_t>(this); |  | ||||||
|     } |  | ||||||
|     bool is_double() const { |  | ||||||
|         return boost::get<double>(this); |  | ||||||
|     } |  | ||||||
|     bool is_string() const { |  | ||||||
|         return boost::get<std::string>(this); |  | ||||||
|     } |  | ||||||
| #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     bool is_boost_string_ref() const { |  | ||||||
|         return boost::get<boost::string_ref>(this); |  | ||||||
|     } |  | ||||||
| #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     bool is_vector_char() const { |  | ||||||
|         return boost::get<std::vector<char> >(this); |  | ||||||
|     } |  | ||||||
|     bool is_vector_char() { |  | ||||||
|         return boost::get<std::vector<char> >(this); |  | ||||||
|     } |  | ||||||
|     bool is_raw_ref() const { |  | ||||||
|         return boost::get<raw_ref>(this); |  | ||||||
|     } |  | ||||||
|     bool is_ext() const { |  | ||||||
|         return boost::get<ext>(this); |  | ||||||
|     } |  | ||||||
|     bool is_ext_ref() const { |  | ||||||
|         return boost::get<ext_ref>(this); |  | ||||||
|     } |  | ||||||
|     bool is_vector() const { |  | ||||||
|         return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(this); |  | ||||||
|     } |  | ||||||
|     bool is_map() const { |  | ||||||
|         return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(this); |  | ||||||
|     } |  | ||||||
|     bool is_multimap() const { |  | ||||||
|         return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(this); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool as_bool() const { |  | ||||||
|         return boost::get<bool>(*this); |  | ||||||
|     } |  | ||||||
|     int64_t as_int64_t() const { |  | ||||||
|         return boost::get<int64_t>(*this); |  | ||||||
|     } |  | ||||||
|     int64_t& as_int64_t() { |  | ||||||
|         return boost::get<int64_t>(*this); |  | ||||||
|     } |  | ||||||
|     uint64_t as_uint64_t() const { |  | ||||||
|         return boost::get<uint64_t>(*this); |  | ||||||
|     } |  | ||||||
|     uint64_t& as_uint64_t() { |  | ||||||
|         return boost::get<uint64_t>(*this); |  | ||||||
|     } |  | ||||||
|     double as_double() const { |  | ||||||
|         return boost::get<double>(*this); |  | ||||||
|     } |  | ||||||
|     double& as_double() { |  | ||||||
|         return boost::get<double>(*this); |  | ||||||
|     } |  | ||||||
|     std::string const& as_string() const { |  | ||||||
|         return boost::get<std::string>(*this); |  | ||||||
|     } |  | ||||||
|     std::string& as_string() { |  | ||||||
|         return boost::get<std::string>(*this); |  | ||||||
|     } |  | ||||||
| #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     boost::string_ref const& as_boost_string_ref() const { |  | ||||||
|         return boost::get<boost::string_ref>(*this); |  | ||||||
|     } |  | ||||||
|     boost::string_ref& as_boost_string_ref() { |  | ||||||
|         return boost::get<boost::string_ref>(*this); |  | ||||||
|     } |  | ||||||
| #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     std::vector<char> const& as_vector_char() const { |  | ||||||
|         return boost::get<std::vector<char> >(*this); |  | ||||||
|     } |  | ||||||
|     std::vector<char>& as_vector_char() { |  | ||||||
|         return boost::get<std::vector<char> >(*this); |  | ||||||
|     } |  | ||||||
|     raw_ref const& as_raw_ref() const { |  | ||||||
|         return boost::get<raw_ref>(*this); |  | ||||||
|     } |  | ||||||
|     ext const& as_ext() const { |  | ||||||
|         return boost::get<ext>(*this); |  | ||||||
|     } |  | ||||||
|     ext& as_ext() { |  | ||||||
|         return boost::get<ext>(*this); |  | ||||||
|     } |  | ||||||
|     ext_ref const& as_ext_ref() const { |  | ||||||
|         return boost::get<ext_ref>(*this); |  | ||||||
|     } |  | ||||||
|     std::vector<basic_variant<STR, BIN, EXT> > const& as_vector() const { |  | ||||||
|         return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this); |  | ||||||
|     } |  | ||||||
|     std::vector<basic_variant<STR, BIN, EXT> >& as_vector() { |  | ||||||
|         return boost::get<std::vector<basic_variant<STR, BIN, EXT> > >(*this); |  | ||||||
|     } |  | ||||||
|     std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > const& as_map() const { |  | ||||||
|         return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); |  | ||||||
|     } |  | ||||||
|     std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> >& as_map() { |  | ||||||
|         return boost::get<std::map<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); |  | ||||||
|     } |  | ||||||
|     std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > const& as_multimap() const { |  | ||||||
|         return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); |  | ||||||
|     } |  | ||||||
|     std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> >& as_multimap() { |  | ||||||
|         return boost::get<std::multimap<basic_variant<STR, BIN, EXT>, basic_variant<STR, BIN, EXT> > >(*this); |  | ||||||
|     } |  | ||||||
| private: |  | ||||||
|     template <typename T> |  | ||||||
|     void int_init(T v) { |  | ||||||
|         if (v < 0) { |  | ||||||
|             static_cast<base&>(*this) = int64_t(v); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             static_cast<base&>(*this) = uint64_t(v); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| inline bool operator<(basic_variant<STR, BIN, EXT> const& lhs, basic_variant<STR, BIN, EXT> const& rhs) { |  | ||||||
|     return |  | ||||||
|         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(lhs) < |  | ||||||
|         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(rhs); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| inline bool operator==(basic_variant<STR, BIN, EXT> const& lhs, basic_variant<STR, BIN, EXT> const& rhs) { |  | ||||||
|     return |  | ||||||
|         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(lhs) == |  | ||||||
|         static_cast<typename basic_variant<STR, BIN, EXT>::base const&>(rhs); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| typedef basic_variant<std::string, std::vector<char>, ext> variant; |  | ||||||
| typedef basic_variant< |  | ||||||
| #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     boost::string_ref, |  | ||||||
| #else  // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     std::string, |  | ||||||
| #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|     raw_ref, ext_ref> variant_ref; |  | ||||||
|  |  | ||||||
| } // namespace type |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| #if !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| struct as<msgpack::type::basic_variant<STR, BIN, EXT> > { |  | ||||||
|     msgpack::type::basic_variant<STR, BIN, EXT> operator()(msgpack::object const& o) const { |  | ||||||
|         switch(o.type) { |  | ||||||
|         case type::NIL: |  | ||||||
|             return o.as<msgpack::type::nil>(); |  | ||||||
|         case type::BOOLEAN: |  | ||||||
|             return o.as<bool>(); |  | ||||||
|         case type::POSITIVE_INTEGER: |  | ||||||
|             return o.as<uint64_t>(); |  | ||||||
|         case type::NEGATIVE_INTEGER: |  | ||||||
|             return o.as<int64_t>(); |  | ||||||
|         case type::FLOAT: |  | ||||||
|             return o.as<double>(); |  | ||||||
|         case type::STR: |  | ||||||
|             return o.as<STR>(); |  | ||||||
|         case type::BIN: |  | ||||||
|             return o.as<BIN>(); |  | ||||||
|         case type::EXT: |  | ||||||
|             return o.as<EXT>(); |  | ||||||
|         case type::ARRAY: |  | ||||||
|             return o.as<std::vector<msgpack::type::basic_variant<STR, BIN, EXT> > >(); |  | ||||||
|         case type::MAP: |  | ||||||
|             return o.as<std::multimap<msgpack::type::basic_variant<STR, BIN, EXT>, msgpack::type::basic_variant<STR, BIN, EXT> > >(); |  | ||||||
|         default: |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         return msgpack::type::basic_variant<STR, BIN, EXT>(); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif // !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| struct convert<msgpack::type::basic_variant<STR, BIN, EXT> > { |  | ||||||
|     msgpack::object const& operator()( |  | ||||||
|         msgpack::object const& o, |  | ||||||
|         msgpack::type::basic_variant<STR, BIN, EXT>& v) const { |  | ||||||
|         switch(o.type) { |  | ||||||
|         case type::NIL: |  | ||||||
|             v = o.as<msgpack::type::nil>(); |  | ||||||
|             break; |  | ||||||
|         case type::BOOLEAN: |  | ||||||
|             v = o.as<bool>(); |  | ||||||
|             break; |  | ||||||
|         case type::POSITIVE_INTEGER: |  | ||||||
|             v = o.as<uint64_t>(); |  | ||||||
|             break; |  | ||||||
|         case type::NEGATIVE_INTEGER: |  | ||||||
|             v = o.as<int64_t>(); |  | ||||||
|             break; |  | ||||||
|         case type::FLOAT: |  | ||||||
|             v = o.as<double>(); |  | ||||||
|             break; |  | ||||||
|         case type::STR: |  | ||||||
|             v = o.as<STR>(); |  | ||||||
|             break; |  | ||||||
|         case type::BIN: |  | ||||||
|             v = o.as<BIN>(); |  | ||||||
|             break; |  | ||||||
|         case type::EXT: |  | ||||||
|             v = o.as<EXT>(); |  | ||||||
|             break; |  | ||||||
|         case type::ARRAY: |  | ||||||
|             v = o.as<std::vector<msgpack::type::basic_variant<STR, BIN, EXT> > >(); |  | ||||||
|             break; |  | ||||||
|         case type::MAP: |  | ||||||
|             v = o.as<std::multimap<msgpack::type::basic_variant<STR, BIN, EXT>, msgpack::type::basic_variant<STR, BIN, EXT> > >(); |  | ||||||
|             break; |  | ||||||
|         default: |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace detail { |  | ||||||
|  |  | ||||||
| template <typename Stream> |  | ||||||
| struct pack_imp : boost::static_visitor<void> { |  | ||||||
|     template <typename T> |  | ||||||
|     void operator()(T const& value) const { |  | ||||||
|         pack<T>()(o_, value); |  | ||||||
|     } |  | ||||||
|     pack_imp(packer<Stream>& o):o_(o) {} |  | ||||||
|     packer<Stream>& o_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace detail |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| struct pack<msgpack::type::basic_variant<STR, BIN, EXT> > { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const { |  | ||||||
|         boost::apply_visitor(detail::pack_imp<Stream>(o), v); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace detail { |  | ||||||
|  |  | ||||||
| struct object_imp : boost::static_visitor<void> { |  | ||||||
|     void operator()(msgpack::type::nil const& v) const { |  | ||||||
|         object<msgpack::type::nil>()(o_, v); |  | ||||||
|     } |  | ||||||
|     void operator()(bool const& v) const { |  | ||||||
|         object<bool>()(o_, v); |  | ||||||
|     } |  | ||||||
|     void operator()(uint64_t const& v) const { |  | ||||||
|         object<uint64_t>()(o_, v); |  | ||||||
|     } |  | ||||||
|     void operator()(int64_t const& v) const { |  | ||||||
|         object<int64_t>()(o_, v); |  | ||||||
|     } |  | ||||||
|     void operator()(double const& v) const { |  | ||||||
|         object<double>()(o_, v); |  | ||||||
|     } |  | ||||||
|     template <typename T> |  | ||||||
|     void operator()(T const&) const { |  | ||||||
|         throw msgpack::type_error(); |  | ||||||
|     } |  | ||||||
|     object_imp(msgpack::object& o):o_(o) {} |  | ||||||
|     msgpack::object& o_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace detail |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| struct object<msgpack::type::basic_variant<STR, BIN, EXT> > { |  | ||||||
|     void operator()(msgpack::object& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const { |  | ||||||
|         boost::apply_visitor(detail::object_imp(o), v); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace detail { |  | ||||||
|  |  | ||||||
| struct object_with_zone_imp : boost::static_visitor<void> { |  | ||||||
|     template <typename T> |  | ||||||
|     void operator()(T const& v) const { |  | ||||||
|         object_with_zone<T>()(o_, v); |  | ||||||
|     } |  | ||||||
|     object_with_zone_imp(msgpack::object::with_zone& o):o_(o) {} |  | ||||||
|     msgpack::object::with_zone& o_; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace detail |  | ||||||
|  |  | ||||||
| template <typename STR, typename BIN, typename EXT> |  | ||||||
| struct object_with_zone<msgpack::type::basic_variant<STR, BIN, EXT> > { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const msgpack::type::basic_variant<STR, BIN, EXT>& v) const { |  | ||||||
|         boost::apply_visitor(detail::object_with_zone_imp(o), v); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_USE_BOOST |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | #endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP | ||||||
|  | #define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/boost/msgpack_variant_decl.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_DECL_HPP | ||||||
| @@ -1,104 +1,15 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_BOOST_OPTIONAL_HPP | #ifndef MSGPACK_TYPE_BOOST_OPTIONAL_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_OPTIONAL_HPP | #define MSGPACK_TYPE_BOOST_OPTIONAL_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/boost/optional.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| // To supress warning on Boost.1.58.0 |  | ||||||
| #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) |  | ||||||
| #pragma GCC diagnostic push |  | ||||||
| #pragma GCC diagnostic ignored "-Wunused-parameter" |  | ||||||
| #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) |  | ||||||
|  |  | ||||||
| #include <boost/optional.hpp> |  | ||||||
|  |  | ||||||
| #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) |  | ||||||
| #pragma GCC diagnostic pop |  | ||||||
| #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || defined(__clang__) |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| #if !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct as<boost::optional<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> { |  | ||||||
|     boost::optional<T> operator()(msgpack::object const& o) const { |  | ||||||
|         if(o.is_nil()) return boost::none; |  | ||||||
|         return o.as<T>(); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif // !defined (MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct convert<boost::optional<T> > { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, boost::optional<T>& v) const { |  | ||||||
|         if(o.is_nil()) v = boost::none; |  | ||||||
|         else { |  | ||||||
|             T t; |  | ||||||
|             msgpack::adaptor::convert<T>()(o, t); |  | ||||||
|             v = t; |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct pack<boost::optional<T> > { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::optional<T>& v) const { |  | ||||||
|         if (v) o.pack(*v); |  | ||||||
|         else o.pack_nil(); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object<boost::optional<T> > { |  | ||||||
|     void operator()(msgpack::object& o, const boost::optional<T>& v) const { |  | ||||||
|         if (v) msgpack::adaptor::object<T>()(o, *v); |  | ||||||
|         else o.type = msgpack::type::NIL; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object_with_zone<boost::optional<T> > { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const boost::optional<T>& v) const { |  | ||||||
|         if (v) msgpack::adaptor::object_with_zone<T>()(o, *v); |  | ||||||
|         else o.type = msgpack::type::NIL; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP | #endif // MSGPACK_TYPE_BOOST_OPTIONAL_HPP | ||||||
|   | |||||||
| @@ -1,95 +1,15 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_BOOST_STRING_REF_HPP | #ifndef MSGPACK_TYPE_BOOST_STRING_REF_HPP | ||||||
| #define MSGPACK_TYPE_BOOST_STRING_REF_HPP | #define MSGPACK_TYPE_BOOST_STRING_REF_HPP | ||||||
|  |  | ||||||
| #include <boost/version.hpp> | #include "msgpack/v1/adaptor/boost/string_ref.hpp" | ||||||
| #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" |  | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <boost/utility/string_ref.hpp> |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct convert<boost::string_ref> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, boost::string_ref& v) const { |  | ||||||
|         switch (o.type) { |  | ||||||
|         case msgpack::type::BIN: |  | ||||||
|             v = boost::string_ref(o.via.bin.ptr, o.via.bin.size); |  | ||||||
|             break; |  | ||||||
|         case msgpack::type::STR: |  | ||||||
|             v = boost::string_ref(o.via.str.ptr, o.via.str.size); |  | ||||||
|             break; |  | ||||||
|         default: |  | ||||||
|             throw msgpack::type_error(); |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct pack<boost::string_ref> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::string_ref& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_str(size); |  | ||||||
|         o.pack_str_body(v.data(), size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object<boost::string_ref> { |  | ||||||
|     void operator()(msgpack::object& o, const boost::string_ref& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         o.via.str.ptr = v.data(); |  | ||||||
|         o.via.str.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object_with_zone<boost::string_ref> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const boost::string_ref& v) const { |  | ||||||
|         static_cast<msgpack::object&>(o) << v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53 |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP | #endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								include/msgpack/adaptor/boost/string_view.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/msgpack/adaptor/boost/string_view.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2017 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_TYPE_BOOST_STRING_VIEW_HPP | ||||||
|  | #define MSGPACK_TYPE_BOOST_STRING_VIEW_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/boost/string_view.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_BOOST_STRING_VIEW_HPP | ||||||
							
								
								
									
										15
									
								
								include/msgpack/adaptor/carray.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/msgpack/adaptor/carray.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_TYPE_CARRAY_HPP | ||||||
|  | #define MSGPACK_TYPE_CARRAY_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/carray.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_CARRAY_HPP | ||||||
| @@ -1,165 +1,15 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014-2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_CHAR_PTR_HPP | #ifndef MSGPACK_TYPE_CHAR_PTR_HPP | ||||||
| #define MSGPACK_TYPE_CHAR_PTR_HPP | #define MSGPACK_TYPE_CHAR_PTR_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/char_ptr.hpp" | ||||||
| #include "msgpack/object_fwd.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <cstring> |  | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct pack<const char*> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.pack_str(size); |  | ||||||
|         o.pack_str_body(v, size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object_with_zone<const char*> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); |  | ||||||
|         o.via.str.ptr = ptr; |  | ||||||
|         o.via.str.size = size; |  | ||||||
|         std::memcpy(ptr, v, size); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object<const char*> { |  | ||||||
|     void operator()(msgpack::object& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         o.via.str.ptr = v; |  | ||||||
|         o.via.str.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct pack<char*> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     packer<Stream>& operator()(packer<Stream>& o, char* v) const { |  | ||||||
|         return o << static_cast<const char*>(v); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object_with_zone<char*> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, char* v) const { |  | ||||||
|         o << static_cast<const char*>(v); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object<char*> { |  | ||||||
|     void operator()(msgpack::object& o, char* v) const { |  | ||||||
|         o << static_cast<const char*>(v); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct pack<char[N]> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.pack_str(size); |  | ||||||
|         o.pack_str_body(v, size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object_with_zone<char[N]> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); |  | ||||||
|         o.via.str.ptr = ptr; |  | ||||||
|         o.via.str.size = size; |  | ||||||
|         std::memcpy(ptr, v, size); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object<char[N]> { |  | ||||||
|     void operator()(msgpack::object& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         o.via.str.ptr = v; |  | ||||||
|         o.via.str.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct pack<const char[N]> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.pack_str(size); |  | ||||||
|         o.pack_str_body(v, size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object_with_zone<const char[N]> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); |  | ||||||
|         o.via.str.ptr = ptr; |  | ||||||
|         o.via.str.size = size; |  | ||||||
|         std::memcpy(ptr, v, size); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object<const char[N]> { |  | ||||||
|     void operator()(msgpack::object& o, const char* v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::strlen(v)); |  | ||||||
|         o.type = msgpack::type::STR; |  | ||||||
|         o.via.str.ptr = v; |  | ||||||
|         o.via.str.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| }  // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| }  // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_CHAR_PTR_HPP | #endif // MSGPACK_TYPE_CHAR_PTR_HPP | ||||||
|   | |||||||
| @@ -1,75 +1,17 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015-2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_CHECK_CONTAINER_SIZE_HPP | #ifndef MSGPACK_CHECK_CONTAINER_SIZE_HPP | ||||||
| #define MSGPACK_CHECK_CONTAINER_SIZE_HPP | #define MSGPACK_CHECK_CONTAINER_SIZE_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/adaptor/check_container_size_decl.hpp" | ||||||
| #include <stdexcept> |  | ||||||
|  |  | ||||||
| namespace msgpack { | #include "msgpack/v1/adaptor/check_container_size.hpp" | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| struct container_size_overflow : public std::runtime_error { |  | ||||||
|     explicit container_size_overflow(const std::string& msg) |  | ||||||
|         :std::runtime_error(msg) {} |  | ||||||
| #if !defined(MSGPACK_USE_CPP03) |  | ||||||
|     explicit container_size_overflow(const char* msg): |  | ||||||
|         std::runtime_error(msg) {} |  | ||||||
| #endif // !defined(MSGPACK_USE_CPP03) |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace detail { |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| inline void check_container_size(std::size_t size) { |  | ||||||
|     if (size > 0xffffffff) throw container_size_overflow("container size overflow"); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| inline void check_container_size<4>(std::size_t /*size*/) { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| inline void check_container_size_for_ext(std::size_t size) { |  | ||||||
|     if (size > 0xffffffff) throw container_size_overflow("container size overflow"); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| inline void check_container_size_for_ext<4>(std::size_t size) { |  | ||||||
|     if (size > 0xfffffffe) throw container_size_overflow("container size overflow"); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| } // namespace detail |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| inline uint32_t checked_get_container_size(T size) { |  | ||||||
|     detail::check_container_size<sizeof(T)>(size); |  | ||||||
|     return static_cast<uint32_t>(size); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| }  // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| }  // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP | #endif // MSGPACK_CHECK_CONTAINER_SIZE_HPP | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/check_container_size_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/check_container_size_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP | ||||||
|  | #define MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/check_container_size_decl.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/check_container_size_decl.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_CHECK_CONTAINER_SIZE_DECL_HPP | ||||||
| @@ -1,146 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014-2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_CPP11_ARRAY_HPP | #ifndef MSGPACK_TYPE_CPP11_ARRAY_HPP | ||||||
| #define MSGPACK_CPP11_ARRAY_HPP | #define MSGPACK_TYPE_CPP11_ARRAY_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/cpp11/array.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
| #include "msgpack/meta.hpp" |  | ||||||
|  |  | ||||||
| #include <array> | #endif // MSGPACK_TYPE_CPP11_ARRAY_HPP | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| namespace detail { |  | ||||||
|  |  | ||||||
| namespace array { |  | ||||||
|  |  | ||||||
| template<typename T, std::size_t N1, std::size_t... I1, std::size_t N2, std::size_t... I2> |  | ||||||
| inline std::array<T, N1+N2> concat( |  | ||||||
|     std::array<T, N1>&& a1, |  | ||||||
|     std::array<T, N2>&& a2, |  | ||||||
|     msgpack::seq<I1...>, |  | ||||||
|     msgpack::seq<I2...>) { |  | ||||||
|     return {{ std::move(a1[I1])..., std::move(a2[I2])... }}; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template<typename T, std::size_t N1, std::size_t N2> |  | ||||||
| inline std::array<T, N1+N2> concat(std::array<T, N1>&& a1, std::array<T, N2>&& a2) { |  | ||||||
|     return concat(std::move(a1), std::move(a2), msgpack::gen_seq<N1>(), msgpack::gen_seq<N2>()); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| template <typename T, std::size_t N> |  | ||||||
| struct as_impl { |  | ||||||
|     static std::array<T, N> as(msgpack::object const& o) { |  | ||||||
|         msgpack::object* p = o.via.array.ptr + N - 1; |  | ||||||
|         return concat(as_impl<T, N-1>::as(o), std::array<T, 1>{{p->as<T>()}}); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct as_impl<T, 1> { |  | ||||||
|     static std::array<T, 1> as(msgpack::object const& o) { |  | ||||||
|         msgpack::object* p = o.via.array.ptr; |  | ||||||
|         return std::array<T, 1>{{p->as<T>()}}; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct as_impl<T, 0> { |  | ||||||
|     static std::array<T, 0> as(msgpack::object const&) { |  | ||||||
|         return std::array<T, 0>(); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace array |  | ||||||
|  |  | ||||||
| } // namespace detail |  | ||||||
|  |  | ||||||
| template <typename T, std::size_t N> |  | ||||||
| struct as<std::array<T, N>, typename std::enable_if<msgpack::has_as<T>::value>::type> { |  | ||||||
|     std::array<T, N> operator()(msgpack::object const& o) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if(o.via.array.size != N) { throw msgpack::type_error(); } |  | ||||||
|         return detail::array::as_impl<T, N>::as(o); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, std::size_t N> |  | ||||||
| struct convert<std::array<T, N>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::array<T, N>& v) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if(o.via.array.size != N) { throw msgpack::type_error(); } |  | ||||||
|         if(o.via.array.size > 0) { |  | ||||||
|             msgpack::object* p = o.via.array.ptr; |  | ||||||
|             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; |  | ||||||
|             T* it = &v[0]; |  | ||||||
|             do { |  | ||||||
|                 p->convert(*it); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, std::size_t N> |  | ||||||
| struct pack<std::array<T, N>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<T, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         for(auto const& e : v) o.pack(e); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, std::size_t N> |  | ||||||
| struct object_with_zone<std::array<T, N>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::array<T, N>& v) const { |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.array.ptr = nullptr; |  | ||||||
|             o.via.array.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|             o.via.array.size = size; |  | ||||||
|             o.via.array.ptr = p; |  | ||||||
|             for (auto const& e : v) *p++ = msgpack::object(e, o.zone); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CPP11_ARRAY_HPP |  | ||||||
|   | |||||||
| @@ -1,97 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014-2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_TYPE_ARRAY_CHAR_HPP |  | ||||||
| #define MSGPACK_TYPE_ARRAY_CHAR_HPP |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #ifndef MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #define MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <array> | #include "msgpack/v1/adaptor/cpp11/array_char.hpp" | ||||||
|  |  | ||||||
| namespace msgpack { | #endif // MSGPACK_TYPE_CPP11_ARRAY_CHAR_HPP | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct convert<std::array<char, N>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::array<char, N>& v) const { |  | ||||||
|         switch (o.type) { |  | ||||||
|         case msgpack::type::BIN: |  | ||||||
|             if(o.via.bin.size != N) { throw msgpack::type_error(); } |  | ||||||
|             std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); |  | ||||||
|             break; |  | ||||||
|         case msgpack::type::STR: |  | ||||||
|             if(o.via.str.size != N) { throw msgpack::type_error(); } |  | ||||||
|             std::memcpy(v.data(), o.via.str.ptr, N); |  | ||||||
|             break; |  | ||||||
|         default: |  | ||||||
|             throw msgpack::type_error(); |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct pack<std::array<char, N>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<char, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_bin(size); |  | ||||||
|         o.pack_bin_body(v.data(), size); |  | ||||||
|  |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object<std::array<char, N>> { |  | ||||||
|     void operator()(msgpack::object& o, const std::array<char, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.type = msgpack::type::BIN; |  | ||||||
|         o.via.bin.ptr = v.data(); |  | ||||||
|         o.via.bin.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object_with_zone<std::array<char, N>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::array<char, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.type = msgpack::type::BIN; |  | ||||||
|         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); |  | ||||||
|         o.via.bin.ptr = ptr; |  | ||||||
|         o.via.bin.size = size; |  | ||||||
|         std::memcpy(ptr, v.data(), size); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_ARRAY_CHAR_HPP |  | ||||||
|   | |||||||
| @@ -1,97 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014-2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP |  | ||||||
| #define MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #ifndef MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #define MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <array> | #include "msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp" | ||||||
|  |  | ||||||
| namespace msgpack { | #endif // MSGPACK_TYPE_CPP11_ARRAY_UNSIGNED_CHAR_HPP | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct convert<std::array<unsigned char, N>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::array<unsigned char, N>& v) const { |  | ||||||
|         switch (o.type) { |  | ||||||
|         case msgpack::type::BIN: |  | ||||||
|             if(o.via.bin.size != N) { throw msgpack::type_error(); } |  | ||||||
|             std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size); |  | ||||||
|             break; |  | ||||||
|         case msgpack::type::STR: |  | ||||||
|             if(o.via.str.size != N) { throw msgpack::type_error(); } |  | ||||||
|             std::memcpy(v.data(), o.via.str.ptr, N); |  | ||||||
|             break; |  | ||||||
|         default: |  | ||||||
|             throw msgpack::type_error(); |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct pack<std::array<unsigned char, N>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<unsigned char, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_bin(size); |  | ||||||
|         o.pack_bin_body(reinterpret_cast<char const*>(v.data()), size); |  | ||||||
|  |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object<std::array<unsigned char, N>> { |  | ||||||
|     void operator()(msgpack::object& o, const std::array<unsigned char, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.type = msgpack::type::BIN; |  | ||||||
|         o.via.bin.ptr = reinterpret_cast<char const*>(v.data()); |  | ||||||
|         o.via.bin.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <std::size_t N> |  | ||||||
| struct object_with_zone<std::array<unsigned char, N>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::array<unsigned char, N>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.type = msgpack::type::BIN; |  | ||||||
|         char* ptr = static_cast<char*>(o.zone.allocate_align(size)); |  | ||||||
|         o.via.bin.ptr = ptr; |  | ||||||
|         o.via.bin.size = size; |  | ||||||
|         std::memcpy(ptr, v.data(), size); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP |  | ||||||
|   | |||||||
| @@ -1,102 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014 KONDO-2015 Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_CPP11_FORWARD_LIST_HPP | #ifndef MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP | ||||||
| #define MSGPACK_CPP11_FORWARD_LIST_HPP | #define MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/cpp11/forward_list.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <forward_list> | #endif // MSGPACK_TYPE_CPP11_FORWARD_LIST_HPP | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
|     struct as<std::forward_list<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> { |  | ||||||
|     std::forward_list<T, Alloc> operator()(msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         std::forward_list<T, Alloc> v; |  | ||||||
|         msgpack::object* p = o.via.array.ptr + o.via.array.size; |  | ||||||
|         msgpack::object* const pend = o.via.array.ptr; |  | ||||||
|         while (p != pend) { |  | ||||||
|             --p; |  | ||||||
|             v.push_front(p->as<T>()); |  | ||||||
|         } |  | ||||||
|         return v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct convert<std::forward_list<T, Alloc>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::forward_list<T, Alloc>& v) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         v.resize(o.via.array.size); |  | ||||||
|         msgpack::object* p = o.via.array.ptr; |  | ||||||
|         for (auto &e : v) { |  | ||||||
|             p->convert(e); |  | ||||||
|             ++p; |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct pack<std::forward_list<T, Alloc>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::forward_list<T, Alloc>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         for(auto const& e : v) o.pack(e); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct object_with_zone<std::forward_list<T, Alloc>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::forward_list<T, Alloc>& v) const { |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.array.ptr = nullptr; |  | ||||||
|             o.via.array.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end())); |  | ||||||
|             o.via.array.size = size; |  | ||||||
|             msgpack::object* p = static_cast<msgpack::object*>( |  | ||||||
|                 o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|             o.via.array.ptr = p; |  | ||||||
|             for(auto const& e : v) *p++ = msgpack::object(e, o.zone); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CPP11_FORWARD_LIST_HPP |  | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp11/reference_wrapper.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp11/reference_wrapper.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #ifndef MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP | ||||||
|  | #define MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/cpp11/reference_wrapper.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_CPP11_REFERENCE_WRAPPER_HPP | ||||||
| @@ -1,90 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_CPP11_SHARED_PTR_HPP | #ifndef MSGPACK_TYPE_CPP11_SHARED_PTR_HPP | ||||||
| #define MSGPACK_CPP11_SHARED_PTR_HPP | #define MSGPACK_TYPE_CPP11_SHARED_PTR_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/cpp11/shared_ptr.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <memory> | #endif // MSGPACK_TYPE_CPP11_SHARED_PTR_HPP | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct as<std::shared_ptr<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> { |  | ||||||
|     std::shared_ptr<T> operator()(msgpack::object const& o) const { |  | ||||||
|         if(o.is_nil()) return nullptr; |  | ||||||
|         return std::make_shared<T>(o.as<T>()); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct convert<std::shared_ptr<T>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::shared_ptr<T>& v) const { |  | ||||||
|         if(o.is_nil()) v.reset(); |  | ||||||
|         else { |  | ||||||
|             v = std::make_shared<T>(); |  | ||||||
|             msgpack::adaptor::convert<T>()(o, *v); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct pack<std::shared_ptr<T>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::shared_ptr<T>& v) const { |  | ||||||
|         if (v) o.pack(*v); |  | ||||||
|         else o.pack_nil(); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object<std::shared_ptr<T> > { |  | ||||||
|     void operator()(msgpack::object& o, const std::shared_ptr<T>& v) const { |  | ||||||
|         if (v) msgpack::adaptor::object<T>()(o, *v); |  | ||||||
|         else o.type = msgpack::type::NIL; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object_with_zone<std::shared_ptr<T>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::shared_ptr<T>& v) const { |  | ||||||
|         if (v) msgpack::adaptor::object_with_zone<T>()(o, *v); |  | ||||||
|         else o.type = msgpack::type::NIL; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CPP11_SHARED_PTR_HPP |  | ||||||
|   | |||||||
| @@ -1,184 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_CPP11_TUPLE_HPP |  | ||||||
| #define MSGPACK_CPP11_TUPLE_HPP |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #ifndef MSGPACK_TYPE_CPP11_TUPLE_HPP | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #define MSGPACK_TYPE_CPP11_TUPLE_HPP | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
| #include "msgpack/meta.hpp" |  | ||||||
|  |  | ||||||
| #include <tuple> | #include "msgpack/v1/adaptor/cpp11/tuple.hpp" | ||||||
|  |  | ||||||
| namespace msgpack { | #endif // MSGPACK_TYPE_CPP11_TUPLE_HPP | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| // --- Pack from tuple to packer stream --- |  | ||||||
| template <typename Stream, typename Tuple, std::size_t N> |  | ||||||
| struct StdTuplePacker { |  | ||||||
|     static void pack( |  | ||||||
|         msgpack::packer<Stream>& o, |  | ||||||
|         const Tuple& v) { |  | ||||||
|         StdTuplePacker<Stream, Tuple, N-1>::pack(o, v); |  | ||||||
|         o.pack(std::get<N-1>(v)); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Stream, typename Tuple> |  | ||||||
| struct StdTuplePacker<Stream, Tuple, 0> { |  | ||||||
|     static void pack ( |  | ||||||
|         msgpack::packer<Stream>&, |  | ||||||
|         const Tuple&) { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename... Args> |  | ||||||
| struct pack<std::tuple<Args...>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()( |  | ||||||
|         msgpack::packer<Stream>& o, |  | ||||||
|         const std::tuple<Args...>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(sizeof...(Args)); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         StdTuplePacker<Stream, decltype(v), sizeof...(Args)>::pack(o, v); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| // --- Convert from tuple to object --- |  | ||||||
|  |  | ||||||
| template <typename... Args> |  | ||||||
| struct StdTupleAs; |  | ||||||
|  |  | ||||||
| template <typename T, typename... Args> |  | ||||||
| struct StdTupleAsImpl { |  | ||||||
|     static std::tuple<T, Args...> as(msgpack::object const& o) { |  | ||||||
|         return std::tuple_cat( |  | ||||||
|             std::make_tuple(o.via.array.ptr[o.via.array.size - sizeof...(Args) - 1].as<T>()), |  | ||||||
|             StdTupleAs<Args...>::as(o)); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename... Args> |  | ||||||
| struct StdTupleAs { |  | ||||||
|     static std::tuple<Args...> as(msgpack::object const& o) { |  | ||||||
|         return StdTupleAsImpl<Args...>::as(o); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct StdTupleAs<> { |  | ||||||
|     static std::tuple<> as (msgpack::object const&) { |  | ||||||
|         return std::tuple<>(); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Tuple, std::size_t N> |  | ||||||
| struct StdTupleConverter { |  | ||||||
|     static void convert( |  | ||||||
|         msgpack::object const& o, |  | ||||||
|         Tuple& v) { |  | ||||||
|         StdTupleConverter<Tuple, N-1>::convert(o, v); |  | ||||||
|         o.via.array.ptr[N-1].convert<typename std::remove_reference<decltype(std::get<N-1>(v))>::type>(std::get<N-1>(v)); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Tuple> |  | ||||||
| struct StdTupleConverter<Tuple, 0> { |  | ||||||
|     static void convert ( |  | ||||||
|         msgpack::object const&, |  | ||||||
|         Tuple&) { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename... Args> |  | ||||||
| struct as<std::tuple<Args...>, typename std::enable_if<msgpack::all_of<msgpack::has_as, Args...>::value>::type>  { |  | ||||||
|     std::tuple<Args...> operator()( |  | ||||||
|         msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if (o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); } |  | ||||||
|         return StdTupleAs<Args...>::as(o); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename... Args> |  | ||||||
| struct convert<std::tuple<Args...>> { |  | ||||||
|     msgpack::object const& operator()( |  | ||||||
|         msgpack::object const& o, |  | ||||||
|         std::tuple<Args...>& v) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         if(o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); } |  | ||||||
|         StdTupleConverter<decltype(v), sizeof...(Args)>::convert(o, v); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| // --- Convert from tuple to object with zone --- |  | ||||||
| template <typename Tuple, std::size_t N> |  | ||||||
| struct StdTupleToObjectWithZone { |  | ||||||
|     static void convert( |  | ||||||
|         msgpack::object::with_zone& o, |  | ||||||
|         const Tuple& v) { |  | ||||||
|         StdTupleToObjectWithZone<Tuple, N-1>::convert(o, v); |  | ||||||
|         o.via.array.ptr[N-1] = msgpack::object(std::get<N-1>(v), o.zone); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Tuple> |  | ||||||
| struct StdTupleToObjectWithZone<Tuple, 0> { |  | ||||||
|     static void convert ( |  | ||||||
|         msgpack::object::with_zone&, |  | ||||||
|         const Tuple&) { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename... Args> |  | ||||||
| struct object_with_zone<std::tuple<Args...>> { |  | ||||||
|     void operator()( |  | ||||||
|         msgpack::object::with_zone& o, |  | ||||||
|         std::tuple<Args...> const& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(sizeof...(Args)); |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|         o.via.array.size = size; |  | ||||||
|         StdTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CPP11_TUPLE_HPP |  | ||||||
|   | |||||||
| @@ -1,90 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
|  |  | ||||||
| #ifndef MSGPACK_CPP11_UNIQUE_PTR_HPP | #ifndef MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP | ||||||
| #define MSGPACK_CPP11_UNIQUE_PTR_HPP | #define MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/cpp11/unique_ptr.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <memory> | #endif // MSGPACK_TYPE_CPP11_UNIQUE_PTR_HPP | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct as<std::unique_ptr<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> { |  | ||||||
|     std::unique_ptr<T> operator()(msgpack::object const& o) const { |  | ||||||
|         if(o.is_nil()) return nullptr; |  | ||||||
|         return std::unique_ptr<T>(new T(o.as<T>())); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct convert<std::unique_ptr<T>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::unique_ptr<T>& v) const { |  | ||||||
|         if(o.is_nil()) v.reset(); |  | ||||||
|         else { |  | ||||||
|             v.reset(new T); |  | ||||||
|             msgpack::adaptor::convert<T>()(o, *v); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct pack<std::unique_ptr<T>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unique_ptr<T>& v) const { |  | ||||||
|         if (v) o.pack(*v); |  | ||||||
|         else o.pack_nil(); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object<std::unique_ptr<T> > { |  | ||||||
|     void operator()(msgpack::object& o, const std::unique_ptr<T>& v) const { |  | ||||||
|         if (v) msgpack::adaptor::object<T>()(o, *v); |  | ||||||
|         else o.type = msgpack::type::NIL; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T> |  | ||||||
| struct object_with_zone<std::unique_ptr<T>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::unique_ptr<T>& v) const { |  | ||||||
|         if (v) msgpack::adaptor::object_with_zone<T>()(o, *v); |  | ||||||
|         else o.type = msgpack::type::NIL; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_CPP11_UNIQUE_PTR_HPP |  | ||||||
|   | |||||||
| @@ -1,190 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014-2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_TYPE_UNORDERED_MAP_HPP |  | ||||||
| #define MSGPACK_TYPE_UNORDERED_MAP_HPP |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #ifndef MSGPACK_TYPE_CPP11_UNORDERED_MAP_HPP | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #define MSGPACK_TYPE_CPP11_UNORDERED_MAP_HPP | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <unordered_map> | #include "msgpack/v1/adaptor/cpp11/unordered_map.hpp" | ||||||
|  |  | ||||||
| namespace msgpack { | #endif // MSGPACK_TYPE_CPP11_UNORDERED_MAP_HPP | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct as< |  | ||||||
|     std::unordered_map<K, V, Hash, Compare, Alloc>, |  | ||||||
|     typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> { |  | ||||||
|     std::unordered_map<K, V, Hash, Compare, Alloc> operator()(msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object_kv* p(o.via.map.ptr); |  | ||||||
|         msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); |  | ||||||
|         std::unordered_map<K, V, Hash, Compare, Alloc> v; |  | ||||||
|         for (; p != pend; ++p) { |  | ||||||
|             v.emplace(p->key.as<K>(), p->val.as<V>()); |  | ||||||
|         } |  | ||||||
|         return v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct convert<std::unordered_map<K, V, Hash, Compare, Alloc>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::unordered_map<K, V, Hash, Compare, Alloc>& v) const { |  | ||||||
|         if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object_kv* p(o.via.map.ptr); |  | ||||||
|         msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); |  | ||||||
|         std::unordered_map<K, V, Hash, Compare, Alloc> tmp; |  | ||||||
|         for(; p != pend; ++p) { |  | ||||||
|             K key; |  | ||||||
|             p->key.convert(key); |  | ||||||
|             p->val.convert(tmp[std::move(key)]); |  | ||||||
|         } |  | ||||||
|         v = std::move(tmp); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct pack<std::unordered_map<K, V, Hash, Compare, Alloc>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|         msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_map<K, V, Hash, Compare, Alloc>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_map(size); |  | ||||||
|         for(typename std::unordered_map<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end()); |  | ||||||
|             it != it_end; ++it) { |  | ||||||
|             o.pack(it->first); |  | ||||||
|             o.pack(it->second); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct object_with_zone<std::unordered_map<K, V, Hash, Compare, Alloc>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::unordered_map<K, V, Hash, Compare, Alloc>& v) const { |  | ||||||
|         o.type = msgpack::type::MAP; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.map.ptr  = nullptr; |  | ||||||
|             o.via.map.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|             msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); |  | ||||||
|             msgpack::object_kv* const pend = p + size; |  | ||||||
|             o.via.map.ptr  = p; |  | ||||||
|             o.via.map.size = size; |  | ||||||
|             typename std::unordered_map<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()); |  | ||||||
|             do { |  | ||||||
|                 p->key = msgpack::object(it->first, o.zone); |  | ||||||
|                 p->val = msgpack::object(it->second, o.zone); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct as< |  | ||||||
|     std::unordered_multimap<K, V, Hash, Compare, Alloc>, |  | ||||||
|     typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> { |  | ||||||
|     std::unordered_multimap<K, V, Hash, Compare, Alloc> operator()(msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object_kv* p(o.via.map.ptr); |  | ||||||
|         msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); |  | ||||||
|         std::unordered_multimap<K, V, Hash, Compare, Alloc> v; |  | ||||||
|         for (; p != pend; ++p) { |  | ||||||
|             v.emplace(p->key.as<K>(), p->val.as<V>()); |  | ||||||
|         } |  | ||||||
|         return v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct convert<std::unordered_multimap<K, V, Hash, Compare, Alloc>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::unordered_multimap<K, V, Hash, Compare, Alloc>& v) const { |  | ||||||
|         if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object_kv* p(o.via.map.ptr); |  | ||||||
|         msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size); |  | ||||||
|         std::unordered_multimap<K, V, Hash, Compare, Alloc> tmp; |  | ||||||
|         for(; p != pend; ++p) { |  | ||||||
|             std::pair<K, V> value; |  | ||||||
|             p->key.convert(value.first); |  | ||||||
|             p->val.convert(value.second); |  | ||||||
|             tmp.insert(std::move(value)); |  | ||||||
|         } |  | ||||||
|         v = std::move(tmp); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct pack<std::unordered_multimap<K, V, Hash, Compare, Alloc>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|         msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_multimap<K, V, Hash, Compare, Alloc>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_map(size); |  | ||||||
|         for(typename std::unordered_multimap<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end()); |  | ||||||
|             it != it_end; ++it) { |  | ||||||
|             o.pack(it->first); |  | ||||||
|             o.pack(it->second); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename K, typename V, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct object_with_zone<std::unordered_multimap<K, V, Hash, Compare, Alloc>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::unordered_multimap<K, V, Hash, Compare, Alloc>& v) const { |  | ||||||
|         o.type = msgpack::type::MAP; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.map.ptr  = nullptr; |  | ||||||
|             o.via.map.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|             msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size)); |  | ||||||
|             msgpack::object_kv* const pend = p + size; |  | ||||||
|             o.via.map.ptr  = p; |  | ||||||
|             o.via.map.size = size; |  | ||||||
|             typename std::unordered_multimap<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()); |  | ||||||
|             do { |  | ||||||
|                 p->key = msgpack::object(it->first, o.zone); |  | ||||||
|                 p->val = msgpack::object(it->second, o.zone); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_UNORDERED_MAP_HPP |  | ||||||
|   | |||||||
| @@ -1,180 +1,16 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2014-2015 KONDO Takatoshi | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // | // | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // |  | ||||||
| #ifndef MSGPACK_TYPE_UNORDERED_SET_HPP |  | ||||||
| #define MSGPACK_TYPE_UNORDERED_SET_HPP |  | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #ifndef MSGPACK_TYPE_CPP11_UNORDERED_SET_HPP | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" | #define MSGPACK_TYPE_CPP11_UNORDERED_SET_HPP | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <unordered_set> | #include "msgpack/v1/adaptor/cpp11/unordered_set.hpp" | ||||||
|  |  | ||||||
| namespace msgpack { | #endif // MSGPACK_TYPE_CPP11_UNORDERED_SET_HPP | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct as<std::unordered_set<Key, Hash, Compare, Alloc>, typename std::enable_if<msgpack::has_as<Key>::value>::type> { |  | ||||||
|     std::unordered_set<Key, Hash, Compare, Alloc> operator()(msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object* p = o.via.array.ptr + o.via.array.size; |  | ||||||
|         msgpack::object* const pbegin = o.via.array.ptr; |  | ||||||
|         std::unordered_set<Key, Hash, Compare, Alloc> v; |  | ||||||
|         while (p > pbegin) { |  | ||||||
|             --p; |  | ||||||
|             v.insert(p->as<Key>()); |  | ||||||
|         } |  | ||||||
|         return v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct convert<std::unordered_set<Key, Hash, Compare, Alloc>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::unordered_set<Key, Hash, Compare, Alloc>& v) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object* p = o.via.array.ptr + o.via.array.size; |  | ||||||
|         msgpack::object* const pbegin = o.via.array.ptr; |  | ||||||
|         std::unordered_set<Key, Hash, Compare, Alloc> tmp; |  | ||||||
|         while(p > pbegin) { |  | ||||||
|             --p; |  | ||||||
|             tmp.insert(p->as<Key>()); |  | ||||||
|         } |  | ||||||
|         v = std::move(tmp); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct pack<std::unordered_set<Key, Hash, Compare, Alloc>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|         msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_set<Key, Hash, Compare, Alloc>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         for(typename std::unordered_set<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end()); |  | ||||||
|             it != it_end; ++it) { |  | ||||||
|             o.pack(*it); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct object_with_zone<std::unordered_set<Key, Hash, Compare, Alloc>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::unordered_set<Key, Hash, Compare, Alloc>& v) const { |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.array.ptr = nullptr; |  | ||||||
|             o.via.array.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|             msgpack::object* const pend = p + size; |  | ||||||
|             o.via.array.ptr = p; |  | ||||||
|             o.via.array.size = size; |  | ||||||
|             typename std::unordered_set<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()); |  | ||||||
|             do { |  | ||||||
|                 *p = msgpack::object(*it, o.zone); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct as<std::unordered_multiset<Key, Hash, Compare, Alloc>, typename std::enable_if<msgpack::has_as<Key>::value>::type> { |  | ||||||
|     std::unordered_multiset<Key, Hash, Compare, Alloc> operator()(msgpack::object const& o) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object* p = o.via.array.ptr + o.via.array.size; |  | ||||||
|         msgpack::object* const pbegin = o.via.array.ptr; |  | ||||||
|         std::unordered_multiset<Key, Hash, Compare, Alloc> v; |  | ||||||
|         while (p > pbegin) { |  | ||||||
|             --p; |  | ||||||
|             v.insert(p->as<Key>()); |  | ||||||
|         } |  | ||||||
|         return v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct convert<std::unordered_multiset<Key, Hash, Compare, Alloc>> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::unordered_multiset<Key, Hash, Compare, Alloc>& v) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         msgpack::object* p = o.via.array.ptr + o.via.array.size; |  | ||||||
|         msgpack::object* const pbegin = o.via.array.ptr; |  | ||||||
|         std::unordered_multiset<Key, Hash, Compare, Alloc> tmp; |  | ||||||
|         while(p > pbegin) { |  | ||||||
|             --p; |  | ||||||
|             tmp.insert(p->as<Key>()); |  | ||||||
|         } |  | ||||||
|         v = std::move(tmp); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct pack<std::unordered_multiset<Key, Hash, Compare, Alloc>> { |  | ||||||
|     template <typename Stream> |  | ||||||
|         msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_multiset<Key, Hash, Compare, Alloc>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         for(typename std::unordered_multiset<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end()); |  | ||||||
|             it != it_end; ++it) { |  | ||||||
|             o.pack(*it); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename Key, typename Hash, typename Compare, typename Alloc> |  | ||||||
| struct object_with_zone<std::unordered_multiset<Key, Hash, Compare, Alloc>> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::unordered_multiset<Key, Hash, Compare, Alloc>& v) const { |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.array.ptr = nullptr; |  | ||||||
|             o.via.array.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|             msgpack::object* const pend = p + size; |  | ||||||
|             o.via.array.ptr = p; |  | ||||||
|             o.via.array.size = size; |  | ||||||
|             typename std::unordered_multiset<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()); |  | ||||||
|             do { |  | ||||||
|                 *p = msgpack::object(*it, o.zone); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_UNORDERED_SET_HPP |  | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp17/optional.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp17/optional.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_CPP17_OPTIONAL_HPP | ||||||
|  | #define MSGPACK_TYPE_CPP17_OPTIONAL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/cpp17/optional.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_CPP17_OPTIONAL_HPP | ||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/cpp17/string_view.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/cpp17/string_view.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_CPP17_STRING_VIEW_HPP | ||||||
|  | #define MSGPACK_TYPE_CPP17_STRING_VIEW_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/cpp17/string_view.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_CPP17_STRING_VIEW_HPP | ||||||
| @@ -1,39 +1,17 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi | // Copyright (C) 2008-2016 FURUHASHI Sadayuki and KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_DEFINE_HPP | #ifndef MSGPACK_DEFINE_HPP | ||||||
| #define MSGPACK_DEFINE_HPP | #define MSGPACK_DEFINE_HPP | ||||||
|  |  | ||||||
| #include "msgpack/cpp_config.hpp" | #include "msgpack/adaptor/define_decl.hpp" | ||||||
|  |  | ||||||
| #if defined(MSGPACK_USE_CPP03) | #include "msgpack/v1/adaptor/define.hpp" | ||||||
| #include "detail/cpp03_define_array.hpp" |  | ||||||
| #include "detail/cpp03_define_map.hpp" |  | ||||||
| #else  // MSGPACK_USE_CPP03 |  | ||||||
| #include "detail/cpp11_define_array.hpp" |  | ||||||
| #include "detail/cpp11_define_map.hpp" |  | ||||||
| #endif // MSGPACK_USE_CPP03 |  | ||||||
|  |  | ||||||
| #if defined(MSGPACK_USE_DEFINE_MAP) |  | ||||||
| #define MSGPACK_DEFINE MSGPACK_DEFINE_MAP |  | ||||||
| #define MSGPACK_BASE MSGPACK_BASE_MAP |  | ||||||
| #else  // defined(MSGPACK_USE_DEFINE_MAP) |  | ||||||
| #define MSGPACK_DEFINE MSGPACK_DEFINE_ARRAY |  | ||||||
| #define MSGPACK_BASE MSGPACK_BASE_ARRAY |  | ||||||
| #endif // defined(MSGPACK_USE_DEFINE_MAP) |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_DEFINE_HPP | #endif // MSGPACK_DEFINE_HPP | ||||||
|   | |||||||
							
								
								
									
										143
									
								
								include/msgpack/adaptor/define_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								include/msgpack/adaptor/define_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_DEFINE_DECL_HPP | ||||||
|  | #define MSGPACK_DEFINE_DECL_HPP | ||||||
|  |  | ||||||
|  | // BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp | ||||||
|  | // http://www.boost.org/libs/preprocessor/doc/ref/variadics.html | ||||||
|  | // However, supporting compiler detection is not complete. msgpack-c requires | ||||||
|  | // variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly. | ||||||
|  | #if !defined(MSGPACK_PP_VARIADICS) | ||||||
|  | #define MSGPACK_PP_VARIADICS | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #include <msgpack/preprocessor.hpp> | ||||||
|  |  | ||||||
|  | #include "msgpack/versioning.hpp" | ||||||
|  |  | ||||||
|  | // for MSGPACK_ADD_ENUM | ||||||
|  | #include "msgpack/adaptor/int.hpp" | ||||||
|  |  | ||||||
|  | #define MSGPACK_DEFINE_ARRAY(...) \ | ||||||
|  |     template <typename Packer> \ | ||||||
|  |     void msgpack_pack(Packer& pk) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \ | ||||||
|  |     } \ | ||||||
|  |     void msgpack_unpack(msgpack::object const& o) \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \ | ||||||
|  |     }\ | ||||||
|  |     template <typename MSGPACK_OBJECT> \ | ||||||
|  |     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_array(__VA_ARGS__).msgpack_object(o, z); \ | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | #define MSGPACK_BASE_ARRAY(base) (*const_cast<base *>(static_cast<base const*>(this))) | ||||||
|  | #define MSGPACK_NVP(name, value) (name) (value) | ||||||
|  |  | ||||||
|  | #define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \ | ||||||
|  |     MSGPACK_PP_IF( \ | ||||||
|  |         MSGPACK_PP_IS_BEGIN_PARENS(elem), \ | ||||||
|  |         elem, \ | ||||||
|  |         (MSGPACK_PP_STRINGIZE(elem))(elem) \ | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  | #define MSGPACK_DEFINE_MAP_IMPL(...) \ | ||||||
|  |     MSGPACK_PP_SEQ_TO_TUPLE( \ | ||||||
|  |         MSGPACK_PP_SEQ_FOR_EACH( \ | ||||||
|  |             MSGPACK_DEFINE_MAP_EACH_PROC, \ | ||||||
|  |             0, \ | ||||||
|  |             MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ | ||||||
|  |         ) \ | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  | #define MSGPACK_DEFINE_MAP(...) \ | ||||||
|  |     template <typename Packer> \ | ||||||
|  |     void msgpack_pack(Packer& pk) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_map \ | ||||||
|  |             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||||
|  |             .msgpack_pack(pk); \ | ||||||
|  |     } \ | ||||||
|  |     void msgpack_unpack(msgpack::object const& o) \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_map \ | ||||||
|  |             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||||
|  |             .msgpack_unpack(o); \ | ||||||
|  |     }\ | ||||||
|  |     template <typename MSGPACK_OBJECT> \ | ||||||
|  |     void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \ | ||||||
|  |     { \ | ||||||
|  |         msgpack::type::make_define_map \ | ||||||
|  |             MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \ | ||||||
|  |             .msgpack_object(o, z); \ | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | #define MSGPACK_BASE_MAP(base) \ | ||||||
|  |     (MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this))) | ||||||
|  |  | ||||||
|  | // MSGPACK_ADD_ENUM must be used in the global namespace. | ||||||
|  | #define MSGPACK_ADD_ENUM(enum_name) \ | ||||||
|  |   namespace msgpack { \ | ||||||
|  |   /** @cond */ \ | ||||||
|  |   MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) { \ | ||||||
|  |   /** @endcond */ \ | ||||||
|  |   namespace adaptor { \ | ||||||
|  |     template<> \ | ||||||
|  |     struct convert<enum_name> { \ | ||||||
|  |       msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const { \ | ||||||
|  |         msgpack::underlying_type<enum_name>::type tmp; \ | ||||||
|  |         msgpack::operator>>(o, tmp);                   \ | ||||||
|  |         v = static_cast<enum_name>(tmp);   \ | ||||||
|  |         return o; \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |     template<> \ | ||||||
|  |     struct object<enum_name> { \ | ||||||
|  |       void operator()(msgpack::object& o, const enum_name& v) const { \ | ||||||
|  |         msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(v); \ | ||||||
|  |         msgpack::operator<<(o, tmp);                                    \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |     template<> \ | ||||||
|  |     struct object_with_zone<enum_name> { \ | ||||||
|  |       void operator()(msgpack::object::with_zone& o, const enum_name& v) const {  \ | ||||||
|  |         msgpack::underlying_type<enum_name>::type tmp = static_cast<msgpack::underlying_type<enum_name>::type>(v); \ | ||||||
|  |         msgpack::operator<<(o, tmp);                                    \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |     template <> \ | ||||||
|  |     struct pack<enum_name> { \ | ||||||
|  |       template <typename Stream> \ | ||||||
|  |       msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \ | ||||||
|  |           return msgpack::operator<<(o, static_cast<msgpack::underlying_type<enum_name>::type>(v)); \ | ||||||
|  |       } \ | ||||||
|  |     }; \ | ||||||
|  |   } \ | ||||||
|  |   /** @cond */ \ | ||||||
|  |   } \ | ||||||
|  |   /** @endcond */ \ | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | #if defined(MSGPACK_USE_DEFINE_MAP) | ||||||
|  | #define MSGPACK_DEFINE MSGPACK_DEFINE_MAP | ||||||
|  | #define MSGPACK_BASE MSGPACK_BASE_MAP | ||||||
|  | #else  // defined(MSGPACK_USE_DEFINE_MAP) | ||||||
|  | #define MSGPACK_DEFINE MSGPACK_DEFINE_ARRAY | ||||||
|  | #define MSGPACK_BASE MSGPACK_BASE_ARRAY | ||||||
|  | #endif // defined(MSGPACK_USE_DEFINE_MAP) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/define_decl.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/define_decl.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_DEFINE_DECL_HPP | ||||||
| @@ -1,116 +1,15 @@ | |||||||
| // | // | ||||||
| // MessagePack for C++ static resolution routine | // MessagePack for C++ static resolution routine | ||||||
| // | // | ||||||
| // Copyright (C) 2008-2015 FURUHASHI Sadayuki | // Copyright (C) 2016 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_DEQUE_HPP | #ifndef MSGPACK_TYPE_DEQUE_HPP | ||||||
| #define MSGPACK_TYPE_DEQUE_HPP | #define MSGPACK_TYPE_DEQUE_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/v1/adaptor/deque.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include "msgpack/adaptor/check_container_size.hpp" |  | ||||||
|  |  | ||||||
| #include <deque> | #endif // MSGPACK_TYPE_DEQUE_HPP | ||||||
|  |  | ||||||
| namespace msgpack { |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| #if !defined(MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct as<std::deque<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> { |  | ||||||
|     std::deque<T, Alloc> operator()(const msgpack::object& o) const { |  | ||||||
|         if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         std::deque<T, Alloc> v; |  | ||||||
|         if (o.via.array.size > 0) { |  | ||||||
|             msgpack::object* p = o.via.array.ptr; |  | ||||||
|             msgpack::object* const pend = o.via.array.ptr + o.via.array.size; |  | ||||||
|             do { |  | ||||||
|                 v.push_back(p->as<T>()); |  | ||||||
|                 ++p; |  | ||||||
|             } while (p < pend); |  | ||||||
|         } |  | ||||||
|         return v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif // !defined(MSGPACK_USE_CPP03) |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct convert<std::deque<T, Alloc> > { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, std::deque<T, Alloc>& v) const { |  | ||||||
|         if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } |  | ||||||
|         v.resize(o.via.array.size); |  | ||||||
|         msgpack::object* p = o.via.array.ptr; |  | ||||||
|         msgpack::object* const pend = o.via.array.ptr + o.via.array.size; |  | ||||||
|         typename std::deque<T, Alloc>::iterator it = v.begin(); |  | ||||||
|         for(; p < pend; ++p, ++it) { |  | ||||||
|             p->convert(*it); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct pack<std::deque<T, Alloc> > { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::deque<T, Alloc>& v) const { |  | ||||||
|         uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|         o.pack_array(size); |  | ||||||
|         for(typename std::deque<T, Alloc>::const_iterator it(v.begin()), it_end(v.end()); |  | ||||||
|             it != it_end; ++it) { |  | ||||||
|             o.pack(*it); |  | ||||||
|         } |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <typename T, typename Alloc> |  | ||||||
| struct object_with_zone<std::deque<T, Alloc> > { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const std::deque<T, Alloc>& v) const { |  | ||||||
|         o.type = msgpack::type::ARRAY; |  | ||||||
|         if(v.empty()) { |  | ||||||
|             o.via.array.ptr = nullptr; |  | ||||||
|             o.via.array.size = 0; |  | ||||||
|         } else { |  | ||||||
|             uint32_t size = checked_get_container_size(v.size()); |  | ||||||
|             msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size)); |  | ||||||
|             msgpack::object* const pend = p + size; |  | ||||||
|             o.via.array.ptr = p; |  | ||||||
|             o.via.array.size = size; |  | ||||||
|             typename std::deque<T, Alloc>::const_iterator it(v.begin()); |  | ||||||
|             do { |  | ||||||
|                 *p = msgpack::object(*it, o.zone); |  | ||||||
|                 ++p; |  | ||||||
|                 ++it; |  | ||||||
|             } while(p < pend); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| }  // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| }  // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif /* msgpack/type/deque.hpp */ |  | ||||||
|   | |||||||
| @@ -3,243 +3,15 @@ | |||||||
| // | // | ||||||
| // Copyright (C) 2015 KONDO Takatoshi | // Copyright (C) 2015 KONDO Takatoshi | ||||||
| // | // | ||||||
| //    Licensed under the Apache License, Version 2.0 (the "License"); | //    Distributed under the Boost Software License, Version 1.0. | ||||||
| //    you may not use this file except in compliance with the License. | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
| //    You may obtain a copy of the License at | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
| // |  | ||||||
| //        http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| // |  | ||||||
| //    Unless required by applicable law or agreed to in writing, software |  | ||||||
| //    distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| //    See the License for the specific language governing permissions and |  | ||||||
| //    limitations under the License. |  | ||||||
| // | // | ||||||
| #ifndef MSGPACK_TYPE_EXT_HPP | #ifndef MSGPACK_TYPE_EXT_HPP | ||||||
| #define MSGPACK_TYPE_EXT_HPP | #define MSGPACK_TYPE_EXT_HPP | ||||||
|  |  | ||||||
| #include "msgpack/versioning.hpp" | #include "msgpack/adaptor/ext_decl.hpp" | ||||||
| #include "msgpack/adaptor/adaptor_base.hpp" |  | ||||||
| #include <cstring> |  | ||||||
| #include <string> |  | ||||||
| #include <cassert> |  | ||||||
|  |  | ||||||
| namespace msgpack { | #include "msgpack/v1/adaptor/ext.hpp" | ||||||
|  |  | ||||||
| /// @cond | #endif //  MSGPACK_TYPE_EXT_HPP | ||||||
| MSGPACK_API_VERSION_NAMESPACE(v1) { |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| namespace type { |  | ||||||
| class ext_ref; |  | ||||||
|  |  | ||||||
| class ext { |  | ||||||
| public: |  | ||||||
|     ext() : m_data(1, 0) {} |  | ||||||
|     ext(int8_t t, const char* p, uint32_t s) { |  | ||||||
|         detail::check_container_size_for_ext<sizeof(std::size_t)>(s); |  | ||||||
|         m_data.reserve(static_cast<std::size_t>(s) + 1); |  | ||||||
|         m_data.push_back(static_cast<char>(t)); |  | ||||||
|         m_data.insert(m_data.end(), p, p + s); |  | ||||||
|     } |  | ||||||
|     ext(int8_t t, uint32_t s) { |  | ||||||
|         detail::check_container_size_for_ext<sizeof(std::size_t)>(s); |  | ||||||
|         m_data.resize(static_cast<std::size_t>(s) + 1); |  | ||||||
|         m_data[0] = static_cast<char>(t); |  | ||||||
|     } |  | ||||||
|     ext(ext_ref const&); |  | ||||||
|     int8_t type() const { |  | ||||||
|         return static_cast<int8_t>(m_data[0]); |  | ||||||
|     } |  | ||||||
|     const char* data() const { |  | ||||||
|         return &m_data[1]; |  | ||||||
|     } |  | ||||||
|     char* data() { |  | ||||||
|         return &m_data[1]; |  | ||||||
|     } |  | ||||||
|     uint32_t size() const { |  | ||||||
|         return static_cast<uint32_t>(m_data.size()) - 1; |  | ||||||
|     } |  | ||||||
|     bool operator== (const ext& x) const { |  | ||||||
|         return m_data == x.m_data; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator!= (const ext& x) const { |  | ||||||
|         return !(*this == x); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator< (const ext& x) const { |  | ||||||
|         return m_data < x.m_data; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator> (const ext& x) const { |  | ||||||
|         return m_data > x.m_data; |  | ||||||
|     } |  | ||||||
| private: |  | ||||||
|     std::vector<char> m_data; |  | ||||||
|     friend class ext_ref; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace type |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct convert<msgpack::type::ext> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, msgpack::type::ext& v) const { |  | ||||||
|         if(o.type != msgpack::type::EXT) { |  | ||||||
|             throw msgpack::type_error(); |  | ||||||
|         } |  | ||||||
|         v = msgpack::type::ext(o.via.ext.type(), o.via.ext.data(), o.via.ext.size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct pack<msgpack::type::ext> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::ext& v) const { |  | ||||||
|         // size limit has aleady been checked at ext's constructor |  | ||||||
|         uint32_t size = v.size(); |  | ||||||
|         o.pack_ext(size, v.type()); |  | ||||||
|         o.pack_ext_body(v.data(), size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object_with_zone<msgpack::type::ext> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const msgpack::type::ext& v) const { |  | ||||||
|         // size limit has aleady been checked at ext's constructor |  | ||||||
|         uint32_t size = v.size(); |  | ||||||
|         o.type = msgpack::type::EXT; |  | ||||||
|         char* ptr = static_cast<char*>(o.zone.allocate_align(size + 1)); |  | ||||||
|         o.via.ext.ptr = ptr; |  | ||||||
|         o.via.ext.size = size; |  | ||||||
|         ptr[0] = static_cast<char>(v.type()); |  | ||||||
|         std::memcpy(ptr + 1, v.data(), size); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| namespace type { |  | ||||||
|  |  | ||||||
| class ext_ref { |  | ||||||
| public: |  | ||||||
|     // ext_ref should be default constructible to support 'convert'. |  | ||||||
|     // A default constructed ext_ref object::m_ptr doesn't have the buffer to point to. |  | ||||||
|     // In order to avoid nullptr checking branches, m_ptr points to m_size. |  | ||||||
|     // So type() returns unspecified but valid value. It might be a zero because m_size |  | ||||||
|     // is initialized as zero, but shoudn't assume that. |  | ||||||
|     ext_ref() : m_ptr(static_cast<char*>(static_cast<void*>(&m_size))), m_size(0) {} |  | ||||||
|     ext_ref(const char* p, uint32_t s) : |  | ||||||
|         m_ptr(s == 0 ? static_cast<char*>(static_cast<void*>(&m_size)) : p), |  | ||||||
|         m_size(s == 0 ? 0 : s - 1) { |  | ||||||
|         detail::check_container_size_for_ext<sizeof(std::size_t)>(s); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // size limit has aleady been checked at ext's constructor |  | ||||||
|     ext_ref(ext const& x) : m_ptr(&x.m_data[0]), m_size(x.size()) {} |  | ||||||
|  |  | ||||||
|     const char* data() const { |  | ||||||
|         return m_ptr + 1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     uint32_t size() const { |  | ||||||
|         return m_size; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     int8_t type() const { |  | ||||||
|         return static_cast<int8_t>(m_ptr[0]); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     std::string str() const { |  | ||||||
|         return std::string(m_ptr + 1, m_size); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator== (const ext_ref& x) const { |  | ||||||
|         return m_size == x.m_size && std::memcmp(m_ptr, x.m_ptr, m_size) == 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator!= (const ext_ref& x) const { |  | ||||||
|         return !(*this == x); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator< (const ext_ref& x) const { |  | ||||||
|         if (m_size < x.m_size) return true; |  | ||||||
|         if (m_size > x.m_size) return false; |  | ||||||
|         return std::memcmp(m_ptr, x.m_ptr, m_size) < 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     bool operator> (const ext_ref& x) const { |  | ||||||
|         if (m_size > x.m_size) return true; |  | ||||||
|         if (m_size < x.m_size) return false; |  | ||||||
|         return std::memcmp(m_ptr, x.m_ptr, m_size) > 0; |  | ||||||
|     } |  | ||||||
| private: |  | ||||||
|     const char* m_ptr; |  | ||||||
|     uint32_t m_size; |  | ||||||
|     friend struct msgpack::adaptor::object<msgpack::type::ext_ref>; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| inline ext::ext(ext_ref const& x) { |  | ||||||
|     // size limit has aleady been checked at ext_ref's constructor |  | ||||||
|     m_data.reserve(x.size() + 1); |  | ||||||
|  |  | ||||||
|     m_data.push_back(x.type()); |  | ||||||
|     m_data.insert(m_data.end(), x.data(), x.data() + x.size()); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| } // namespace type |  | ||||||
|  |  | ||||||
| namespace adaptor { |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct convert<msgpack::type::ext_ref> { |  | ||||||
|     msgpack::object const& operator()(msgpack::object const& o, msgpack::type::ext_ref& v) const { |  | ||||||
|         if(o.type != msgpack::type::EXT) { throw msgpack::type_error(); } |  | ||||||
|         v = msgpack::type::ext_ref(o.via.ext.ptr, o.via.ext.size + 1); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct pack<msgpack::type::ext_ref> { |  | ||||||
|     template <typename Stream> |  | ||||||
|     msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::ext_ref& v) const { |  | ||||||
|         // size limit has aleady been checked at ext_ref's constructor |  | ||||||
|         uint32_t size = v.size(); |  | ||||||
|         o.pack_ext(size, v.type()); |  | ||||||
|         o.pack_ext_body(v.data(), size); |  | ||||||
|         return o; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object<msgpack::type::ext_ref> { |  | ||||||
|     void operator()(msgpack::object& o, const msgpack::type::ext_ref& v) const { |  | ||||||
|         // size limit has aleady been checked at ext_ref's constructor |  | ||||||
|         uint32_t size = v.size(); |  | ||||||
|         o.type = msgpack::type::EXT; |  | ||||||
|         o.via.ext.ptr = v.m_ptr; |  | ||||||
|         o.via.ext.size = size; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct object_with_zone<msgpack::type::ext_ref> { |  | ||||||
|     void operator()(msgpack::object::with_zone& o, const msgpack::type::ext_ref& v) const { |  | ||||||
|         static_cast<msgpack::object&>(o) << v; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| } // namespace adaptor |  | ||||||
|  |  | ||||||
| /// @cond |  | ||||||
| } // MSGPACK_API_VERSION_NAMESPACE(v1) |  | ||||||
| /// @endcond |  | ||||||
|  |  | ||||||
| } // namespace msgpack |  | ||||||
|  |  | ||||||
| #endif // MSGPACK_TYPE_EXT_HPP |  | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								include/msgpack/adaptor/ext_decl.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/msgpack/adaptor/ext_decl.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // | ||||||
|  | // MessagePack for C++ static resolution routine | ||||||
|  | // | ||||||
|  | // Copyright (C) 2016 KONDO Takatoshi | ||||||
|  | // | ||||||
|  | //    Distributed under the Boost Software License, Version 1.0. | ||||||
|  | //    (See accompanying file LICENSE_1_0.txt or copy at | ||||||
|  | //    http://www.boost.org/LICENSE_1_0.txt) | ||||||
|  | // | ||||||
|  | #ifndef MSGPACK_TYPE_EXT_DECL_HPP | ||||||
|  | #define MSGPACK_TYPE_EXT_DECL_HPP | ||||||
|  |  | ||||||
|  | #include "msgpack/v1/adaptor/ext_decl.hpp" | ||||||
|  | #include "msgpack/v2/adaptor/ext_decl.hpp" | ||||||
|  |  | ||||||
|  | #endif // MSGPACK_TYPE_EXT_DECL_HPP | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user