mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-24 09:12:30 +02:00
Compare commits
212 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63971da5a4 | ||
|
|
8a17e7f647 | ||
|
|
69607f4117 | ||
|
|
e5948a3450 | ||
|
|
3fc061b5fd | ||
|
|
2b38389f68 | ||
|
|
9e4dfb2484 | ||
|
|
356a5ea42d | ||
|
|
93142323f0 | ||
|
|
3352b2f029 | ||
|
|
364658ea99 | ||
|
|
50088365df | ||
|
|
d640395765 | ||
|
|
be0f8c280a | ||
|
|
9b156823ff | ||
|
|
dc2e1a4ead | ||
|
|
96f145812f | ||
|
|
33de24239a | ||
|
|
d17c70cbb0 | ||
|
|
88ab7b6349 | ||
|
|
df5f84d49d | ||
|
|
0609347d82 | ||
|
|
61eb4b1f6e | ||
|
|
9ee1168cc4 | ||
|
|
95e0fc5cef | ||
|
|
a0b7e7cc27 | ||
|
|
92822996e2 | ||
|
|
e9eac32238 | ||
|
|
c61446b988 | ||
|
|
294aa52c3a | ||
|
|
90f7b9c732 | ||
|
|
720c18bcf8 | ||
|
|
23a040f2e5 | ||
|
|
cd9d6c5940 | ||
|
|
8cae20ffc4 | ||
|
|
1788d6ce01 | ||
|
|
722143c0de | ||
|
|
57b030a6dd | ||
|
|
9c0f629c68 | ||
|
|
018c6c819e | ||
|
|
8d3673e7ee | ||
|
|
871a796037 | ||
|
|
4e65bc35ed | ||
|
|
062864a6b7 | ||
|
|
767099a0eb | ||
|
|
1c810bcb74 | ||
|
|
0fafa7a4b3 | ||
|
|
c75009d513 | ||
|
|
a1ca382b2d | ||
|
|
8eadc04d37 | ||
|
|
849ba867d6 | ||
|
|
11f2f333c6 | ||
|
|
94ddf1ac5d | ||
|
|
5da1abb1ce | ||
|
|
efc27e8eb4 | ||
|
|
51dd7cbf22 | ||
|
|
866e73acc3 | ||
|
|
a1fc7863e9 | ||
|
|
12b5a6235a | ||
|
|
e50cc5d79f | ||
|
|
4501551267 | ||
|
|
e719cbbb7a | ||
|
|
5adea26044 | ||
|
|
4b2b3a18df | ||
|
|
8f8d1800bd | ||
|
|
091715671c | ||
|
|
41bff7b96d | ||
|
|
b13cb13efc | ||
|
|
38f946d2cf | ||
|
|
6007f4ea05 | ||
|
|
078eb3a436 | ||
|
|
22b6bb9f78 | ||
|
|
4dcd162879 | ||
|
|
cd54ba99fc | ||
|
|
d437961546 | ||
|
|
f1679a17a2 | ||
|
|
afc9666760 | ||
|
|
d4199b59f9 | ||
|
|
7e2076b799 | ||
|
|
41f27b5d62 | ||
|
|
d91c510d8c | ||
|
|
ebb7c05bdc | ||
|
|
78b3e8adad | ||
|
|
3dc0e83513 | ||
|
|
298c97ec08 | ||
|
|
0f0598a6b9 | ||
|
|
fee4faa82f | ||
|
|
e182b06816 | ||
|
|
f9a16ad690 | ||
|
|
2034427cfd | ||
|
|
f986370634 | ||
|
|
db588909b9 | ||
|
|
7e6a498c14 | ||
|
|
9650def29a | ||
|
|
2a7d9977b1 | ||
|
|
a746afa7cc | ||
|
|
87f0da1ff1 | ||
|
|
14ec30038b | ||
|
|
09722fe540 | ||
|
|
85b01d28da | ||
|
|
763c2613df | ||
|
|
98c285c679 | ||
|
|
2164723c86 | ||
|
|
5cc712ceeb | ||
|
|
840101640b | ||
|
|
60e737f622 | ||
|
|
4cc1087124 | ||
|
|
b750b17598 | ||
|
|
5f1d5e8722 | ||
|
|
1b13523c7f | ||
|
|
a35fe57737 | ||
|
|
b8d357c2ad | ||
|
|
4f1e47aa78 | ||
|
|
7a131db2a0 | ||
|
|
756d02f8c0 | ||
|
|
d3450c1fce | ||
|
|
fa7f840427 | ||
|
|
e25ecc5287 | ||
|
|
f1504d851a | ||
|
|
1a97e761fb | ||
|
|
6771302f62 | ||
|
|
188c0a9a6b | ||
|
|
62537967fe | ||
|
|
42df06dd3d | ||
|
|
ab438ac9b9 | ||
|
|
2216fda5ce | ||
|
|
9b655faa64 | ||
|
|
a37e7232c7 | ||
|
|
b559187a7e | ||
|
|
9e7564c9d7 | ||
|
|
584bd8575f | ||
|
|
777e5f13f3 | ||
|
|
6131e3d747 | ||
|
|
e0a2c2a4bf | ||
|
|
d26e68e3bb | ||
|
|
57ba93a2b2 | ||
|
|
34a42415be | ||
|
|
1a6f826f0f | ||
|
|
22e428b104 | ||
|
|
89f117fcd9 | ||
|
|
9a50cc4345 | ||
|
|
addf52e9f0 | ||
|
|
45b57c292c | ||
|
|
860a5ae06e | ||
|
|
55d09e6c30 | ||
|
|
32c42d2f4c | ||
|
|
1cfee8c347 | ||
|
|
2893c799bf | ||
|
|
b4e50d54a0 | ||
|
|
d6c5682ef5 | ||
|
|
de721af166 | ||
|
|
5f73d3f19f | ||
|
|
846016b8b7 | ||
|
|
b225f15f29 | ||
|
|
b1481b33f8 | ||
|
|
c230ff7ab8 | ||
|
|
6edf10cecd | ||
|
|
d88d6c34b9 | ||
|
|
ff14be8fdb | ||
|
|
f75da23e1d | ||
|
|
17900625d0 | ||
|
|
5722ab6b51 | ||
|
|
072f0cd183 | ||
|
|
4af6d4ddc8 | ||
|
|
7359720403 | ||
|
|
9cb2c91d58 | ||
|
|
9e18ac5d2d | ||
|
|
e18f5b2d52 | ||
|
|
e979f04d75 | ||
|
|
5002f2cf6a | ||
|
|
b6018f3d57 | ||
|
|
aee537099d | ||
|
|
e37f14fd6a | ||
|
|
432c9cc542 | ||
|
|
9d4da1ad2e | ||
|
|
9725bac5c4 | ||
|
|
68e270b029 | ||
|
|
bf859f234e | ||
|
|
70fbae3c5f | ||
|
|
7cd77292fc | ||
|
|
e8e3052d1a | ||
|
|
eb96312b41 | ||
|
|
ab359b259f | ||
|
|
83ee2c82df | ||
|
|
0bfbd8dcbd | ||
|
|
a112ebb4df | ||
|
|
993d007c4b | ||
|
|
92a7f3f794 | ||
|
|
2919033f3c | ||
|
|
cb9114e31c | ||
|
|
2f9912a012 | ||
|
|
fc10a3e486 | ||
|
|
dcdc51ce30 | ||
|
|
ef09252dff | ||
|
|
e3aa02b6af | ||
|
|
d3e6f017be | ||
|
|
721700bfe5 | ||
|
|
a277ea7c64 | ||
|
|
285ccfeeea | ||
|
|
232b8039a0 | ||
|
|
10a315e00e | ||
|
|
904dd65965 | ||
|
|
dff7af2075 | ||
|
|
ed91c18af8 | ||
|
|
616b1d8fb0 | ||
|
|
ce98964348 | ||
|
|
07a509a53a | ||
|
|
35483b95ae | ||
|
|
a2c8154960 | ||
|
|
e8d3c8d6c5 | ||
|
|
ae5734e8d1 | ||
|
|
1911513acb |
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[submodule "external/boost/predef"]
|
||||||
|
path = external/boost/predef
|
||||||
|
url = https://github.com/boostorg/predef.git
|
||||||
|
[submodule "external/boost/preprocessor"]
|
||||||
|
path = external/boost/preprocessor
|
||||||
|
url = https://github.com/boostorg/preprocessor.git
|
||||||
101
.travis.yml
101
.travis.yml
@@ -1,34 +1,91 @@
|
|||||||
language: cpp
|
language: cpp
|
||||||
|
os:
|
||||||
|
- linux
|
||||||
|
- osx
|
||||||
cache:
|
cache:
|
||||||
- apt
|
- apt
|
||||||
compiler:
|
compiler:
|
||||||
- clang
|
- clang
|
||||||
- gcc
|
- gcc
|
||||||
|
os:
|
||||||
|
- osx
|
||||||
|
- linux
|
||||||
before_install:
|
before_install:
|
||||||
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
|
||||||
- sudo add-apt-repository -y ppa:h-rayflood/llvm
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:h-rayflood/llvm-upper; fi
|
||||||
- sudo apt-get update -qq
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi
|
||||||
- sudo apt-get update
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi
|
||||||
- sudo apt-get install valgrind
|
|
||||||
install:
|
install:
|
||||||
- sudo apt-get install -qq gcc-4.8-multilib g++-4.8-multilib
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-4.8-multilib g++-4.8-multilib; fi
|
||||||
- sudo apt-get install --allow-unauthenticated -qq clang-3.4
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.6; fi
|
||||||
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90; fi
|
||||||
- sudo apt-get install -y lib32gcc1
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 90; fi
|
||||||
- sudo apt-get install -y libc6-i386
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32gcc1; fi
|
||||||
- sudo apt-get install -y lib32z1-dev
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-i386; fi
|
||||||
- sudo apt-get install -y lib32stdc++6
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32z1-dev; fi
|
||||||
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y lib32stdc++6; fi
|
||||||
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y bzip2; fi
|
||||||
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -y libc6-dbg; fi
|
||||||
- wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
|
- wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
|
||||||
- unzip 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 ..
|
- wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2 && tar xjf valgrind-3.10.1.tar.bz2 && cd valgrind-3.10.1 && ./configure && make && sudo make install && cd ..
|
||||||
|
|
||||||
|
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew unlink boost; fi
|
||||||
|
- if [ "$BOOST" == "boost" ]; then wget http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.zip && unzip -q boost_1_58_0.zip && cd boost_1_58_0 && ./bootstrap.sh && ./b2 --with-timer --with-chrono address-model="$ARCH" > /dev/null && sudo ./b2 --with-timer --with-chrono address-model="$ARCH" install > /dev/null && cd ..; fi
|
||||||
|
|
||||||
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && g++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && g++ -m32 src/gtest-all.cc -I. -Iinclude -c && g++ -m32 src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mkdir /usr/local/lib32 && sudo mv *.a /usr/local/lib32 && cd ..; fi
|
||||||
|
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then unzip -q gtest-1.7.0.zip && cd gtest-1.7.0 && sudo cp -r include/gtest /usr/local/include && clang++ src/gtest-all.cc -I. -Iinclude -c && g++ src/gtest_main.cc -I. -Iinclude -c && ar -rv libgtest.a gtest-all.o && ar -rv libgtest_main.a gtest_main.o && sudo mv *.a /usr/local/lib && cd ..; fi
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"
|
- ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost"
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32"
|
- ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC=""
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"
|
- ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="boost" BOOST_INC="/usr/local/boost"
|
||||||
- ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32"
|
- ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" SHARED="OFF"
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib"
|
- ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC=""
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32"
|
- ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost"
|
||||||
- ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib"
|
- 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"
|
- 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:
|
||||||
|
exclude:
|
||||||
|
- os: osx
|
||||||
|
compiler: gcc
|
||||||
|
- os: osx
|
||||||
|
env: ACTION="ci/build_autotools.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC=""
|
||||||
|
- os: osx
|
||||||
|
env: ACTION="ci/build_cmake.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="" BOOST_INC="" SHARED="OFF"
|
||||||
|
- os: osx
|
||||||
|
env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost"
|
||||||
|
- os: osx
|
||||||
|
env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF"
|
||||||
|
|
||||||
|
- 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
|
||||||
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC=""
|
||||||
|
- os: linux
|
||||||
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_autotools.sh" VERSION="cpp11" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost"
|
||||||
|
- os: linux
|
||||||
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="64" LIBPATH="/usr/local/lib" BOOST="" BOOST_INC=""
|
||||||
|
- os: linux
|
||||||
|
compiler: clang
|
||||||
|
env: ACTION="ci/build_cmake.sh" VERSION="cpp03" ARCH="32" LIBPATH="/usr/local/lib32" BOOST="boost" BOOST_INC="/usr/local/boost" SHARED="OFF"
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- git clean -xdf && CMAKE_LIBRARY_PATH=${LIBPATH} ${ACTION} ${VERSION} ${ARCH}
|
- git clean -xdf && CMAKE_LIBRARY_PATH=${LIBPATH} ${ACTION} ${VERSION} ${ARCH} ${BOOST} ${BOOST_INC}
|
||||||
|
|||||||
61
CHANGELOG.md
61
CHANGELOG.md
@@ -1,4 +1,62 @@
|
|||||||
2015-3-22 version 1.0.1:
|
2015-09-04 version 1.2.0
|
||||||
|
<< breaking change >>
|
||||||
|
* Change std::vector<unsigned char> and std::array<unsigned char>
|
||||||
|
mapped to BIN instead of ARRAY (#243)
|
||||||
|
* Remove redundant copy (#285)
|
||||||
|
|
||||||
|
* Add array_ref to map to ARRAY (#243)
|
||||||
|
* Add variant type and adaptor (#349)
|
||||||
|
* Add object::convert_if_not_nil() (#357)
|
||||||
|
* Fix invalid offset update (#354)
|
||||||
|
* Add C++11 support on MSVC2015(#339, #347)
|
||||||
|
* Fix and Improve build system (#346, #350, #361, #363)
|
||||||
|
* Import Boost.Preprocessor as a part of msgpack-c (#312)
|
||||||
|
* Fix OSX with libc++ specific errors (#334, #362)
|
||||||
|
* Add customized containers support (#330)
|
||||||
|
* Add std::unique_ptr and std::shared_ptr support (#329)
|
||||||
|
* Add missing install files (#328)
|
||||||
|
* Add shared/static library switching option (#316)
|
||||||
|
* Improve no throw description on C++11 (#313)
|
||||||
|
* Import Boost.Predef as a part of msgpack-c (#312)
|
||||||
|
* Add map based serialize support (#306)
|
||||||
|
* Add Boost.Fusion support (#305)
|
||||||
|
* Add v4 format RAW support (#304)
|
||||||
|
* Fix zbuffer with empty string problem (#303)
|
||||||
|
* Add non default constructible class support (#302, #324, #327, #331, #332, #345)
|
||||||
|
* Add inline keyword to function (template) (#299)
|
||||||
|
* Add EXT type supporting classes (#292, #308)
|
||||||
|
* Fix raw_ref != comparison (#290)
|
||||||
|
* Add object deep copy (#288)
|
||||||
|
* Remove some warnings (#284, #322, #323, #335)
|
||||||
|
* Improve compiler version checking (#283)
|
||||||
|
* Add return value to object::convert() (#282)
|
||||||
|
* Improve move semantic support in C++11 (#279, #353)
|
||||||
|
* Add Boost.StringRef support (#278)
|
||||||
|
* Improve CI environment (#276, #294, #338)
|
||||||
|
* Add converting to JSON (#274, #301)
|
||||||
|
* Fix iOS specific problem (#270)
|
||||||
|
* Improve doxtgen document generation (#269)
|
||||||
|
* Add Boost.Optional support (#268)
|
||||||
|
* Fix msvc specific problem (#267, #295)
|
||||||
|
* Add base class serialization. (#265, #277)
|
||||||
|
* Add and improve examples. (#264, #310, #311, #341, #342, #344)
|
||||||
|
* Fix wiki URL. (#263)
|
||||||
|
2015-04-03 version 1.1.0
|
||||||
|
<< breaking change >>
|
||||||
|
* Remove msgpack_fwd.hpp
|
||||||
|
* Improve user types adaptation mechanism (#262)
|
||||||
|
Since version 1.0.0, users need to obey the correct include order.
|
||||||
|
However, it is very difficult to maintain the correct order in big
|
||||||
|
projects. version 1.1.0 removed this order. Users don't need to
|
||||||
|
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
|
||||||
|
|
||||||
|
* Fix vector<bool> size check (#251)
|
||||||
|
* Fix inttypes.h inclusion on MSVC (#257)
|
||||||
|
* Support documents generation by Doxygen (#259)
|
||||||
|
* Remove C99 style variable declaration (#253)
|
||||||
|
* Improve documents (https://github.com/msgpack/msgpack-c/wiki)
|
||||||
|
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)
|
||||||
@@ -101,4 +159,3 @@
|
|||||||
* Add operator==(object, const T&)
|
* Add operator==(object, const T&)
|
||||||
* MSGPACK_DEFINE macro defines msgpack_object(object* obj, zone* z)
|
* MSGPACK_DEFINE macro defines msgpack_object(object* obj, zone* z)
|
||||||
* C++ programs doesn't need to link "msgpackc" library.
|
* C++ programs doesn't need to link "msgpackc" library.
|
||||||
|
|
||||||
|
|||||||
194
CMakeLists.txt
194
CMakeLists.txt
@@ -17,6 +17,19 @@ SET (includedir "\${prefix}/include")
|
|||||||
|
|
||||||
OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF)
|
OPTION (MSGPACK_CXX11 "Using c++11 compiler" OFF)
|
||||||
OPTION (MSGPACK_32BIT "32bit compile" OFF)
|
OPTION (MSGPACK_32BIT "32bit compile" OFF)
|
||||||
|
OPTION (MSGPACK_BOOST "Using boost libraries" OFF)
|
||||||
|
|
||||||
|
IF (APPLE)
|
||||||
|
SET(CMAKE_MACOSX_RPATH ON)
|
||||||
|
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||||
|
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
||||||
|
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
|
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
|
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
|
||||||
|
IF ("${isSystemDir}" STREQUAL "-1")
|
||||||
|
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_CXX11)
|
IF (MSGPACK_CXX11)
|
||||||
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
@@ -24,7 +37,19 @@ IF (MSGPACK_CXX11)
|
|||||||
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 "-std=c++11 ${CMAKE_CXX_FLAGS}")
|
||||||
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
MESSAGE ( FATAL_ERROR "MSVC doesn't support C++11 yet.")
|
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")
|
||||||
|
SET (CMAKE_CXX_FLAGS "-std=c++03 ${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSEIF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET (CMAKE_CXX_FLAGS "-std=c++03 ${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 ()
|
||||||
|
|
||||||
@@ -40,14 +65,47 @@ IF (MSGPACK_32BIT)
|
|||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (MSGPACK_BOOST)
|
||||||
|
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_STATIC_RUNTIME OFF)
|
||||||
|
FIND_PACKAGE (Boost COMPONENTS chrono timer system)
|
||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
${MSGPACK_BOOST_DIR}
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
FILE (GLOB_RECURSE PREDEF_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/*.h)
|
||||||
|
FOREACH (F ${PREDEF_FILES})
|
||||||
|
SET(M "Converting ${F}")
|
||||||
|
MESSAGE(STATUS ${M})
|
||||||
|
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/predef/include/boost/${F} CONTENT)
|
||||||
|
STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT})
|
||||||
|
STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT})
|
||||||
|
FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT})
|
||||||
|
ENDFOREACH ()
|
||||||
|
|
||||||
|
FILE (GLOB_RECURSE PREPROCESSOR_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/*.hpp)
|
||||||
|
FOREACH (F ${PREPROCESSOR_FILES})
|
||||||
|
SET(M "Converting ${F}")
|
||||||
|
MESSAGE(STATUS ${M})
|
||||||
|
FILE (READ ${CMAKE_CURRENT_SOURCE_DIR}/external/boost/preprocessor/include/boost/${F} CONTENT)
|
||||||
|
STRING(REPLACE "BOOST_" "MSGPACK_" CONTENT ${CONTENT})
|
||||||
|
STRING(REPLACE "boost/" "msgpack/" CONTENT ${CONTENT})
|
||||||
|
FILE (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/msgpack/${F} ${CONTENT})
|
||||||
|
ENDFOREACH ()
|
||||||
|
|
||||||
FIND_PACKAGE (GTest)
|
FIND_PACKAGE (GTest)
|
||||||
FIND_PACKAGE (ZLIB)
|
FIND_PACKAGE (ZLIB)
|
||||||
FIND_PACKAGE (Threads)
|
FIND_PACKAGE (Threads)
|
||||||
IF (GTEST_FOUND AND ZLIB_FOUND AND THREADS_FOUND)
|
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)
|
||||||
|
|
||||||
INCLUDE (CheckCXXSourceCompiles)
|
INCLUDE (CheckCXXSourceCompiles)
|
||||||
CHECK_CXX_SOURCE_COMPILES ("
|
CHECK_CXX_SOURCE_COMPILES ("
|
||||||
@@ -84,8 +142,10 @@ LIST (APPEND msgpack_HEADERS
|
|||||||
include/msgpack/util.h
|
include/msgpack/util.h
|
||||||
include/msgpack/sysdep.h
|
include/msgpack/sysdep.h
|
||||||
include/msgpack/gcc_atomic.h
|
include/msgpack/gcc_atomic.h
|
||||||
|
include/msgpack.h
|
||||||
include/msgpack/sbuffer.h
|
include/msgpack/sbuffer.h
|
||||||
include/msgpack/version.h
|
include/msgpack/version.h
|
||||||
|
include/msgpack/version_master.h
|
||||||
include/msgpack/vrefbuffer.h
|
include/msgpack/vrefbuffer.h
|
||||||
include/msgpack/zbuffer.h
|
include/msgpack/zbuffer.h
|
||||||
include/msgpack/fbuffer.h
|
include/msgpack/fbuffer.h
|
||||||
@@ -95,72 +155,65 @@ LIST (APPEND msgpack_HEADERS
|
|||||||
include/msgpack/zone.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)
|
IF (MSGPACK_ENABLE_CXX)
|
||||||
LIST (APPEND msgpack_HEADERS
|
LIST (APPEND msgpack_HEADERS
|
||||||
include/msgpack.hpp
|
include/msgpack.hpp
|
||||||
include/msgpack_fwd.hpp
|
include/msgpack/adaptor/adaptor_base.hpp
|
||||||
|
include/msgpack/adaptor/array_ref.hpp
|
||||||
include/msgpack/adaptor/bool.hpp
|
include/msgpack/adaptor/bool.hpp
|
||||||
include/msgpack/adaptor/bool_fwd.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/char_ptr.hpp
|
||||||
include/msgpack/adaptor/char_ptr_fwd.hpp
|
|
||||||
include/msgpack/adaptor/check_container_size.hpp
|
include/msgpack/adaptor/check_container_size.hpp
|
||||||
include/msgpack/adaptor/cpp11/array.hpp
|
include/msgpack/adaptor/cpp11/array.hpp
|
||||||
include/msgpack/adaptor/cpp11/array_fwd.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/array_char.hpp
|
include/msgpack/adaptor/cpp11/array_char.hpp
|
||||||
include/msgpack/adaptor/cpp11/array_char_fwd.hpp
|
include/msgpack/adaptor/cpp11/array_unsigned_char.hpp
|
||||||
include/msgpack/adaptor/cpp11/forward_list.hpp
|
include/msgpack/adaptor/cpp11/forward_list.hpp
|
||||||
include/msgpack/adaptor/cpp11/forward_list_fwd.hpp
|
include/msgpack/adaptor/cpp11/shared_ptr.hpp
|
||||||
include/msgpack/adaptor/cpp11/tuple.hpp
|
include/msgpack/adaptor/cpp11/tuple.hpp
|
||||||
include/msgpack/adaptor/cpp11/tuple_fwd.hpp
|
include/msgpack/adaptor/cpp11/unique_ptr.hpp
|
||||||
include/msgpack/adaptor/cpp11/unordered_map.hpp
|
include/msgpack/adaptor/cpp11/unordered_map.hpp
|
||||||
include/msgpack/adaptor/cpp11/unordered_map_fwd.hpp
|
|
||||||
include/msgpack/adaptor/cpp11/unordered_set.hpp
|
include/msgpack/adaptor/cpp11/unordered_set.hpp
|
||||||
include/msgpack/adaptor/cpp11/unordered_set_fwd.hpp
|
|
||||||
include/msgpack/adaptor/define.hpp
|
include/msgpack/adaptor/define.hpp
|
||||||
include/msgpack/adaptor/deque.hpp
|
include/msgpack/adaptor/deque.hpp
|
||||||
include/msgpack/adaptor/deque_fwd.hpp
|
include/msgpack/adaptor/detail/cpp03_define_array.hpp
|
||||||
include/msgpack/adaptor/detail/cpp03_define.hpp
|
include/msgpack/adaptor/detail/cpp03_define_map.hpp
|
||||||
include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp
|
include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp
|
||||||
include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp
|
include/msgpack/adaptor/detail/cpp11_define_array.hpp
|
||||||
include/msgpack/adaptor/detail/cpp11_define.hpp
|
include/msgpack/adaptor/detail/cpp11_define_map.hpp
|
||||||
include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp
|
include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp
|
||||||
include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp
|
include/msgpack/adaptor/ext.hpp
|
||||||
include/msgpack/adaptor/fixint.hpp
|
include/msgpack/adaptor/fixint.hpp
|
||||||
include/msgpack/adaptor/fixint_fwd.hpp
|
|
||||||
include/msgpack/adaptor/float.hpp
|
include/msgpack/adaptor/float.hpp
|
||||||
include/msgpack/adaptor/float_fwd.hpp
|
|
||||||
include/msgpack/adaptor/int.hpp
|
include/msgpack/adaptor/int.hpp
|
||||||
include/msgpack/adaptor/int_fwd.hpp
|
|
||||||
include/msgpack/adaptor/list.hpp
|
include/msgpack/adaptor/list.hpp
|
||||||
include/msgpack/adaptor/list_fwd.hpp
|
|
||||||
include/msgpack/adaptor/map.hpp
|
include/msgpack/adaptor/map.hpp
|
||||||
include/msgpack/adaptor/map_fwd.hpp
|
|
||||||
include/msgpack/adaptor/msgpack_tuple.hpp
|
include/msgpack/adaptor/msgpack_tuple.hpp
|
||||||
include/msgpack/adaptor/msgpack_tuple_fwd.hpp
|
|
||||||
include/msgpack/adaptor/nil.hpp
|
include/msgpack/adaptor/nil.hpp
|
||||||
include/msgpack/adaptor/nil_fwd.hpp
|
|
||||||
include/msgpack/adaptor/pair.hpp
|
include/msgpack/adaptor/pair.hpp
|
||||||
include/msgpack/adaptor/pair_fwd.hpp
|
|
||||||
include/msgpack/adaptor/raw.hpp
|
include/msgpack/adaptor/raw.hpp
|
||||||
include/msgpack/adaptor/raw_fwd.hpp
|
include/msgpack/adaptor/v4raw.hpp
|
||||||
include/msgpack/adaptor/set.hpp
|
include/msgpack/adaptor/set.hpp
|
||||||
include/msgpack/adaptor/set_fwd.hpp
|
|
||||||
include/msgpack/adaptor/string.hpp
|
include/msgpack/adaptor/string.hpp
|
||||||
include/msgpack/adaptor/string_fwd.hpp
|
|
||||||
include/msgpack/adaptor/tr1/unordered_map.hpp
|
include/msgpack/adaptor/tr1/unordered_map.hpp
|
||||||
include/msgpack/adaptor/tr1/unordered_map_fwd.hpp
|
|
||||||
include/msgpack/adaptor/tr1/unordered_set.hpp
|
include/msgpack/adaptor/tr1/unordered_set.hpp
|
||||||
include/msgpack/adaptor/tr1/unordered_set_fwd.hpp
|
|
||||||
include/msgpack/adaptor/vector.hpp
|
include/msgpack/adaptor/vector.hpp
|
||||||
include/msgpack/adaptor/vector_fwd.hpp
|
|
||||||
include/msgpack/adaptor/vector_bool.hpp
|
include/msgpack/adaptor/vector_bool.hpp
|
||||||
include/msgpack/adaptor/vector_bool_fwd.hpp
|
|
||||||
include/msgpack/adaptor/vector_char.hpp
|
include/msgpack/adaptor/vector_char.hpp
|
||||||
include/msgpack/adaptor/vector_char_fwd.hpp
|
include/msgpack/adaptor/vector_unsigned_char.hpp
|
||||||
include/msgpack/cpp_config.hpp
|
include/msgpack/cpp_config.hpp
|
||||||
include/msgpack/detail/cpp03_zone.hpp
|
include/msgpack/detail/cpp03_zone.hpp
|
||||||
include/msgpack/detail/cpp11_zone.hpp
|
include/msgpack/detail/cpp11_zone.hpp
|
||||||
include/msgpack/fbuffer.hpp
|
include/msgpack/fbuffer.hpp
|
||||||
|
include/msgpack/iterator.hpp
|
||||||
|
include/msgpack/meta.hpp
|
||||||
include/msgpack/object.hpp
|
include/msgpack/object.hpp
|
||||||
include/msgpack/object_fwd.hpp
|
include/msgpack/object_fwd.hpp
|
||||||
include/msgpack/pack.hpp
|
include/msgpack/pack.hpp
|
||||||
@@ -173,6 +226,10 @@ IF (MSGPACK_ENABLE_CXX)
|
|||||||
include/msgpack/zbuffer.hpp
|
include/msgpack/zbuffer.hpp
|
||||||
include/msgpack/zone.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 ()
|
ENDIF ()
|
||||||
|
|
||||||
EXECUTE_PROCESS (
|
EXECUTE_PROCESS (
|
||||||
@@ -191,10 +248,12 @@ INCLUDE_DIRECTORIES (
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}/include/
|
${CMAKE_CURRENT_BINARY_DIR}/include/
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY (msgpack SHARED
|
IF (MSGPACK_ENABLE_SHARED)
|
||||||
${msgpack_SOURCES}
|
ADD_LIBRARY (msgpack SHARED
|
||||||
${msgpack_HEADERS}
|
${msgpack_SOURCES}
|
||||||
)
|
${msgpack_HEADERS}
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
ADD_LIBRARY (msgpack-static STATIC
|
ADD_LIBRARY (msgpack-static STATIC
|
||||||
${msgpack_SOURCES}
|
${msgpack_SOURCES}
|
||||||
@@ -202,26 +261,31 @@ ADD_LIBRARY (msgpack-static STATIC
|
|||||||
)
|
)
|
||||||
|
|
||||||
SET_TARGET_PROPERTIES (msgpack-static PROPERTIES OUTPUT_NAME "msgpack")
|
SET_TARGET_PROPERTIES (msgpack-static PROPERTIES OUTPUT_NAME "msgpack")
|
||||||
SET_TARGET_PROPERTIES (msgpack PROPERTIES IMPORT_SUFFIX "_import.lib")
|
IF (MSGPACK_ENABLE_SHARED)
|
||||||
SET_TARGET_PROPERTIES (msgpack PROPERTIES SOVERSION 3 VERSION 4.0.0)
|
SET_TARGET_PROPERTIES (msgpack PROPERTIES IMPORT_SUFFIX "_import.lib")
|
||||||
|
SET_TARGET_PROPERTIES (msgpack PROPERTIES SOVERSION 3 VERSION 4.0.0)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
IF (MSGPACK_BUILD_TESTS)
|
IF (MSGPACK_BUILD_TESTS)
|
||||||
ENABLE_TESTING ()
|
ENABLE_TESTING ()
|
||||||
SET(CTEST_MEMORYCHECK_COMMAND "/usr/bin/valgrind")
|
# MEMORYCHECK_COMMAND_OPTIONS needs to place prior to CTEST_MEMORYCHECK_COMMAND
|
||||||
|
SET (MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --show-leak-kinds=definite,possible --error-exitcode=1")
|
||||||
|
FIND_PROGRAM(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
|
||||||
INCLUDE(Dart)
|
INCLUDE(Dart)
|
||||||
SET(MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --error-exitcode=1")
|
|
||||||
ADD_SUBDIRECTORY (test)
|
ADD_SUBDIRECTORY (test)
|
||||||
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 msgpack APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -g -O3 -DPIC")
|
IF (MSGPACK_ENABLE_SHARED)
|
||||||
SET_PROPERTY (TARGET msgpack-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -g -O3" )
|
SET_PROPERTY (TARGET msgpack APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Wno-mismatched-tags -Werror -g -O3 -DPIC")
|
||||||
|
ENDIF ()
|
||||||
|
SET_PROPERTY (TARGET msgpack-static APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Wno-mismatched-tags -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]")
|
||||||
STRING(REGEX REPLACE "/W[0-4]" "/W3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
ELSE ()
|
ELSE ()
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
@@ -233,27 +297,59 @@ IF (NOT DEFINED CMAKE_INSTALL_LIBDIR)
|
|||||||
SET(CMAKE_INSTALL_LIBDIR lib)
|
SET(CMAKE_INSTALL_LIBDIR lib)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
INSTALL (TARGETS msgpack msgpack-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
IF (MSGPACK_BUILD_EXAMPLES)
|
||||||
|
ADD_SUBDIRECTORY (example)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (MSGPACK_ENABLE_SHARED)
|
||||||
|
SET (MSGPACK_INSTALLTARGETS msgpack msgpack-static)
|
||||||
|
ELSE()
|
||||||
|
SET (MSGPACK_INSTALLTARGETS msgpack-static)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
INSTALL (TARGETS ${MSGPACK_INSTALLTARGETS} DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX})
|
INSTALL (DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
IF (NOT MSVC)
|
||||||
|
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/msgpack.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
# Doxygen
|
# Doxygen
|
||||||
FIND_PACKAGE (Doxygen)
|
FIND_PACKAGE (Doxygen)
|
||||||
IF (DOXYGEN_FOUND)
|
IF (DOXYGEN_FOUND)
|
||||||
ADD_CUSTOM_TARGET (
|
LIST (APPEND Doxyfile_c_CONTENT
|
||||||
doxygen_c
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.h" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.h" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_c" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_c" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "INPUT = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
|
)
|
||||||
|
IF (DOXYGEN_DOT_FOUND)
|
||||||
|
LIST (APPEND Doxyfile_c_CONTENT
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "HAVE_DOT = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
ADD_CUSTOM_TARGET (
|
||||||
|
doxygen_c
|
||||||
|
${Doxyfile_c_CONTENT}
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_c
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
ADD_CUSTOM_TARGET (
|
LIST (APPEND Doxyfile_cpp_CONTENT
|
||||||
doxygen_cpp
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.hpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.hpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_cpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc_cpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "INPUT = ${CMAKE_CURRENT_SOURCE_DIR}/include" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "EXTRACT_ALL = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
|
)
|
||||||
|
IF (DOXYGEN_DOT_FOUND)
|
||||||
|
LIST (APPEND Doxyfile_cpp_CONTENT
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E echo "HAVE_DOT = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
ADD_CUSTOM_TARGET (
|
||||||
|
doxygen_cpp
|
||||||
|
${Doxyfile_cpp_CONTENT}
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C++\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = \"MessagePack for C++\"" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_cpp
|
||||||
VERBATIM
|
VERBATIM
|
||||||
|
|||||||
@@ -5,11 +5,10 @@ DOC_FILES = \
|
|||||||
LICENSE \
|
LICENSE \
|
||||||
NOTICE \
|
NOTICE \
|
||||||
msgpack_vc8.vcproj \
|
msgpack_vc8.vcproj \
|
||||||
msgpack_vc8.sln \
|
msgpack_vc8.sln
|
||||||
msgpack_vc.postbuild.bat
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
$(DOC_FILES) CMakeLists.txt test/CMakeLists.txt
|
$(DOC_FILES) CMakeLists.txt test/CMakeLists.txt example
|
||||||
|
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
pkgconfig_DATA = msgpack.pc
|
pkgconfig_DATA = msgpack.pc
|
||||||
@@ -18,4 +17,3 @@ doxygen:
|
|||||||
./preprocess clean
|
./preprocess clean
|
||||||
cd src && $(MAKE) doxygen
|
cd src && $(MAKE) doxygen
|
||||||
./preprocess
|
./preprocess
|
||||||
|
|
||||||
|
|||||||
36
NOTICE
Normal file
36
NOTICE
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
This product bundles Boost Predef, which is available under a
|
||||||
|
Boost Software License - Version 1.0. For details, see the following files
|
||||||
|
|
||||||
|
external/boost/predef
|
||||||
|
include/msgpack/predef.h
|
||||||
|
include/msgpack/predef/*
|
||||||
|
|
||||||
|
external/boost/preprocessor
|
||||||
|
include/msgpack/preprocessor.hpp
|
||||||
|
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.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
`msgpack` for C/C++
|
`msgpack` for C/C++
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Version 1.0.1 [](https://travis-ci.org/msgpack/msgpack-c)
|
Version 1.2.0 [](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.
|
||||||
|
|
||||||
@@ -201,7 +201,7 @@ the binaries:' text box.
|
|||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
You can get addtional information on the
|
You can get addtional information on the
|
||||||
[wiki](https://github.com/msgpack/msgpack-c/wiki/).
|
[wiki](https://github.com/msgpack/msgpack-c/wiki).
|
||||||
|
|
||||||
Contributing
|
Contributing
|
||||||
------------
|
------------
|
||||||
|
|||||||
42
appveyor.yml
Normal file
42
appveyor.yml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
version: 1.1.0.{build}
|
||||||
|
before_build:
|
||||||
|
- appveyor DownloadFile http://googletest.googlecode.com/files/gtest-1.7.0.zip -FileName gtest-1.7.0.zip
|
||||||
|
- 7z x gtest-1.7.0.zip > NUL
|
||||||
|
- cd gtest-1.7.0
|
||||||
|
- md build
|
||||||
|
- cd build
|
||||||
|
- cmake -DBUILD_SHARED_LIBS=ON ..
|
||||||
|
- cmake --build . --config Release
|
||||||
|
- cd ..
|
||||||
|
- cd ..
|
||||||
|
- appveyor DownloadFile http://zlib.net/zlib-1.2.8.tar.gz -FileName zlib-1.2.8.tar.gz
|
||||||
|
- 7z x zlib-1.2.8.tar.gz > NUL
|
||||||
|
- 7z x zlib-1.2.8.tar > NUL
|
||||||
|
- cd zlib-1.2.8
|
||||||
|
- md build
|
||||||
|
- cd build
|
||||||
|
- cmake ..
|
||||||
|
- cmake --build . --config Release
|
||||||
|
- copy zconf.h ..
|
||||||
|
- 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
|
||||||
|
- 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 --build . --config Release
|
||||||
|
|
||||||
|
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
|
||||||
|
- ctest -V
|
||||||
@@ -9,21 +9,27 @@ fi
|
|||||||
|
|
||||||
if [ $1 = "cpp11" ]
|
if [ $1 = "cpp11" ]
|
||||||
then
|
then
|
||||||
if [ $2 = "32" ]
|
cpp11="-std=c++11"
|
||||||
then
|
|
||||||
./configure CFLAGS="-m32" CXXFLAGS="-std=c++11 -m32"
|
|
||||||
else
|
|
||||||
./configure CXXFLAGS="-std=c++11"
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if [ $2 = "32" ]
|
cpp11=""
|
||||||
then
|
|
||||||
./configure CFLAGS="-m32" CXXFLAGS="-m32"
|
|
||||||
else
|
|
||||||
./configure
|
|
||||||
fi
|
|
||||||
fi
|
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=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]
|
if [ $ret -ne 0 ]
|
||||||
then
|
then
|
||||||
@@ -46,7 +52,7 @@ then
|
|||||||
exit $ret
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
make install DESTDIR=`pwd`/install
|
make install DESTDIR=`pwd`/build/install
|
||||||
|
|
||||||
ret=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]
|
if [ $ret -ne 0 ]
|
||||||
|
|||||||
@@ -18,21 +18,41 @@ fi
|
|||||||
|
|
||||||
if [ $1 = "cpp11" ]
|
if [ $1 = "cpp11" ]
|
||||||
then
|
then
|
||||||
if [ $2 = "32" ]
|
cpp11="-DMSGPACK_CXX11=ON"
|
||||||
then
|
|
||||||
cmake -DMSGPACK_CXX11=ON -DMSGPACK_32BIT=ON ..
|
|
||||||
else
|
|
||||||
cmake -DMSGPACK_CXX11=ON ..
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if [ $2 = "32" ]
|
cpp11=""
|
||||||
then
|
|
||||||
cmake -DMSGPACK_32BIT=ON ..
|
|
||||||
else
|
|
||||||
cmake ..
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $2 = "32" ]
|
||||||
|
then
|
||||||
|
bit32="-DMSGPACK_32BIT=ON"
|
||||||
|
else
|
||||||
|
bit32=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $3 = "boost" ]
|
||||||
|
then
|
||||||
|
boost="-DMSGPACK_BOOST=ON"
|
||||||
|
else
|
||||||
|
boost=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$4" != "" ]
|
||||||
|
then
|
||||||
|
boost_dir="-DMSGPACK_BOOST_DIR=$4"
|
||||||
|
else
|
||||||
|
boost_dir=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$5" = "OFF" ]
|
||||||
|
then
|
||||||
|
shared="-DMSGPACK_ENABLE_SHARED=OFF"
|
||||||
|
else
|
||||||
|
shared=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
cmake $cpp11 $bit32 $boost $boost_dir $shared ..
|
||||||
|
|
||||||
ret=$?
|
ret=$?
|
||||||
if [ $ret -ne 0 ]
|
if [ $ret -ne 0 ]
|
||||||
then
|
then
|
||||||
@@ -63,7 +83,7 @@ then
|
|||||||
exit $ret
|
exit $ret
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $2 != "32" ]
|
if [ "$2" != "32" ]
|
||||||
then
|
then
|
||||||
ctest -T memcheck | tee memcheck.log
|
ctest -T memcheck | tee memcheck.log
|
||||||
|
|
||||||
|
|||||||
100
configure.in
100
configure.in
@@ -3,10 +3,10 @@ AC_CONFIG_AUX_DIR(ac)
|
|||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
AC_CONFIG_HEADER(config.h)
|
AC_CONFIG_HEADER(config.h)
|
||||||
AC_SUBST(CFLAGS)
|
AC_SUBST(CFLAGS)
|
||||||
CFLAGS="-O3 -Wall $CFLAGS"
|
CFLAGS="-O3 -Wall -Wextra -Werror $CFLAGS"
|
||||||
|
|
||||||
AC_SUBST(CXXFLAGS)
|
AC_SUBST(CXXFLAGS)
|
||||||
CXXFLAGS="-O3 -Wall $CXXFLAGS"
|
CXXFLAGS="-O3 -Wall -Wextra -Wno-mismatched-tags -Werror $CXXFLAGS"
|
||||||
|
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
@@ -14,12 +14,12 @@ AC_PROG_CC
|
|||||||
|
|
||||||
AC_MSG_CHECKING([if C++ API is enabled])
|
AC_MSG_CHECKING([if C++ API is enabled])
|
||||||
AC_ARG_ENABLE(cxx,
|
AC_ARG_ENABLE(cxx,
|
||||||
AS_HELP_STRING([--disable-cxx],
|
AS_HELP_STRING([--disable-cxx],
|
||||||
[don't build C++ API]) ) #'
|
[don't build C++ API]) ) #'
|
||||||
AC_MSG_RESULT([$enable_cxx])
|
AC_MSG_RESULT([$enable_cxx])
|
||||||
if test "$enable_cxx" != "no"; then
|
if test "$enable_cxx" != "no"; then
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
AM_PROG_CC_C_O
|
AM_PROG_CC_C_O
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(ENABLE_CXX, test "$enable_cxx" != "no")
|
AM_CONDITIONAL(ENABLE_CXX, test "$enable_cxx" != "no")
|
||||||
|
|
||||||
@@ -30,56 +30,56 @@ AM_PROG_AS
|
|||||||
|
|
||||||
AC_MSG_CHECKING([if debug option is enabled])
|
AC_MSG_CHECKING([if debug option is enabled])
|
||||||
AC_ARG_ENABLE(debug,
|
AC_ARG_ENABLE(debug,
|
||||||
AS_HELP_STRING([--disable-debug],
|
AS_HELP_STRING([--disable-debug],
|
||||||
[disable assert macros and omit -g option]) )
|
[disable assert macros and omit -g option]) )
|
||||||
AC_MSG_RESULT([$enable_debug])
|
AC_MSG_RESULT([$enable_debug])
|
||||||
if test "$enable_debug" != "no"; then
|
if test "$enable_debug" != "no"; then
|
||||||
CXXFLAGS="$CXXFLAGS -g"
|
CXXFLAGS="$CXXFLAGS -g"
|
||||||
CFLAGS="$CFLAGS -g"
|
CFLAGS="$CFLAGS -g"
|
||||||
else
|
else
|
||||||
CXXFLAGS="$CXXFLAGS -DNDEBUG"
|
CXXFLAGS="$CXXFLAGS -DNDEBUG"
|
||||||
CFLAGS="$CFLAGS -DNDEBUG"
|
CFLAGS="$CFLAGS -DNDEBUG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([for __sync_* atomic operations], msgpack_cv_atomic_ops, [
|
AC_CACHE_CHECK([for __sync_* atomic operations], msgpack_cv_atomic_ops, [
|
||||||
AC_TRY_LINK([
|
AC_TRY_LINK([
|
||||||
int atomic_sub(int i) { return __sync_sub_and_fetch(&i, 1); }
|
int atomic_sub(int i) { return __sync_sub_and_fetch(&i, 1); }
|
||||||
int atomic_add(int i) { return __sync_add_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")
|
], [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"
|
|
||||||
])
|
])
|
||||||
|
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:
|
||||||
|
|
||||||
else
|
$ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686"
|
||||||
enable_gcc_cxx_atomic=yes
|
])
|
||||||
fi
|
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
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL(ENABLE_GCC_CXX_ATOMIC, test "$enable_gcc_cxx_atomic" = "yes")
|
AM_CONDITIONAL(ENABLE_GCC_CXX_ATOMIC, test "$enable_gcc_cxx_atomic" = "yes")
|
||||||
@@ -93,6 +93,6 @@ AC_SUBST(VERSION_REVISION, $revision)
|
|||||||
|
|
||||||
|
|
||||||
AC_OUTPUT([Makefile
|
AC_OUTPUT([Makefile
|
||||||
msgpack.pc
|
msgpack.pc
|
||||||
src/Makefile
|
src/Makefile
|
||||||
test/Makefile])
|
test/Makefile])
|
||||||
|
|||||||
@@ -15,73 +15,88 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP03_DEFINE_HPP
|
#ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
||||||
#define MSGPACK_CPP03_DEFINE_HPP
|
#define MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/adaptor/msgpack_tuple_fwd.hpp"
|
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
||||||
#include "msgpack/adaptor/int_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
|
||||||
#define MSGPACK_DEFINE(...) \
|
#define MSGPACK_DEFINE_ARRAY(...) \
|
||||||
template <typename Packer> \
|
template <typename Packer> \
|
||||||
void msgpack_pack(Packer& pk) const \
|
void msgpack_pack(Packer& pk) const \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_pack(pk); \
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
|
||||||
} \
|
} \
|
||||||
void msgpack_unpack(msgpack::object const& o) \
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
|
||||||
}\
|
}\
|
||||||
template <typename MSGPACK_OBJECT> \
|
template <typename MSGPACK_OBJECT> \
|
||||||
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \
|
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.
|
// MSGPACK_ADD_ENUM must be used in the global namespace.
|
||||||
#define MSGPACK_ADD_ENUM(enum) \
|
#define MSGPACK_ADD_ENUM(enum_name) \
|
||||||
namespace msgpack { \
|
namespace msgpack { \
|
||||||
|
/** @cond */ \
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, enum& v) \
|
/** @endcond */ \
|
||||||
{ \
|
namespace adaptor { \
|
||||||
int tmp; \
|
template<> \
|
||||||
o >> tmp; \
|
struct convert<enum_name> { \
|
||||||
v = static_cast<enum>(tmp); \
|
msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\
|
||||||
return o; \
|
int tmp; \
|
||||||
} \
|
o >> tmp; \
|
||||||
inline void operator<< (msgpack::object& o, const enum& v) \
|
v = static_cast<enum_name>(tmp); \
|
||||||
{ \
|
return o; \
|
||||||
o << static_cast<int>(v); \
|
} \
|
||||||
} \
|
}; \
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const enum& v) \
|
template<> \
|
||||||
{ \
|
struct object<enum_name> { \
|
||||||
o << static_cast<int>(v); \
|
void operator()(msgpack::object& o, const enum_name& v) const {\
|
||||||
} \
|
o << static_cast<int>(v); \
|
||||||
namespace detail { \
|
} \
|
||||||
|
}; \
|
||||||
|
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> \
|
template <typename Stream> \
|
||||||
struct packer_serializer<Stream, enum> { \
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \
|
||||||
static msgpack::packer<Stream>& pack(msgpack::packer<Stream>& o, const enum& v) { \
|
return o << static_cast<int>(v); \
|
||||||
return o << static_cast<int>(v); \
|
} \
|
||||||
} \
|
}; \
|
||||||
}; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
|
/** @cond */ \
|
||||||
|
} \
|
||||||
|
/** @endcond */ \
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @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<%}%>>
|
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
||||||
struct define;
|
struct define_array;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct define<> {
|
struct define_array<> {
|
||||||
typedef define<> value_type;
|
typedef define_array<> value_type;
|
||||||
typedef tuple<> tuple_type;
|
typedef tuple<> tuple_type;
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -99,12 +114,14 @@ struct define<> {
|
|||||||
o->via.array.size = 0;
|
o->via.array.size = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
struct define<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
struct define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
||||||
typedef define<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type;
|
typedef define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> value_type;
|
||||||
typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> tuple_type;
|
typedef tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> tuple_type;
|
||||||
define(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) :
|
define_array(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) :
|
||||||
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -137,22 +154,28 @@ struct define<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
|||||||
A<%=j%>& a<%=j%>;<%}%>
|
A<%=j%>& a<%=j%>;<%}%>
|
||||||
};
|
};
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
inline define<> make_define()
|
inline define_array<> make_define_array()
|
||||||
{
|
{
|
||||||
return define<>();
|
return define_array<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
define<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& 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<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
return define_array<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
||||||
}
|
}
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_DEFINE_HPP
|
#endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
||||||
181
erb/cpp03_define_map.hpp.erb
Normal file
181
erb/cpp03_define_map.hpp.erb
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_MAP_HPP
|
||||||
|
#define MSGPACK_CPP03_DEFINE_MAP_HPP
|
||||||
|
|
||||||
|
// BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp
|
||||||
|
// http://www.boost.org/libs/preprocessor/doc/ref/variadics.html
|
||||||
|
// However, supporting compiler detection is not complete. msgpack-c requires
|
||||||
|
// variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly.
|
||||||
|
#if !defined(MSGPACK_PP_VARIADICS)
|
||||||
|
#define MSGPACK_PP_VARIADICS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <msgpack/preprocessor.hpp>
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \
|
||||||
|
MSGPACK_PP_IF( \
|
||||||
|
MSGPACK_PP_IS_BEGIN_PARENS(elem), \
|
||||||
|
elem, \
|
||||||
|
(MSGPACK_PP_STRINGIZE(elem))(elem) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP_IMPL(...) \
|
||||||
|
MSGPACK_PP_SEQ_TO_TUPLE( \
|
||||||
|
MSGPACK_PP_SEQ_FOR_EACH( \
|
||||||
|
MSGPACK_DEFINE_MAP_EACH_PROC, \
|
||||||
|
0, \
|
||||||
|
MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP(...) \
|
||||||
|
template <typename Packer> \
|
||||||
|
void msgpack_pack(Packer& pk) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_pack(pk); \
|
||||||
|
} \
|
||||||
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_unpack(o); \
|
||||||
|
}\
|
||||||
|
template <typename MSGPACK_OBJECT> \
|
||||||
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_object(o, z); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MSGPACK_BASE_MAP(base) \
|
||||||
|
(MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this)))
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
/// @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
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct define_map<> {
|
||||||
|
template <typename Packer>
|
||||||
|
void msgpack_pack(Packer& pk) const
|
||||||
|
{
|
||||||
|
pk.pack_map(0);
|
||||||
|
}
|
||||||
|
void msgpack_unpack(msgpack::object const& o) const
|
||||||
|
{
|
||||||
|
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
|
}
|
||||||
|
void msgpack_object(msgpack::object* o, msgpack::zone&) const
|
||||||
|
{
|
||||||
|
o->type = msgpack::type::MAP;
|
||||||
|
o->via.map.ptr = nullptr;
|
||||||
|
o->via.map.size = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%1.step(GENERATION_LIMIT+1,2) {|i|%>
|
||||||
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
struct define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
||||||
|
define_map(A0& _a0<%1.upto(i) {|j|%>, A<%=j%>& _a<%=j%><%}%>) :
|
||||||
|
a0(_a0)<%1.upto(i) {|j|%>, a<%=j%>(_a<%=j%>)<%}%> {}
|
||||||
|
template <typename Packer>
|
||||||
|
void msgpack_pack(Packer& pk) const
|
||||||
|
{
|
||||||
|
pk.pack_map(<%=(i+1)/2%>);
|
||||||
|
<%0.upto(i) {|j|%>
|
||||||
|
pk.pack(a<%=j%>);<%}%>
|
||||||
|
}
|
||||||
|
void msgpack_unpack(msgpack::object const& o) const
|
||||||
|
{
|
||||||
|
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
|
std::map<std::string, msgpack::object const*> kvmap;
|
||||||
|
for (uint32_t i = 0; i < o.via.map.size; ++i) {
|
||||||
|
kvmap.insert(
|
||||||
|
std::map<std::string, msgpack::object const*>::value_type(
|
||||||
|
std::string(
|
||||||
|
o.via.map.ptr[i].key.via.str.ptr,
|
||||||
|
o.via.map.ptr[i].key.via.str.size),
|
||||||
|
&o.via.map.ptr[i].val
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
<%0.step(i,2) {|j|%>
|
||||||
|
{
|
||||||
|
std::map<std::string, msgpack::object const*>::const_iterator it = kvmap.find(a<%=j%>);
|
||||||
|
if (it != kvmap.end()) {
|
||||||
|
it->second->convert(a<%=j+1%>);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<%}%>
|
||||||
|
}
|
||||||
|
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||||
|
{
|
||||||
|
o->type = msgpack::type::MAP;
|
||||||
|
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*<%=(i+1)/2%>));
|
||||||
|
o->via.map.size = <%=(i+1)/2%>;
|
||||||
|
<%0.step(i,2) {|j|%>
|
||||||
|
o->via.map.ptr[<%=j/2%>].key = msgpack::object(a<%=j%>, z);
|
||||||
|
o->via.map.ptr[<%=j/2%>].val = msgpack::object(a<%=j+1%>, z);
|
||||||
|
<%}%>
|
||||||
|
}
|
||||||
|
<%0.upto(i) {|j|%>
|
||||||
|
A<%=j%>& a<%=j%>;<%}%>
|
||||||
|
};
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
inline define_map<> make_define_map()
|
||||||
|
{
|
||||||
|
return define_map<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
inline define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_define_map(A0& a0<%1.upto(i) {|j|%>, A<%=j%>& a<%=j%><%}%>)
|
||||||
|
{
|
||||||
|
return define_map<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
||||||
|
}
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_CPP03_DEFINE_MAP_HPP
|
||||||
@@ -20,10 +20,13 @@
|
|||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object.hpp"
|
#include "msgpack/object.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
@@ -31,8 +34,10 @@ namespace type {
|
|||||||
// FIXME operator!=
|
// FIXME operator!=
|
||||||
<% GENERATION_LIMIT = 31 %>
|
<% GENERATION_LIMIT = 31 %>
|
||||||
|
|
||||||
template <typename A0<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%><%}%>>
|
/// @cond
|
||||||
|
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
||||||
struct tuple;
|
struct tuple;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename Tuple, int N>
|
template <typename Tuple, int N>
|
||||||
struct tuple_element;
|
struct tuple_element;
|
||||||
@@ -67,6 +72,7 @@ struct tuple_type<const T&> {
|
|||||||
typedef const T& transparent_reference;
|
typedef const T& transparent_reference;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
<%0.upto(i) {|j|%>
|
<%0.upto(i) {|j|%>
|
||||||
template <typename A0<%1.upto(i) {|k|%>, typename A<%=k%><%}%>>
|
template <typename A0<%1.upto(i) {|k|%>, typename A<%=k%><%}%>>
|
||||||
@@ -91,6 +97,7 @@ private:
|
|||||||
};
|
};
|
||||||
<%}%>
|
<%}%>
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct tuple<> {
|
struct tuple<> {
|
||||||
@@ -98,6 +105,8 @@ struct 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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> {
|
||||||
@@ -121,11 +130,14 @@ template <int N, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|||||||
inline typename type::const_tuple_element<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>, N>::const_reference get(type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> const& t)
|
inline typename type::const_tuple_element<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>, N>::const_reference get(type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> const& t)
|
||||||
{ return t.template get<N>(); }
|
{ return t.template get<N>(); }
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
inline tuple<> make_tuple()
|
inline tuple<> make_tuple()
|
||||||
{
|
{
|
||||||
return tuple<>();
|
return tuple<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
inline tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>)
|
inline tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<A0>::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type<A<%=j%>>::transparent_reference a<%=j%><%}%>)
|
||||||
@@ -133,84 +145,102 @@ inline tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> make_tuple(typename tuple_type<
|
|||||||
return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
return tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>);
|
||||||
}
|
}
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (
|
namespace adaptor {
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct convert<type::tuple<> > {
|
||||||
|
msgpack::object const& operator()(
|
||||||
msgpack::object const& o,
|
msgpack::object const& o,
|
||||||
type::tuple<>&) {
|
type::tuple<>&) const {
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
inline msgpack::object const& operator>> (
|
struct convert<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
||||||
|
msgpack::object const& operator()(
|
||||||
msgpack::object const& o,
|
msgpack::object const& o,
|
||||||
type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) {
|
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(); }
|
if(o.via.array.size < <%=i+1%>) { throw msgpack::type_error(); }
|
||||||
<%0.upto(i) {|j|%>
|
<%0.upto(i) {|j|%>
|
||||||
o.via.array.ptr[<%=j%>].convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%>
|
// In order to avoid clang++'s invalid warning, msgpack::object:: has been added.
|
||||||
return o;
|
o.via.array.ptr[<%=j%>].msgpack::object::convert<typename type::tuple_type<A<%=j%>>::type>(v.template get<<%=j%>>());<%}%>
|
||||||
}
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline const msgpack::packer<Stream>& operator<< (
|
struct pack<type::tuple<> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(
|
||||||
msgpack::packer<Stream>& o,
|
msgpack::packer<Stream>& o,
|
||||||
const type::tuple<>&) {
|
const type::tuple<>&) const {
|
||||||
o.pack_array(0);
|
o.pack_array(0);
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
};
|
||||||
template <typename Stream, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
inline const msgpack::packer<Stream>& operator<< (
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) {
|
|
||||||
o.pack_array(<%=i+1%>);
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
o.pack(v.template get<<%=j%>>());<%}%>
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
inline void operator<< (
|
/// @cond
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const type::tuple<>&) {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
}
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
inline void operator<< (
|
struct pack<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
||||||
msgpack::object::with_zone& o,
|
template <typename Stream>
|
||||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) {
|
msgpack::packer<Stream>& operator()(
|
||||||
o.type = msgpack::type::ARRAY;
|
msgpack::packer<Stream>& o,
|
||||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>));
|
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
||||||
o.via.array.size = <%=i+1%>;
|
o.pack_array(<%=i+1%>);
|
||||||
<%0.upto(i) {|j|%>
|
<%0.upto(i) {|j|%>
|
||||||
o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%>
|
o.pack(v.template get<<%=j%>>());<%}%>
|
||||||
}
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct object_with_zone<type::tuple<> > {
|
||||||
|
void operator()(
|
||||||
|
msgpack::object::with_zone& o,
|
||||||
|
const type::tuple<>&) const {
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
o.via.array.ptr = nullptr;
|
||||||
|
o.via.array.size = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
|
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
|
struct object_with_zone<type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>> > {
|
||||||
|
void operator()(
|
||||||
|
msgpack::object::with_zone& o,
|
||||||
|
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) const {
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*<%=i+1%>));
|
||||||
|
o.via.array.size = <%=i+1%>;
|
||||||
|
<%0.upto(i) {|j|%>
|
||||||
|
o.via.array.ptr[<%=j%>] = msgpack::object(v.template get<<%=j%>>(), o.zone);<%}%>
|
||||||
|
}
|
||||||
|
};
|
||||||
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|
||||||
//inline std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v) {
|
|
||||||
// return o << "[]";
|
|
||||||
//}
|
|
||||||
//<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
//template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
//inline std::ostream& operator<< (std::ostream& o,
|
|
||||||
// const msgpack::type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v) {
|
|
||||||
// return o << "["
|
|
||||||
// <%0.upto(i) {|j|%>
|
|
||||||
// <<<%if j != 0 then%> ", " <<<%end%> v.template get<<%=j%>>()<%}%>
|
|
||||||
// << "]";
|
|
||||||
//}
|
|
||||||
//<%}%>
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP
|
#endif // MSGPACK_CPP03_MSGPACK_TUPLE_HPP
|
||||||
|
|||||||
@@ -1,125 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
#define MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
// FIXME operator==
|
|
||||||
// FIXME operator!=
|
|
||||||
<% GENERATION_LIMIT = 31 %>
|
|
||||||
|
|
||||||
template <typename A0 = void<%1.upto(GENERATION_LIMIT+1) {|i|%>, typename A<%=i%> = void<%}%>>
|
|
||||||
struct tuple;
|
|
||||||
|
|
||||||
template <typename Tuple, int N>
|
|
||||||
struct tuple_element;
|
|
||||||
|
|
||||||
template <typename Tuple, int N>
|
|
||||||
struct const_tuple_element;
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct tuple_type;
|
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
template <typename A0<%1.upto(i) {|k|%>, typename A<%=k%><%}%>>
|
|
||||||
struct tuple_element<tuple<A0<%1.upto(i) {|k|%>, A<%=k%><%}%>>, <%=j%>>;
|
|
||||||
<%}%>
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
<%0.upto(i) {|j|%>
|
|
||||||
template <typename A0<%1.upto(i) {|k|%>, typename A<%=k%><%}%>>
|
|
||||||
struct const_tuple_element<tuple<A0<%1.upto(i) {|k|%>, A<%=k%><%}%>>, <%=j%>>;
|
|
||||||
<%}%>
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct tuple<>;
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
struct tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>;
|
|
||||||
|
|
||||||
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);
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
tuple<> make_tuple();
|
|
||||||
<%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%><%}%>);
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (
|
|
||||||
msgpack::object const& o,
|
|
||||||
type::tuple<>&);
|
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
msgpack::object const& operator>> (
|
|
||||||
msgpack::object const& o,
|
|
||||||
type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v);
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
const msgpack::packer<Stream>& operator<< (
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const type::tuple<>&);
|
|
||||||
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename Stream, typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
const msgpack::packer<Stream>& operator<< (
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v);
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
void operator<< (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const type::tuple<>&);
|
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
void operator<< (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v);
|
|
||||||
<%}%>
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
|
|
||||||
//std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v);
|
|
||||||
//<%0.upto(GENERATION_LIMIT) {|i|%>
|
|
||||||
//template <typename A0<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
|
||||||
//std::ostream& operator<< (std::ostream& o,
|
|
||||||
// const msgpack::type::tuple<A0<%1.upto(i) {|j|%>, A<%=j%><%}%>>& v);
|
|
||||||
//<%}%>
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
@@ -35,7 +35,9 @@
|
|||||||
<% GENERATION_LIMIT = 15 %>
|
<% GENERATION_LIMIT = 15 %>
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
class zone {
|
class zone {
|
||||||
struct finalizer {
|
struct finalizer {
|
||||||
@@ -179,10 +181,12 @@ public:
|
|||||||
{
|
{
|
||||||
::operator delete(p, place);
|
::operator delete(p, place);
|
||||||
}
|
}
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
template <typename T<%1.upto(i) {|j|%>, typename A<%=j%><%}%>>
|
||||||
T* allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>);
|
T* allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>);
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void undo_allocate(size_t size);
|
void undo_allocate(size_t size);
|
||||||
@@ -304,6 +308,13 @@ inline void zone::undo_allocate(size_t size)
|
|||||||
m_chunk_list.m_free += size;
|
m_chunk_list.m_free += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::size_t aligned_size(
|
||||||
|
std::size_t size,
|
||||||
|
std::size_t align = MSGPACK_ZONE_ALIGN) {
|
||||||
|
return (size + align - 1) / align * align;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
<%0.upto(GENERATION_LIMIT) {|i|%>
|
<%0.upto(GENERATION_LIMIT) {|i|%>
|
||||||
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(', ')%>)
|
||||||
@@ -324,8 +335,11 @@ T* zone::allocate(<%=(1..i).map{|j|"A#{j} a#{j}"}.join(', ')%>)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
<%}%>
|
<%}%>
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
4
example/CMakeLists.txt
Normal file
4
example/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
ADD_SUBDIRECTORY (c)
|
||||||
|
ADD_SUBDIRECTORY (cpp03)
|
||||||
|
ADD_SUBDIRECTORY (cpp11)
|
||||||
|
ADD_SUBDIRECTORY (boost)
|
||||||
24
example/boost/CMakeLists.txt
Normal file
24
example/boost/CMakeLists.txt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
IF (MSGPACK_BOOST)
|
||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
msgpack_variant_capitalize.cpp
|
||||||
|
msgpack_variant_mapbased.cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
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")
|
||||||
|
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 ()
|
||||||
102
example/boost/msgpack_variant_capitalize.cpp
Normal file
102
example/boost/msgpack_variant_capitalize.cpp
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
// MessagePack for C++ example
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cctype>
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct user {
|
||||||
|
std::string name;
|
||||||
|
int age;
|
||||||
|
std::string address;
|
||||||
|
MSGPACK_DEFINE(name, age, address);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct proc:boost::static_visitor<void> {
|
||||||
|
void operator()(std::string& v) const {
|
||||||
|
std::cout << " match std::string& v" << std::endl;
|
||||||
|
std::cout << " v: " << v << std::endl;
|
||||||
|
std::cout << " capitalize" << std::endl;
|
||||||
|
for (std::string::iterator it = v.begin(), end = v.end();
|
||||||
|
it != end;
|
||||||
|
++it) {
|
||||||
|
*it = std::toupper(*it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void operator()(std::vector<msgpack::type::variant>& v) const {
|
||||||
|
std::cout << "match vector (msgpack::type::ARRAY)" << std::endl;
|
||||||
|
std::vector<msgpack::type::variant>::iterator it = v.begin();
|
||||||
|
std::vector<msgpack::type::variant>::const_iterator end = v.end();
|
||||||
|
for (; it != end; ++it) {
|
||||||
|
boost::apply_visitor(*this, *it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
template <typename T>
|
||||||
|
void operator()(T const&) const {
|
||||||
|
std::cout << " match others" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void print(std::string const& buf) {
|
||||||
|
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
||||||
|
it != end;
|
||||||
|
++it) {
|
||||||
|
std::cout
|
||||||
|
<< std::setw(2)
|
||||||
|
<< std::hex
|
||||||
|
<< std::setfill('0')
|
||||||
|
<< (static_cast<int>(*it) & 0xff)
|
||||||
|
<< ' ';
|
||||||
|
}
|
||||||
|
std::cout << std::dec << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::stringstream ss1;
|
||||||
|
user u;
|
||||||
|
u.name = "Takatoshi Kondo";
|
||||||
|
u.age = 42;
|
||||||
|
u.address = "Tokyo, JAPAN";
|
||||||
|
|
||||||
|
std::cout << "Packing object." << std::endl;
|
||||||
|
msgpack::pack(ss1, u);
|
||||||
|
print(ss1.str());
|
||||||
|
|
||||||
|
msgpack::unpacked unp1 = msgpack::unpack(ss1.str().data(), ss1.str().size());
|
||||||
|
msgpack::object const& obj1 = unp1.get();
|
||||||
|
std::cout << "Unpacked msgpack object." << std::endl;
|
||||||
|
std::cout << obj1 << std::endl;
|
||||||
|
|
||||||
|
msgpack::type::variant v = obj1.as<msgpack::type::variant>();
|
||||||
|
std::cout << "Applying proc..." << std::endl;
|
||||||
|
boost::apply_visitor(proc(), v);
|
||||||
|
|
||||||
|
std::stringstream ss2;
|
||||||
|
std::cout << "Packing modified object." << std::endl;
|
||||||
|
msgpack::pack(ss2, v);
|
||||||
|
print(ss2.str());
|
||||||
|
|
||||||
|
msgpack::unpacked unp2 = msgpack::unpack(ss2.str().data(), ss2.str().size());
|
||||||
|
msgpack::object const& obj2 = unp2.get();
|
||||||
|
std::cout << "Modified msgpack object." << std::endl;
|
||||||
|
std::cout << obj2 << std::endl;
|
||||||
|
}
|
||||||
100
example/boost/msgpack_variant_mapbased.cpp
Normal file
100
example/boost/msgpack_variant_mapbased.cpp
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
// MessagePack for C++ example
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct user {
|
||||||
|
std::string name;
|
||||||
|
int age;
|
||||||
|
std::string address;
|
||||||
|
MSGPACK_DEFINE_MAP(name, age, address);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct proc:boost::static_visitor<void> {
|
||||||
|
// msgpack::type::MAP is converted to std::multimap, not std::map.
|
||||||
|
void operator()(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>& v) const {
|
||||||
|
std::cout << "match map" << std::endl;
|
||||||
|
std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::iterator it = v.begin();
|
||||||
|
std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::iterator end = v.end();
|
||||||
|
while(it != end) {
|
||||||
|
boost::string_ref const& key = it->first.as_boost_string_ref();
|
||||||
|
if (key == "name") {
|
||||||
|
boost::string_ref const& value = it->second.as_boost_string_ref();
|
||||||
|
if (value == "Takatoshi Kondo") {
|
||||||
|
// You can add values to msgpack::type::variant_ref.
|
||||||
|
v.insert(
|
||||||
|
std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::value_type(
|
||||||
|
"role",
|
||||||
|
"msgpack-c committer"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
else if (key == "age") {
|
||||||
|
// You can remove key-value pair from msgpack::type::variant_ref
|
||||||
|
|
||||||
|
#if defined(MSGPACK_USE_CPP03)
|
||||||
|
v.erase(it++);
|
||||||
|
#else // defined(MSGPACK_USE_CPP03)
|
||||||
|
# if MSGPACK_LIB_STD_CXX
|
||||||
|
it = v.erase(std::multimap<msgpack::type::variant_ref, msgpack::type::variant_ref>::const_iterator(it));
|
||||||
|
# else // MSGPACK_LIB_STD_CXX
|
||||||
|
it = v.erase(it);
|
||||||
|
# endif // MSGPACK_LIB_STD_CXX
|
||||||
|
#endif // defined(MSGPACK_USE_CPP03)
|
||||||
|
}
|
||||||
|
else if (key == "address") {
|
||||||
|
// When you want to append string
|
||||||
|
// "Tokyo" -> "Tokyo, JAPAN"
|
||||||
|
// Use msgpack::type::variant instead of msgpack::type::variant_ref
|
||||||
|
// or do as follows:
|
||||||
|
boost::string_ref const& value = it->second.as_boost_string_ref();
|
||||||
|
it->second = std::string(&value.front(), value.size()) + ", JAPAN";
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
template <typename T>
|
||||||
|
void operator()(T const&) const {
|
||||||
|
std::cout << " match others" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::stringstream ss;
|
||||||
|
user u;
|
||||||
|
u.name = "Takatoshi Kondo";
|
||||||
|
u.age = 42;
|
||||||
|
u.address = "Tokyo";
|
||||||
|
msgpack::pack(ss, u);
|
||||||
|
|
||||||
|
msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
|
msgpack::object const& obj = unp.get();
|
||||||
|
std::cout << "Unpacked msgpack object." << std::endl;
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
msgpack::type::variant_ref v = obj.as<msgpack::type::variant_ref>();
|
||||||
|
std::cout << "Applying proc..." << std::endl;
|
||||||
|
boost::apply_visitor(proc(), v);
|
||||||
|
msgpack::zone z;
|
||||||
|
std::cout << "Applied msgpack object." << std::endl;
|
||||||
|
std::cout << msgpack::object(v, z) << std::endl;
|
||||||
|
}
|
||||||
32
example/c/CMakeLists.txt
Normal file
32
example/c/CMakeLists.txt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
../include
|
||||||
|
)
|
||||||
|
|
||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
lib_buffer_unpack.c
|
||||||
|
simple_c.c
|
||||||
|
speed_test_uint32_array.c
|
||||||
|
speed_test_uint64_array.c
|
||||||
|
user_buffer_unpack.c
|
||||||
|
)
|
||||||
|
|
||||||
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
msgpack
|
||||||
|
)
|
||||||
|
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")
|
||||||
|
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 ()
|
||||||
@@ -8,8 +8,6 @@ typedef struct receiver {
|
|||||||
size_t rest;
|
size_t rest;
|
||||||
} receiver;
|
} receiver;
|
||||||
|
|
||||||
receiver r;
|
|
||||||
|
|
||||||
void receiver_init(receiver *r) {
|
void receiver_init(receiver *r) {
|
||||||
msgpack_packer pk;
|
msgpack_packer pk;
|
||||||
|
|
||||||
@@ -43,6 +41,20 @@ size_t receiver_recv(receiver *r, char* buf, size_t try_size) {
|
|||||||
return actual_size;
|
return actual_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t receiver_to_unpacker(receiver* r, size_t request_size,
|
||||||
|
msgpack_unpacker *unpacker)
|
||||||
|
{
|
||||||
|
// make sure there's enough room, or expand the unpacker accordingly
|
||||||
|
if (msgpack_unpacker_buffer_capacity(unpacker) < request_size) {
|
||||||
|
msgpack_unpacker_reserve_buffer(unpacker, request_size);
|
||||||
|
assert(msgpack_unpacker_buffer_capacity(unpacker) >= request_size);
|
||||||
|
}
|
||||||
|
size_t recv_len = receiver_recv(r, msgpack_unpacker_buffer(unpacker),
|
||||||
|
request_size);
|
||||||
|
msgpack_unpacker_buffer_consumed(unpacker, recv_len);
|
||||||
|
return recv_len;
|
||||||
|
}
|
||||||
|
|
||||||
#define EACH_RECV_SIZE 4
|
#define EACH_RECV_SIZE 4
|
||||||
|
|
||||||
void unpack(receiver* r) {
|
void unpack(receiver* r) {
|
||||||
@@ -50,30 +62,21 @@ void unpack(receiver* r) {
|
|||||||
msgpack_unpacker* unp = msgpack_unpacker_new(100);
|
msgpack_unpacker* unp = msgpack_unpacker_new(100);
|
||||||
msgpack_unpacked result;
|
msgpack_unpacked result;
|
||||||
msgpack_unpack_return ret;
|
msgpack_unpack_return ret;
|
||||||
char* buf;
|
|
||||||
size_t recv_len;
|
size_t recv_len;
|
||||||
int recv_count = 0;
|
int recv_count = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
msgpack_unpacked_init(&result);
|
msgpack_unpacked_init(&result);
|
||||||
if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) {
|
while (true) {
|
||||||
bool expanded = msgpack_unpacker_reserve_buffer(unp, 100);
|
recv_len = receiver_to_unpacker(r, EACH_RECV_SIZE, unp);
|
||||||
assert(expanded);
|
if (recv_len == 0) break; // (reached end of input)
|
||||||
}
|
printf("receive count: %d %zd bytes received.\n", recv_count++, recv_len);
|
||||||
buf = msgpack_unpacker_buffer(unp);
|
|
||||||
|
|
||||||
recv_len = receiver_recv(r, buf, EACH_RECV_SIZE);
|
|
||||||
msgpack_unpacker_buffer_consumed(unp, recv_len);
|
|
||||||
|
|
||||||
|
|
||||||
while (recv_len > 0) {
|
|
||||||
int i = 0;
|
|
||||||
printf("receive count: %d %zd bytes received.:\n", recv_count++, recv_len);
|
|
||||||
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;
|
||||||
|
|
||||||
/* Use obj. */
|
/* Use obj. */
|
||||||
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");
|
||||||
/* 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. */
|
||||||
@@ -87,15 +90,9 @@ void unpack(receiver* r) {
|
|||||||
msgpack_unpacked_destroy(&result);
|
msgpack_unpacked_destroy(&result);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (msgpack_unpacker_buffer_capacity(unp) < EACH_RECV_SIZE) {
|
|
||||||
bool expanded = msgpack_unpacker_reserve_buffer(unp, 100);
|
|
||||||
assert(expanded);
|
|
||||||
}
|
|
||||||
buf = msgpack_unpacker_buffer(unp);
|
|
||||||
recv_len = receiver_recv(r, buf, 4);
|
|
||||||
msgpack_unpacker_buffer_consumed(unp, recv_len);
|
|
||||||
}
|
}
|
||||||
msgpack_unpacked_destroy(&result);
|
msgpack_unpacked_destroy(&result);
|
||||||
|
msgpack_unpacker_free(unp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
@@ -110,10 +107,16 @@ int main(void) {
|
|||||||
/* Output */
|
/* Output */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
receive count: 0 4 bytes received.
|
||||||
|
receive count: 1 4 bytes received.
|
||||||
|
receive count: 2 4 bytes received.
|
||||||
Object no 1:
|
Object no 1:
|
||||||
[1, true, "example"]
|
[1, true, "example"]
|
||||||
|
receive count: 3 4 bytes received.
|
||||||
|
receive count: 4 4 bytes received.
|
||||||
Object no 2:
|
Object no 2:
|
||||||
"second"
|
"second"
|
||||||
|
receive count: 5 1 bytes received.
|
||||||
Object no 3:
|
Object no 3:
|
||||||
[42, false]
|
[42, false]
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,14 @@
|
|||||||
#include <msgpack.h>
|
#include <msgpack.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void print(char const* buf, unsigned int len)
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
for(; i < len ; ++i)
|
||||||
|
printf("%02x ", 0xff & buf[i]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
msgpack_sbuffer sbuf;
|
msgpack_sbuffer sbuf;
|
||||||
@@ -20,6 +28,8 @@ int main(void)
|
|||||||
msgpack_pack_str(&pk, 7);
|
msgpack_pack_str(&pk, 7);
|
||||||
msgpack_pack_str_body(&pk, "example", 7);
|
msgpack_pack_str_body(&pk, "example", 7);
|
||||||
|
|
||||||
|
print(sbuf.data, sbuf.size);
|
||||||
|
|
||||||
/* deserialize the buffer into msgpack_object instance. */
|
/* deserialize the buffer into msgpack_object instance. */
|
||||||
/* deserialized object is valid during the msgpack_zone instance alive. */
|
/* deserialized object is valid during the msgpack_zone instance alive. */
|
||||||
msgpack_zone_init(&mempool, 2048);
|
msgpack_zone_init(&mempool, 2048);
|
||||||
@@ -35,4 +45,3 @@ int main(void)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7,14 +7,14 @@ void test()
|
|||||||
msgpack_packer * pk;
|
msgpack_packer * pk;
|
||||||
size_t upk_pos = 0;
|
size_t upk_pos = 0;
|
||||||
msgpack_unpacked msg;
|
msgpack_unpacked msg;
|
||||||
|
|
||||||
msgpack_sbuffer_init(&buf);
|
msgpack_sbuffer_init(&buf);
|
||||||
|
|
||||||
pk = msgpack_packer_new(&buf, msgpack_sbuffer_write);
|
pk = msgpack_packer_new(&buf, msgpack_sbuffer_write);
|
||||||
|
|
||||||
msgpack_pack_array(pk, size);
|
msgpack_pack_array(pk, size);
|
||||||
{
|
{
|
||||||
int idx = 0;
|
size_t idx = 0;
|
||||||
for (; idx < size; ++idx)
|
for (; idx < size; ++idx)
|
||||||
msgpack_pack_uint32(pk, 1);
|
msgpack_pack_uint32(pk, 1);
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ void test()
|
|||||||
msgpack_sbuffer_destroy(&buf);
|
msgpack_sbuffer_destroy(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(void)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; i < 10; ++i) test();
|
for (; i < 10; ++i) test();
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ void test()
|
|||||||
|
|
||||||
msgpack_pack_array(pk, size);
|
msgpack_pack_array(pk, size);
|
||||||
{
|
{
|
||||||
int idx = 0;
|
size_t idx = 0;
|
||||||
for (; idx < size; ++idx)
|
for (; idx < size; ++idx)
|
||||||
msgpack_pack_uint64(pk, test_u64);
|
msgpack_pack_uint64(pk, test_u64);
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ void test()
|
|||||||
msgpack_sbuffer_destroy(&buf);
|
msgpack_sbuffer_destroy(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(void)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; i < 10; ++i) test();
|
for (; i < 10; ++i) test();
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ void unpack(char const* buf, size_t len) {
|
|||||||
msgpack_object obj = result.data;
|
msgpack_object obj = result.data;
|
||||||
|
|
||||||
/* Use obj. */
|
/* Use obj. */
|
||||||
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");
|
||||||
/* 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. */
|
||||||
@@ -72,4 +72,5 @@ Object no 2:
|
|||||||
"second"
|
"second"
|
||||||
Object no 3:
|
Object no 3:
|
||||||
[42, false]
|
[42, false]
|
||||||
|
All msgpack_object in the buffer is consumed.
|
||||||
*/
|
*/
|
||||||
|
|||||||
99
example/cpp03/CMakeLists.txt
Normal file
99
example/cpp03/CMakeLists.txt
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
class_intrusive.cpp
|
||||||
|
class_intrusive_map.cpp
|
||||||
|
class_non_intrusive.cpp
|
||||||
|
custom.cpp
|
||||||
|
enum.cpp
|
||||||
|
map_based_versionup.cpp
|
||||||
|
protocol.cpp
|
||||||
|
protocol_new.cpp
|
||||||
|
reuse_zone.cpp
|
||||||
|
simple.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
IF (NOT MSVC)
|
||||||
|
LIST (APPEND with_pthread_PROGRAMS
|
||||||
|
stream.cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (MSGPACK_BOOST)
|
||||||
|
IF (NOT MSVC)
|
||||||
|
LIST (APPEND with_boost_lib_PROGRAMS
|
||||||
|
speed_test.cpp
|
||||||
|
speed_test_nested_array.cpp
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
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")
|
||||||
|
ENDIF ()
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
ENDFOREACH ()
|
||||||
|
|
||||||
|
FOREACH (source_file ${with_pthread_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
pthread
|
||||||
|
)
|
||||||
|
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")
|
||||||
|
ENDIF ()
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
|
STRING(REGEX REPLACE "/W[0-4]" "/W3 /WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
ELSE ()
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
ENDFOREACH ()
|
||||||
|
|
||||||
|
FOREACH (source_file ${with_boost_lib_PROGRAMS})
|
||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
../include
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
${Boost_TIMER_LIBRARY}
|
||||||
|
${Boost_CHRONO_LIBRARY}
|
||||||
|
${Boost_SYSTEM_LIBRARY}
|
||||||
|
)
|
||||||
|
IF (NOT MSVC AND NOT APPLE)
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
rt
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Werror -Wno-mismatched-tags -g -O3")
|
||||||
|
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 ()
|
||||||
@@ -21,18 +21,42 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
// msgpack.hpp is also ok
|
// When you want to adapt map instead of array, you can enable these macro definition.
|
||||||
#include <msgpack_fwd.hpp>
|
//
|
||||||
|
// #define MSGPACK_USE_DEFINE_MAP
|
||||||
|
|
||||||
|
|
||||||
class my_class {
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct my_base1 {
|
||||||
|
int a;
|
||||||
|
MSGPACK_DEFINE(a);
|
||||||
|
};
|
||||||
|
inline bool operator==(my_base1 const& lhs, my_base1 const& rhs) {
|
||||||
|
return lhs.a == rhs.a;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct my_base2 {
|
||||||
|
std::string b;
|
||||||
|
std::string c;
|
||||||
|
MSGPACK_DEFINE(b, c);
|
||||||
|
};
|
||||||
|
inline bool operator==(my_base2 const& lhs, my_base2 const& rhs) {
|
||||||
|
return lhs.b == rhs.b && lhs.c == rhs.c;
|
||||||
|
}
|
||||||
|
|
||||||
|
class my_class : public my_base1, private my_base2 {
|
||||||
public:
|
public:
|
||||||
my_class() {} // When you want to convert from msgpack::object to my_class,
|
my_class() {} // When you want to convert from msgpack::object to my_class,
|
||||||
// my_class should be default constractible.
|
// my_class should be default constractible.
|
||||||
my_class(std::string const& name, int age):name_(name), age_(age) {}
|
my_class(std::string const& name, int age):name_(name), age_(age) {}
|
||||||
|
void set_b(std::string const& str) { b = str; }
|
||||||
|
void set_c(std::string const& str) { c = str; }
|
||||||
friend bool operator==(my_class const& lhs, my_class const& rhs) {
|
friend bool operator==(my_class const& lhs, my_class const& rhs) {
|
||||||
return lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_;
|
return
|
||||||
|
static_cast<my_base1 const&>(lhs) == static_cast<my_base1 const&>(rhs) &&
|
||||||
|
static_cast<my_base2 const&>(lhs) == static_cast<my_base2 const&>(rhs) &&
|
||||||
|
lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -40,7 +64,7 @@ private:
|
|||||||
int age_;
|
int age_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MSGPACK_DEFINE(name_, age_);
|
MSGPACK_DEFINE(name_, age_, MSGPACK_BASE(my_base1), MSGPACK_BASE(my_base2));
|
||||||
};
|
};
|
||||||
|
|
||||||
void print(std::string const& buf) {
|
void print(std::string const& buf) {
|
||||||
@@ -57,11 +81,12 @@ void print(std::string const& buf) {
|
|||||||
std::cout << std::dec << std::endl;
|
std::cout << std::dec << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
{ // pack, unpack
|
{ // pack, unpack
|
||||||
my_class my("John Smith", 42);
|
my_class my("John Smith", 42);
|
||||||
|
my.a = 123;
|
||||||
|
my.set_b("ABC");
|
||||||
|
my.set_c("DEF");
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, my);
|
msgpack::pack(ss, my);
|
||||||
|
|
||||||
@@ -75,6 +100,9 @@ int main() {
|
|||||||
}
|
}
|
||||||
{ // create object with zone
|
{ // create object with zone
|
||||||
my_class my("John Smith", 42);
|
my_class my("John Smith", 42);
|
||||||
|
my.a = 123;
|
||||||
|
my.set_b("ABC");
|
||||||
|
my.set_c("DEF");
|
||||||
msgpack::zone z;
|
msgpack::zone z;
|
||||||
msgpack::object obj(my, z);
|
msgpack::object obj(my, z);
|
||||||
std::cout << obj << std::endl;
|
std::cout << obj << std::endl;
|
||||||
|
|||||||
83
example/cpp03/class_intrusive_map.cpp
Normal file
83
example/cpp03/class_intrusive_map.cpp
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
// MessagePack for C++ example
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
class my_class {
|
||||||
|
public:
|
||||||
|
my_class() {} // When you want to convert from msgpack::object to my_class,
|
||||||
|
// my_class should be default constractible.
|
||||||
|
// If you use C++11, you can adapt non-default constructible
|
||||||
|
// classes to msgpack::object.
|
||||||
|
// See https://github.com/msgpack/msgpack-c/wiki/v1_1_cpp_adaptor#non-default-constructible-class-support-c11-only
|
||||||
|
my_class(std::string const& name, int age):name_(name), age_(age) {}
|
||||||
|
|
||||||
|
friend bool operator==(my_class const& lhs, my_class const& rhs) {
|
||||||
|
return lhs.name_ == rhs.name_ && lhs.age_ == rhs.age_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string name_;
|
||||||
|
int age_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
MSGPACK_DEFINE_MAP(name_, age_);
|
||||||
|
};
|
||||||
|
|
||||||
|
void print(std::string const& buf) {
|
||||||
|
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
||||||
|
it != end;
|
||||||
|
++it) {
|
||||||
|
std::cout
|
||||||
|
<< std::setw(2)
|
||||||
|
<< std::hex
|
||||||
|
<< std::setfill('0')
|
||||||
|
<< (static_cast<int>(*it) & 0xff)
|
||||||
|
<< ' ';
|
||||||
|
}
|
||||||
|
std::cout << std::dec << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
{ // pack, unpack
|
||||||
|
my_class my("John Smith", 42);
|
||||||
|
std::stringstream ss;
|
||||||
|
msgpack::pack(ss, my);
|
||||||
|
|
||||||
|
print(ss.str());
|
||||||
|
|
||||||
|
msgpack::unpacked unp;
|
||||||
|
msgpack::unpack(unp, ss.str().data(), ss.str().size());
|
||||||
|
msgpack::object obj = unp.get();
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<my_class>() == my);
|
||||||
|
}
|
||||||
|
{ // create object with zone
|
||||||
|
my_class my("John Smith", 42);
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj(my, z);
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<my_class>() == my);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,27 +21,6 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
// msgpack.hpp should be included at after user declarations
|
|
||||||
#include <msgpack_fwd.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
// declarations
|
|
||||||
class my_class;
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
|
||||||
|
|
||||||
object const& operator>> (msgpack::object const& o, my_class& v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
packer<Stream>& operator<< (msgpack::packer<Stream>& o, my_class const& v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, my_class const& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
class my_class {
|
class my_class {
|
||||||
@@ -63,40 +42,48 @@ private:
|
|||||||
int age_;
|
int age_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// User defined class template specialization
|
||||||
// definitions
|
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
inline object const& operator>> (msgpack::object const& o, my_class& v) {
|
template<>
|
||||||
if (o.type != msgpack::type::ARRAY) throw msgpack::type_error();
|
struct convert<my_class> {
|
||||||
if (o.via.array.size != 2) throw msgpack::type_error();
|
msgpack::object const& operator()(msgpack::object const& o, my_class& v) const {
|
||||||
v = my_class(
|
if (o.type != msgpack::type::ARRAY) throw msgpack::type_error();
|
||||||
o.via.array.ptr[0].as<std::string>(),
|
if (o.via.array.size != 2) throw msgpack::type_error();
|
||||||
o.via.array.ptr[1].as<int>());
|
v = my_class(
|
||||||
return o;
|
o.via.array.ptr[0].as<std::string>(),
|
||||||
}
|
o.via.array.ptr[1].as<int>());
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct pack<my_class> {
|
||||||
|
template <typename Stream>
|
||||||
|
packer<Stream>& operator()(msgpack::packer<Stream>& o, my_class const& v) const {
|
||||||
|
// packing member variables as an array.
|
||||||
|
o.pack_array(2);
|
||||||
|
o.pack(v.get_name());
|
||||||
|
o.pack(v.get_age());
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline packer<Stream>& operator<< (msgpack::packer<Stream>& o, my_class const& v) {
|
struct object_with_zone<my_class> {
|
||||||
// packing member variables as an array.
|
void operator()(msgpack::object::with_zone& o, my_class const& v) const {
|
||||||
o.pack_array(2);
|
o.type = type::ARRAY;
|
||||||
o.pack(v.get_name());
|
o.via.array.size = 2;
|
||||||
o.pack(v.get_age());
|
o.via.array.ptr = static_cast<msgpack::object*>(
|
||||||
return o;
|
o.zone.allocate_align(sizeof(msgpack::object) * o.via.array.size));
|
||||||
}
|
o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone);
|
||||||
|
o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone);
|
||||||
inline void operator<< (msgpack::object::with_zone& o, my_class const& v) {
|
}
|
||||||
o.type = type::ARRAY;
|
};
|
||||||
o.via.array.size = 2;
|
|
||||||
o.via.array.ptr = static_cast<object*>(o.zone.allocate_align(sizeof(object) * o.via.array.size));
|
|
||||||
o.via.array.ptr[0] = msgpack::object(v.get_name(), o.zone);
|
|
||||||
o.via.array.ptr[1] = msgpack::object(v.get_age(), o.zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,12 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <msgpack_fwd.hpp>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
enum my_enum {
|
enum my_enum {
|
||||||
elem1,
|
elem1,
|
||||||
elem2,
|
elem2,
|
||||||
@@ -28,8 +29,6 @@ enum my_enum {
|
|||||||
|
|
||||||
MSGPACK_ADD_ENUM(my_enum);
|
MSGPACK_ADD_ENUM(my_enum);
|
||||||
|
|
||||||
#include <msgpack.hpp>
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
{ // pack, unpack
|
{ // pack, unpack
|
||||||
|
|||||||
119
example/cpp03/map_based_versionup.cpp
Normal file
119
example/cpp03/map_based_versionup.cpp
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
// MessagePack for C++ example
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct base1 {
|
||||||
|
base1():a("default") {}
|
||||||
|
std::string a;
|
||||||
|
MSGPACK_DEFINE_MAP(a);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct v1 : base1 {
|
||||||
|
v1():name("default"), age(0) {}
|
||||||
|
std::string name;
|
||||||
|
int age;
|
||||||
|
MSGPACK_DEFINE_MAP(MSGPACK_BASE_MAP(base1), name, age);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct base2 {
|
||||||
|
base2():a("default") {}
|
||||||
|
std::string a;
|
||||||
|
MSGPACK_DEFINE_MAP(a);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Removed: base1, name
|
||||||
|
// Added : base2, address
|
||||||
|
struct v2 : base2 {
|
||||||
|
v2(): age(0), address("default") {}
|
||||||
|
int age;
|
||||||
|
std::string address;
|
||||||
|
MSGPACK_DEFINE_MAP(MSGPACK_BASE_MAP(base2), age, address);
|
||||||
|
};
|
||||||
|
|
||||||
|
// The member variable "age" is in common between v1 and v2.
|
||||||
|
|
||||||
|
void print(std::string const& buf) {
|
||||||
|
for (std::string::const_iterator it = buf.begin(), end = buf.end();
|
||||||
|
it != end;
|
||||||
|
++it) {
|
||||||
|
std::cout
|
||||||
|
<< std::setw(2)
|
||||||
|
<< std::hex
|
||||||
|
<< std::setfill('0')
|
||||||
|
<< (static_cast<int>(*it) & 0xff)
|
||||||
|
<< ' ';
|
||||||
|
}
|
||||||
|
std::cout << std::dec << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
{ // pack v1, unpack, convert to v2
|
||||||
|
v1 v;
|
||||||
|
v.a = "ABC";
|
||||||
|
v.name = "John Smith";
|
||||||
|
v.age = 35;
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
msgpack::pack(ss, v);
|
||||||
|
|
||||||
|
print(ss.str());
|
||||||
|
|
||||||
|
msgpack::unpacked unp = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
|
|
||||||
|
msgpack::object obj = unp.get();
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
|
||||||
|
v2 newv = obj.as<v2>();
|
||||||
|
|
||||||
|
std::cout << "v2::a " << newv.a << std::endl;
|
||||||
|
std::cout << "v2::age " << newv.age << std::endl;
|
||||||
|
std::cout << "v2::address " << newv.address << std::endl;
|
||||||
|
|
||||||
|
// "age" is set from v1
|
||||||
|
assert(newv.a == "default");
|
||||||
|
assert(newv.age == 35);
|
||||||
|
assert(newv.address == "default");
|
||||||
|
}
|
||||||
|
{ // create v2 object with zone, convert to v1
|
||||||
|
v2 v;
|
||||||
|
v.a = "DEF";
|
||||||
|
v.age = 42;
|
||||||
|
v.address = "Tokyo";
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj(v, z);
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
|
||||||
|
v1 newv = obj.as<v1>();
|
||||||
|
|
||||||
|
std::cout << "v1::a " << newv.a << std::endl;
|
||||||
|
std::cout << "v1::name " << newv.name << std::endl;
|
||||||
|
std::cout << "v1::age " << newv.age << std::endl;
|
||||||
|
|
||||||
|
// "age" is set from v2
|
||||||
|
assert(newv.a == "default");
|
||||||
|
assert(newv.name == "default");
|
||||||
|
assert(newv.age == 42);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,8 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
// This example uses obsolete APIs
|
||||||
|
// See protocol_new.cpp
|
||||||
namespace myprotocol {
|
namespace myprotocol {
|
||||||
using namespace msgpack::type;
|
using namespace msgpack::type;
|
||||||
using msgpack::define;
|
using msgpack::define;
|
||||||
|
|||||||
92
example/cpp03/protocol_new.cpp
Normal file
92
example/cpp03/protocol_new.cpp
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
// MessagePack for C++ example
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
// This example uses obsolete APIs
|
||||||
|
// See protocol_new.cpp
|
||||||
|
namespace myprotocol {
|
||||||
|
struct Get {
|
||||||
|
Get() {}
|
||||||
|
Get(uint32_t f, const std::string& k) : flags(f), key(k) {}
|
||||||
|
uint32_t flags;
|
||||||
|
std::string key;
|
||||||
|
MSGPACK_DEFINE(flags, key);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::vector<Get> MultiGet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// send Get request
|
||||||
|
std::stringstream stream;
|
||||||
|
{
|
||||||
|
myprotocol::Get req;
|
||||||
|
req.flags = 0;
|
||||||
|
req.key = "key0";
|
||||||
|
msgpack::pack(stream, req);
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.seekg(0);
|
||||||
|
|
||||||
|
// receive Get request
|
||||||
|
{
|
||||||
|
std::string buffer(stream.str());
|
||||||
|
|
||||||
|
msgpack::unpacked result;
|
||||||
|
msgpack::unpack(result, buffer.data(), buffer.size());
|
||||||
|
msgpack::object o = result.get();
|
||||||
|
|
||||||
|
myprotocol::Get req;
|
||||||
|
o.convert(req);
|
||||||
|
std::cout << "received: " << o << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
stream.str("");
|
||||||
|
|
||||||
|
|
||||||
|
// send MultiGet request
|
||||||
|
{
|
||||||
|
myprotocol::MultiGet req;
|
||||||
|
req.push_back( myprotocol::Get(1, "key1") );
|
||||||
|
req.push_back( myprotocol::Get(2, "key2") );
|
||||||
|
req.push_back( myprotocol::Get(3, "key3") );
|
||||||
|
msgpack::pack(stream, req);
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.seekg(0);
|
||||||
|
|
||||||
|
// receive MultiGet request
|
||||||
|
{
|
||||||
|
std::string buffer(stream.str());
|
||||||
|
|
||||||
|
msgpack::unpacked result;
|
||||||
|
msgpack::unpack(result, buffer.data(), buffer.size());
|
||||||
|
msgpack::object o = result.get();
|
||||||
|
|
||||||
|
|
||||||
|
myprotocol::MultiGet req;
|
||||||
|
o.convert(req);
|
||||||
|
std::cout << "received: " << o << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,8 +40,11 @@ int main() {
|
|||||||
|
|
||||||
// msgpack array is constructed on z.
|
// msgpack array is constructed on z.
|
||||||
msgpack::object obj = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset);
|
msgpack::object obj = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset);
|
||||||
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<std::vector<int> >() == v);
|
assert(obj.as<std::vector<int> >() == v);
|
||||||
|
|
||||||
// msgpack str is constructed on z.
|
// msgpack str is constructed on z.
|
||||||
assert(msgpack::unpack(z, ss.str().data(), ss.str().size(), offset).as<std::string>() == s);
|
std::string const& str = msgpack::unpack(z, ss.str().data(), ss.str().size(), offset).as<std::string>();
|
||||||
|
std::cout << str << std::endl;
|
||||||
|
assert(str == s);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ template <typename T, std::size_t level>
|
|||||||
struct vecvec {
|
struct vecvec {
|
||||||
typedef std::vector<typename vecvec<T, level - 1>::type> type;
|
typedef std::vector<typename vecvec<T, level - 1>::type> type;
|
||||||
static void fill(type& v, std::size_t num_of_elems, T const& val) {
|
static void fill(type& v, std::size_t num_of_elems, T const& val) {
|
||||||
for (int elem = 0; elem < num_of_elems; ++elem) {
|
for (std::size_t elem = 0; elem < num_of_elems; ++elem) {
|
||||||
typename vecvec<T, level - 1>::type child;
|
typename vecvec<T, level - 1>::type child;
|
||||||
vecvec<T, level - 1>::fill(child, num_of_elems, val);
|
vecvec<T, level - 1>::fill(child, num_of_elems, val);
|
||||||
v.push_back(child);
|
v.push_back(child);
|
||||||
@@ -41,7 +41,7 @@ template <typename T>
|
|||||||
struct vecvec<T, 0> {
|
struct vecvec<T, 0> {
|
||||||
typedef std::vector<T> type;
|
typedef std::vector<T> type;
|
||||||
static void fill(type& v, std::size_t num_of_elems, T const& val) {
|
static void fill(type& v, std::size_t num_of_elems, T const& val) {
|
||||||
for (int elem = 0; elem < num_of_elems; ++elem) {
|
for (std::size_t elem = 0; elem < num_of_elems; ++elem) {
|
||||||
v.push_back(val);
|
v.push_back(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,9 +50,9 @@ struct vecvec<T, 0> {
|
|||||||
void test_array_of_array() {
|
void test_array_of_array() {
|
||||||
std::cout << "[TEST][array_of_array]" << std::endl;
|
std::cout << "[TEST][array_of_array]" << std::endl;
|
||||||
// setup
|
// setup
|
||||||
int const depth = 16;
|
int const depth = 4;
|
||||||
std::cout << "Setting up array data..." << std::endl;
|
std::cout << "Setting up array data..." << std::endl;
|
||||||
typename vecvec<int, depth>::type v1;
|
vecvec<int, depth>::type v1;
|
||||||
vecvec<int, depth>::fill(v1, 3, 42);
|
vecvec<int, depth>::fill(v1, 3, 42);
|
||||||
|
|
||||||
std::cout << "Start packing..." << std::endl;
|
std::cout << "Start packing..." << std::endl;
|
||||||
@@ -77,7 +77,7 @@ void test_array_of_array() {
|
|||||||
std::cout << result << std::endl;
|
std::cout << result << std::endl;
|
||||||
}
|
}
|
||||||
std::cout << "Unpack finished..." << std::endl;
|
std::cout << "Unpack finished..." << std::endl;
|
||||||
typename vecvec<int, depth>::type v2;
|
vecvec<int, depth>::type v2;
|
||||||
std::cout << "Start converting..." << std::endl;
|
std::cout << "Start converting..." << std::endl;
|
||||||
{
|
{
|
||||||
boost::timer::cpu_timer timer;
|
boost::timer::cpu_timer timer;
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ private:
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int pair[2];
|
int pair[2];
|
||||||
pipe(pair);
|
if (pipe(pair) != 0) return -1;
|
||||||
|
|
||||||
// run server thread
|
// run server thread
|
||||||
Server srv(pair[0]);
|
Server srv(pair[0]);
|
||||||
|
|||||||
28
example/cpp11/CMakeLists.txt
Normal file
28
example/cpp11/CMakeLists.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
IF (MSGPACK_CXX11)
|
||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
../include
|
||||||
|
)
|
||||||
|
|
||||||
|
LIST (APPEND exec_PROGRAMS
|
||||||
|
container.cpp
|
||||||
|
non_def_con_class.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
FOREACH (source_file ${exec_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
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")
|
||||||
|
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 ()
|
||||||
@@ -29,15 +29,15 @@
|
|||||||
#include <msgpack.hpp>
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
void array() {
|
void array() {
|
||||||
std::array<int, 5> a { 1, 2, 3, 4, 5 };
|
std::array<int, 5> a { { 1, 2, 3, 4, 5 } };
|
||||||
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::unpacked und = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
msgpack::object obj = und.get();
|
msgpack::object obj = und.get();
|
||||||
std::array<int, 5> const& new_a = obj.as<std::array<int, 5>>();
|
|
||||||
|
|
||||||
assert(new_a == a);
|
std::cout << obj << std::endl;
|
||||||
|
assert((obj.as<std::array<int, 5>>()) == a);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tuple() {
|
void tuple() {
|
||||||
@@ -47,6 +47,8 @@ void tuple() {
|
|||||||
|
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
auto obj = und.get();
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
assert(obj.as<decltype(t)>() == t);
|
assert(obj.as<decltype(t)>() == t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +58,10 @@ void unordered_map() {
|
|||||||
msgpack::pack(ss, m);
|
msgpack::pack(ss, m);
|
||||||
|
|
||||||
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
assert(und.get().as<decltype(m)>() == m);
|
msgpack::object obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(m)>() == m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void unordered_set() {
|
void unordered_set() {
|
||||||
@@ -64,7 +69,11 @@ void unordered_set() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, s);
|
msgpack::pack(ss, s);
|
||||||
|
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size()).get().as<decltype(s)>() == s);
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(s)>() == s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void forward_list() {
|
void forward_list() {
|
||||||
@@ -73,11 +82,15 @@ void forward_list() {
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
msgpack::pack(ss, f);
|
msgpack::pack(ss, f);
|
||||||
|
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size()).get().as<type>() == f);
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||||
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<type>() == f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void combi() {
|
void combi() {
|
||||||
std::array<int, 5> a { 1, 2, 3, 4, 5 };
|
std::array<int, 5> a { { 1, 2, 3, 4, 5 } };
|
||||||
std::tuple<bool, std::string, int> t {true, "ABC", 42};
|
std::tuple<bool, std::string, int> t {true, "ABC", 42};
|
||||||
std::unordered_map<std::string, int> m { {"ABC", 1}, {"DEF", 3} };
|
std::unordered_map<std::string, int> m { {"ABC", 1}, {"DEF", 3} };
|
||||||
std::unordered_set<std::string> s { "ABC", "DEF" };
|
std::unordered_set<std::string> s { "ABC", "DEF" };
|
||||||
@@ -91,11 +104,47 @@ void combi() {
|
|||||||
msgpack::pack(ss, f);
|
msgpack::pack(ss, f);
|
||||||
|
|
||||||
std::size_t offset = 0;
|
std::size_t offset = 0;
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size(), offset).get().as<decltype(a)>() == a);
|
std::cout << "offset: " << offset << std::endl;
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size(), offset).get().as<decltype(t)>() == t);
|
{
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size(), offset).get().as<decltype(m)>() == m);
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size(), offset).get().as<decltype(s)>() == s);
|
auto obj = und.get();
|
||||||
assert(msgpack::unpack(ss.str().data(), ss.str().size(), offset).get().as<decltype(f)>() == f);
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(a)>() == a);
|
||||||
|
}
|
||||||
|
std::cout << "offset: " << offset << std::endl;
|
||||||
|
{
|
||||||
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(t)>() == t);
|
||||||
|
}
|
||||||
|
std::cout << "offset: " << offset << std::endl;
|
||||||
|
{
|
||||||
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(m)>() == m);
|
||||||
|
}
|
||||||
|
std::cout << "offset: " << offset << std::endl;
|
||||||
|
{
|
||||||
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(s)>() == s);
|
||||||
|
}
|
||||||
|
std::cout << "offset: " << offset << std::endl;
|
||||||
|
{
|
||||||
|
auto und = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
|
||||||
|
auto obj = und.get();
|
||||||
|
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(obj.as<decltype(f)>() == f);
|
||||||
|
}
|
||||||
|
std::cout << "offset: " << offset << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|||||||
59
example/cpp11/non_def_con_class.cpp
Normal file
59
example/cpp11/non_def_con_class.cpp
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
// MessagePack for C++ example
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
#include <memory>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <msgpack.hpp>
|
||||||
|
|
||||||
|
struct my {
|
||||||
|
my() = delete;
|
||||||
|
|
||||||
|
// target class should be either copyable or movable (or both).
|
||||||
|
my(my const&) = delete;
|
||||||
|
my(my&&) = default;
|
||||||
|
|
||||||
|
my(int a):a(a) {}
|
||||||
|
int a;
|
||||||
|
MSGPACK_DEFINE(a);
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS) {
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct as<my> {
|
||||||
|
my operator()(msgpack::object const& o) const {
|
||||||
|
if (o.type != msgpack::type::ARRAY) throw msgpack::type_error();
|
||||||
|
if (o.via.array.size != 1) throw msgpack::type_error();
|
||||||
|
return my(o.via.array.ptr[0].as<int>());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
my m1(42);
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object obj(m1, z);
|
||||||
|
std::cout << obj << std::endl;
|
||||||
|
assert(m1.a == obj.as<my>().a);
|
||||||
|
}
|
||||||
1
external/boost/predef
vendored
Submodule
1
external/boost/predef
vendored
Submodule
Submodule external/boost/predef added at c14eafa3ef
1
external/boost/preprocessor
vendored
Submodule
1
external/boost/preprocessor
vendored
Submodule
Submodule external/boost/preprocessor added at 9cb039ab8b
@@ -23,3 +23,4 @@
|
|||||||
#include "msgpack/sbuffer.hpp"
|
#include "msgpack/sbuffer.hpp"
|
||||||
#include "msgpack/vrefbuffer.hpp"
|
#include "msgpack/vrefbuffer.hpp"
|
||||||
#include "msgpack/version.hpp"
|
#include "msgpack/version.hpp"
|
||||||
|
#include "msgpack/type.hpp"
|
||||||
|
|||||||
92
include/msgpack/adaptor/adaptor_base.hpp
Normal file
92
include/msgpack/adaptor/adaptor_base.hpp
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_ADAPTOR_BASE_HPP
|
||||||
|
#define MSGPACK_ADAPTOR_BASE_HPP
|
||||||
|
|
||||||
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
template <typename Stream>
|
||||||
|
class packer;
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
// Adaptor functors
|
||||||
|
|
||||||
|
template <typename T, typename Enabler = void>
|
||||||
|
struct convert {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, T& v) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Enabler = void>
|
||||||
|
struct pack {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, T const& v) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Enabler = void>
|
||||||
|
struct object {
|
||||||
|
void operator()(msgpack::object& o, T const& v) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Enabler = void>
|
||||||
|
struct object_with_zone {
|
||||||
|
void operator()(msgpack::object::with_zone& o, T const& v) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
// operators
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline
|
||||||
|
msgpack::object const& operator>> (msgpack::object const& o, T& v) {
|
||||||
|
return adaptor::convert<T>()(o, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Stream, typename T>
|
||||||
|
inline
|
||||||
|
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, T const& v) {
|
||||||
|
return adaptor::pack<T>()(o, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline
|
||||||
|
void operator<< (msgpack::object& o, T const& v) {
|
||||||
|
adaptor::object<T>()(o, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline
|
||||||
|
void operator<< (msgpack::object::with_zone& o, T const& v) {
|
||||||
|
adaptor::object_with_zone<T>()(o, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|
||||||
|
#endif // MSGPACK_ADAPTOR_BASE_HPP
|
||||||
182
include/msgpack/adaptor/array_ref.hpp
Normal file
182
include/msgpack/adaptor/array_ref.hpp
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
//
|
||||||
|
// 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_TYPE_ARRAY_REF_HPP
|
||||||
|
#define MSGPACK_TYPE_ARRAY_REF_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace type {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct array_ref {
|
||||||
|
array_ref() : data(nullptr) {}
|
||||||
|
array_ref(T& t) : data(&t) {}
|
||||||
|
|
||||||
|
T* data;
|
||||||
|
|
||||||
|
template <typename U>
|
||||||
|
bool operator==(array_ref<U> const& t) const {
|
||||||
|
return *data == *t.data;
|
||||||
|
}
|
||||||
|
template <typename U>
|
||||||
|
bool operator!=(array_ref<U> const& t) const {
|
||||||
|
return !(*data == *t.data);
|
||||||
|
}
|
||||||
|
template <typename U>
|
||||||
|
bool operator< (array_ref<U> const& t) const
|
||||||
|
{
|
||||||
|
return *data < *t.data;
|
||||||
|
}
|
||||||
|
template <typename U>
|
||||||
|
bool operator> (array_ref<U> const& t) const
|
||||||
|
{
|
||||||
|
return *t.data < *data;
|
||||||
|
}
|
||||||
|
template <typename U>
|
||||||
|
bool operator<= (array_ref<U> const& t) const
|
||||||
|
{
|
||||||
|
return !(*t.data < *data);
|
||||||
|
}
|
||||||
|
template <typename U>
|
||||||
|
bool operator>= (array_ref<U> const& t) const
|
||||||
|
{
|
||||||
|
return !(*data < *t.data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline array_ref<T const> make_array_ref(T const& t) {
|
||||||
|
return array_ref<T const>(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline array_ref<T> make_array_ref(T& t) {
|
||||||
|
return array_ref<T>(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace type
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct convert<msgpack::type::array_ref<T> > {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<T>& v) const {
|
||||||
|
if (!v.data) { throw msgpack::type_error(); }
|
||||||
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
|
if (v.data->size() < o.via.bin.size) { throw msgpack::type_error(); }
|
||||||
|
if (o.via.array.size > 0) {
|
||||||
|
msgpack::object* p = o.via.array.ptr;
|
||||||
|
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
||||||
|
typename T::iterator it = v.data->begin();
|
||||||
|
do {
|
||||||
|
p->convert(*it);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct convert<msgpack::type::array_ref<std::vector<T> > > {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::array_ref<std::vector<T> >& v) const {
|
||||||
|
if (!v.data) { throw msgpack::type_error(); }
|
||||||
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
|
v.data->resize(o.via.bin.size);
|
||||||
|
if (o.via.array.size > 0) {
|
||||||
|
msgpack::object* p = o.via.array.ptr;
|
||||||
|
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
||||||
|
typename std::vector<T>::iterator it = v.data->begin();
|
||||||
|
do {
|
||||||
|
p->convert(*it);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct pack<msgpack::type::array_ref<T> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::array_ref<T>& v) const {
|
||||||
|
if (!v.data) { throw msgpack::type_error(); }
|
||||||
|
uint32_t size = checked_get_container_size(v.data->size());
|
||||||
|
o.pack_array(size);
|
||||||
|
for (typename T::const_iterator it(v.data->begin()), it_end(v.data->end());
|
||||||
|
it != it_end; ++it) {
|
||||||
|
o.pack(*it);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct object_with_zone<msgpack::type::array_ref<T> > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const msgpack::type::array_ref<T>& v) const {
|
||||||
|
if (!v.data) { throw msgpack::type_error(); }
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
if (v.data->empty()) {
|
||||||
|
o.via.array.ptr = nullptr;
|
||||||
|
o.via.array.size = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uint32_t size = checked_get_container_size(v.data->size());
|
||||||
|
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||||
|
msgpack::object* const pend = p + size;
|
||||||
|
o.via.array.ptr = p;
|
||||||
|
o.via.array.size = size;
|
||||||
|
typename T::const_iterator it(v.data->begin());
|
||||||
|
do {
|
||||||
|
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||||
|
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
||||||
|
*p = msgpack::object(*it, o.zone);
|
||||||
|
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_ARRAY_REF_HPP
|
||||||
@@ -19,39 +19,55 @@
|
|||||||
#define MSGPACK_TYPE_BOOL_HPP
|
#define MSGPACK_TYPE_BOOL_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, bool& v)
|
namespace adaptor {
|
||||||
{
|
|
||||||
if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); }
|
|
||||||
v = o.via.boolean;
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const bool& v)
|
struct convert<bool> {
|
||||||
{
|
msgpack::object const& operator()(msgpack::object const& o, bool& v) const {
|
||||||
if(v) { o.pack_true(); }
|
if(o.type != msgpack::type::BOOLEAN) { throw msgpack::type_error(); }
|
||||||
else { o.pack_false(); }
|
v = o.via.boolean;
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, bool v)
|
template <>
|
||||||
{
|
struct pack<bool> {
|
||||||
o.type = msgpack::type::BOOLEAN;
|
template <typename Stream>
|
||||||
o.via.boolean = v;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const bool& v) const {
|
||||||
}
|
if(v) { o.pack_true(); }
|
||||||
|
else { o.pack_false(); }
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, bool v)
|
template <>
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
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)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,39 +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_TYPE_BOOL_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_BOOL_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, bool& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const bool& v);
|
|
||||||
void operator<< (msgpack::object& o, bool v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, bool v);
|
|
||||||
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_BOOL_FWD_HPP
|
|
||||||
168
include/msgpack/adaptor/boost/fusion.hpp
Normal file
168
include/msgpack/adaptor/boost/fusion.hpp
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_TYPE_BOOST_FUSION_HPP
|
||||||
|
#define MSGPACK_TYPE_BOOST_FUSION_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
#include "msgpack/meta.hpp"
|
||||||
|
|
||||||
|
#if !defined (MSGPACK_USE_CPP03)
|
||||||
|
#include "msgpack/adaptor/cpp11/tuple.hpp"
|
||||||
|
#endif // #if !defined (MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||||
|
#include <boost/fusion/algorithm/iteration/for_each.hpp>
|
||||||
|
#include <boost/fusion/sequence/intrinsic/at.hpp>
|
||||||
|
#include <boost/fusion/include/mpl.hpp>
|
||||||
|
#include <boost/mpl/size.hpp>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
#if !defined (MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct as<
|
||||||
|
T,
|
||||||
|
typename msgpack::enable_if<
|
||||||
|
boost::fusion::traits::is_sequence<T>::value &&
|
||||||
|
boost::mpl::fold<
|
||||||
|
T,
|
||||||
|
boost::mpl::bool_<true>,
|
||||||
|
boost::mpl::if_ <
|
||||||
|
boost::mpl::and_<
|
||||||
|
boost::mpl::_1,
|
||||||
|
msgpack::has_as<boost::mpl::_2>
|
||||||
|
>,
|
||||||
|
boost::mpl::bool_<true>,
|
||||||
|
boost::mpl::bool_<false>
|
||||||
|
>
|
||||||
|
>::type::value
|
||||||
|
>::type
|
||||||
|
> {
|
||||||
|
T operator()(msgpack::object const& o) const {
|
||||||
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
|
if (o.via.array.size != checked_get_container_size(boost::mpl::size<T>::value)) {
|
||||||
|
throw msgpack::type_error();
|
||||||
|
}
|
||||||
|
using tuple_t = decltype(to_tuple(std::declval<T>(), gen_seq<boost::mpl::size<T>::value>()));
|
||||||
|
return to_t(
|
||||||
|
o.as<tuple_t>(),
|
||||||
|
msgpack::gen_seq<boost::mpl::size<T>::value>());
|
||||||
|
}
|
||||||
|
template<std::size_t... Is, typename U>
|
||||||
|
static std::tuple<
|
||||||
|
typename std::remove_reference<
|
||||||
|
typename boost::fusion::result_of::at_c<T, Is>::type
|
||||||
|
>::type...>
|
||||||
|
to_tuple(U const& u, seq<Is...>) {
|
||||||
|
return std::make_tuple(boost::fusion::at_c<Is>(u)...);
|
||||||
|
}
|
||||||
|
template<std::size_t... Is, typename U>
|
||||||
|
static T to_t(U const& u, seq<Is...>) {
|
||||||
|
return T(std::get<Is>(u)...);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !defined (MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct convert<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, T& v) const {
|
||||||
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
|
if (o.via.array.size != checked_get_container_size(boost::fusion::size(v))) {
|
||||||
|
throw msgpack::type_error();
|
||||||
|
}
|
||||||
|
uint32_t index = 0;
|
||||||
|
boost::fusion::for_each(v, convert_imp(o, index));
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
struct convert_imp {
|
||||||
|
convert_imp(msgpack::object const& obj, uint32_t& index):obj_(obj), index_(index) {}
|
||||||
|
template <typename U>
|
||||||
|
void operator()(U& v) const {
|
||||||
|
msgpack::adaptor::convert<U>()(obj_.via.array.ptr[index_++], v);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
msgpack::object const& obj_;
|
||||||
|
uint32_t& index_;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct pack<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const T& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(boost::fusion::size(v));
|
||||||
|
o.pack_array(size);
|
||||||
|
boost::fusion::for_each(v, pack_imp<Stream>(o));
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
template <typename Stream>
|
||||||
|
struct pack_imp {
|
||||||
|
pack_imp(msgpack::packer<Stream>& stream):stream_(stream) {}
|
||||||
|
template <typename U>
|
||||||
|
void operator()(U const& v) const {
|
||||||
|
stream_.pack(v);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
msgpack::packer<Stream>& stream_;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct object_with_zone<T, typename msgpack::enable_if<boost::fusion::traits::is_sequence<T>::value>::type > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const T& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(boost::fusion::size(v));
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||||
|
o.via.array.size = size;
|
||||||
|
uint32_t count = 0;
|
||||||
|
boost::fusion::for_each(v, with_zone_imp(o, count));
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
struct with_zone_imp {
|
||||||
|
with_zone_imp(msgpack::object::with_zone const& obj, uint32_t& count):obj_(obj), count_(count) {}
|
||||||
|
template <typename U>
|
||||||
|
void operator()(U const& v) const {
|
||||||
|
obj_.via.array.ptr[count_++] = msgpack::object(v, obj_.zone);
|
||||||
|
}
|
||||||
|
msgpack::object::with_zone const& obj_;
|
||||||
|
uint32_t& count_;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_BOOST_FUSION_HPP
|
||||||
438
include/msgpack/adaptor/boost/msgpack_variant.hpp
Normal file
438
include/msgpack/adaptor/boost/msgpack_variant.hpp
Normal file
@@ -0,0 +1,438 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
||||||
|
#define MSGPACK_TYPE_BOOST_MSGPACK_VARIANT_HPP
|
||||||
|
|
||||||
|
#if defined(MSGPACK_USE_BOOST)
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
#include "msgpack/adaptor/boost/string_ref.hpp"
|
||||||
|
|
||||||
|
#include "msgpack/adaptor/nil.hpp"
|
||||||
|
#include "msgpack/adaptor/bool.hpp"
|
||||||
|
#include "msgpack/adaptor/int.hpp"
|
||||||
|
#include "msgpack/adaptor/float.hpp"
|
||||||
|
#include "msgpack/adaptor/string.hpp"
|
||||||
|
#include "msgpack/adaptor/vector_char.hpp"
|
||||||
|
#include "msgpack/adaptor/raw.hpp"
|
||||||
|
#include "msgpack/adaptor/ext.hpp"
|
||||||
|
#include "msgpack/adaptor/vector.hpp"
|
||||||
|
#include "msgpack/adaptor/map.hpp"
|
||||||
|
|
||||||
|
#include <boost/variant.hpp>
|
||||||
|
#include <boost/operators.hpp>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace type {
|
||||||
|
|
||||||
|
|
||||||
|
template <typename STR, typename BIN, typename EXT>
|
||||||
|
struct basic_variant :
|
||||||
|
boost::variant<
|
||||||
|
nil, // 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
|
||||||
104
include/msgpack/adaptor/boost/optional.hpp
Normal file
104
include/msgpack/adaptor/boost/optional.hpp
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_TYPE_BOOST_OPTIONAL_HPP
|
||||||
|
#define MSGPACK_TYPE_BOOST_OPTIONAL_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.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
|
||||||
95
include/msgpack/adaptor/boost/string_ref.hpp
Normal file
95
include/msgpack/adaptor/boost/string_ref.hpp
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_TYPE_BOOST_STRING_REF_HPP
|
||||||
|
#define MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
||||||
|
|
||||||
|
#include <boost/version.hpp>
|
||||||
|
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
|
#include <boost/utility/string_ref.hpp>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct convert<boost::string_ref> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, boost::string_ref& v) const {
|
||||||
|
switch (o.type) {
|
||||||
|
case msgpack::type::BIN:
|
||||||
|
v = boost::string_ref(o.via.bin.ptr, o.via.bin.size);
|
||||||
|
break;
|
||||||
|
case msgpack::type::STR:
|
||||||
|
v = boost::string_ref(o.via.str.ptr, o.via.str.size);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw msgpack::type_error();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct pack<boost::string_ref> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::string_ref& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
o.pack_str(size);
|
||||||
|
o.pack_str_body(v.data(), size);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct object<boost::string_ref> {
|
||||||
|
void operator()(msgpack::object& o, const boost::string_ref& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
o.type = msgpack::type::STR;
|
||||||
|
o.via.str.ptr = v.data();
|
||||||
|
o.via.str.size = size;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct object_with_zone<boost::string_ref> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const boost::string_ref& v) const {
|
||||||
|
static_cast<msgpack::object&>(o) << v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_BOOST_STRING_REF_HPP
|
||||||
@@ -26,52 +26,139 @@
|
|||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename Stream>
|
namespace adaptor {
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const char* v)
|
|
||||||
{
|
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
|
||||||
o.pack_str(size);
|
|
||||||
o.pack_str_body(v, size);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const char* v)
|
template <>
|
||||||
{
|
struct pack<const char*> {
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
template <typename Stream>
|
||||||
o.type = msgpack::type::STR;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const char* v) const {
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
uint32_t size = checked_get_container_size(std::strlen(v));
|
||||||
o.via.str.ptr = ptr;
|
o.pack_str(size);
|
||||||
o.via.str.size = size;
|
o.pack_str_body(v, size);
|
||||||
std::memcpy(ptr, v, size);
|
return o;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, const char* v)
|
template <>
|
||||||
{
|
struct object_with_zone<const char*> {
|
||||||
uint32_t size = checked_get_container_size(std::strlen(v));
|
void operator()(msgpack::object::with_zone& o, const char* v) const {
|
||||||
o.type = msgpack::type::STR;
|
uint32_t size = checked_get_container_size(std::strlen(v));
|
||||||
o.via.str.ptr = v;
|
o.type = msgpack::type::STR;
|
||||||
o.via.str.size = size;
|
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 <typename Stream>
|
template <>
|
||||||
inline packer<Stream>& operator<< (packer<Stream>& o, char* v)
|
struct object<const char*> {
|
||||||
{
|
void operator()(msgpack::object& o, const char* v) const {
|
||||||
return msgpack::operator<<(o, static_cast<const char*>(v));
|
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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (object::with_zone& o, char* v)
|
|
||||||
{
|
|
||||||
msgpack::operator<<(o, static_cast<const char*>(v));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (object& o, char* v)
|
template <>
|
||||||
{
|
struct pack<char*> {
|
||||||
msgpack::operator<<(o, static_cast<const char*>(v));
|
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)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_CHAR_PTR_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_CHAR_PTR_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const char* v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const char* v);
|
|
||||||
void operator<< (msgpack::object& o, const char* v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
packer<Stream>& operator<< (packer<Stream>& o, char* v);
|
|
||||||
void operator<< (object::with_zone& o, char* v);
|
|
||||||
void operator<< (object& o, char* v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_CHAR_PTR_FWD_HPP
|
|
||||||
@@ -23,7 +23,9 @@
|
|||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
struct container_size_overflow : public std::runtime_error {
|
struct container_size_overflow : public std::runtime_error {
|
||||||
explicit container_size_overflow(const std::string& msg)
|
explicit container_size_overflow(const std::string& msg)
|
||||||
@@ -42,7 +44,17 @@ inline void check_container_size(std::size_t size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline void check_container_size<4>(std::size_t size) {
|
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
|
} // namespace detail
|
||||||
@@ -54,7 +66,9 @@ inline uint32_t checked_get_container_size(T size) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -20,56 +20,126 @@
|
|||||||
#define MSGPACK_CPP11_ARRAY_HPP
|
#define MSGPACK_CPP11_ARRAY_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
#include "msgpack/meta.hpp"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
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>
|
template <typename T, std::size_t N>
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::array<T, N>& v) {
|
struct as_impl {
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
static std::array<T, N> as(msgpack::object const& o) {
|
||||||
if(o.via.array.size != N) { throw msgpack::type_error(); }
|
msgpack::object* p = o.via.array.ptr + N - 1;
|
||||||
if(o.via.array.size > 0) {
|
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;
|
msgpack::object* p = o.via.array.ptr;
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
return std::array<T, 1>{{p->as<T>()}};
|
||||||
T* it = &v[0];
|
|
||||||
do {
|
|
||||||
p->convert(*it);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T, std::size_t N>
|
template <typename T>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::array<T, N>& v) {
|
struct as_impl<T, 0> {
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
static std::array<T, 0> as(msgpack::object const&) {
|
||||||
o.pack_array(size);
|
return std::array<T, 0>();
|
||||||
for(auto const& e : v) o.pack(e);
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
} // namespace array
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
template <typename T, std::size_t N>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::array<T, N>& v) {
|
struct as<std::array<T, N>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
o.type = msgpack::type::ARRAY;
|
std::array<T, N> operator()(msgpack::object const& o) const {
|
||||||
if(v.empty()) {
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
o.via.array.ptr = nullptr;
|
if(o.via.array.size != N) { throw msgpack::type_error(); }
|
||||||
o.via.array.size = 0;
|
return detail::array::as_impl<T, N>::as(o);
|
||||||
} 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);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
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
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -19,66 +19,79 @@
|
|||||||
#define MSGPACK_TYPE_ARRAY_CHAR_HPP
|
#define MSGPACK_TYPE_ARRAY_CHAR_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::array<char, N>& v)
|
struct convert<std::array<char, N>> {
|
||||||
{
|
msgpack::object const& operator()(msgpack::object const& o, std::array<char, N>& v) const {
|
||||||
switch (o.type) {
|
switch (o.type) {
|
||||||
case msgpack::type::BIN:
|
case msgpack::type::BIN:
|
||||||
if(o.via.bin.size != N) { throw msgpack::type_error(); }
|
if(o.via.bin.size != N) { throw msgpack::type_error(); }
|
||||||
std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size);
|
std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size);
|
||||||
break;
|
break;
|
||||||
case msgpack::type::STR:
|
case msgpack::type::STR:
|
||||||
if(o.via.str.size != N) { throw msgpack::type_error(); }
|
if(o.via.str.size != N) { throw msgpack::type_error(); }
|
||||||
std::memcpy(v.data(), o.via.str.ptr, N);
|
std::memcpy(v.data(), o.via.str.ptr, N);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw msgpack::type_error();
|
throw msgpack::type_error();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, std::size_t N>
|
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::array<char, N>& v)
|
|
||||||
{
|
|
||||||
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>
|
template <std::size_t N>
|
||||||
inline void operator<< (msgpack::object& o, const std::array<char, N>& v)
|
struct pack<std::array<char, N>> {
|
||||||
{
|
template <typename Stream>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<char, N>& v) const {
|
||||||
o.type = msgpack::type::BIN;
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
o.via.bin.ptr = v.data();
|
o.pack_bin(size);
|
||||||
o.via.bin.size = size;
|
o.pack_bin_body(v.data(), size);
|
||||||
}
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::array<char, N>& v)
|
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());
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
o.type = msgpack::type::BIN;
|
o.type = msgpack::type::BIN;
|
||||||
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
o.via.bin.ptr = v.data();
|
||||||
o.via.bin.ptr = ptr;
|
o.via.bin.size = size;
|
||||||
o.via.bin.size = size;
|
}
|
||||||
std::memcpy(ptr, v.data(), size);
|
};
|
||||||
}
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
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 msgpack
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_CHAR_HPP
|
#endif // MSGPACK_TYPE_ARRAY_CHAR_HPP
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_ARRAY_CHAR_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::array<char, N>& v);
|
|
||||||
|
|
||||||
template <typename Stream, std::size_t N>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::array<char, N>& v);
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
void operator<< (msgpack::object& o, const std::array<char, N>& v);
|
|
||||||
|
|
||||||
template <std::size_t N>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::array<char, N>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_CPP11_ARRAY_FWD_HPP
|
|
||||||
#define MSGPACK_CPP11_ARRAY_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::array<T, N>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T, std::size_t N>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::array<T, N>& v);
|
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::array<T, N>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_ARRAY_FWD_HPP
|
|
||||||
97
include/msgpack/adaptor/cpp11/array_unsigned_char.hpp
Normal file
97
include/msgpack/adaptor/cpp11/array_unsigned_char.hpp
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2014-2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_TYPE_ARRAY_UNSIGNED_CHAR_HPP
|
||||||
|
#define MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
template <std::size_t N>
|
||||||
|
struct convert<std::array<unsigned char, N>> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, std::array<unsigned char, N>& v) const {
|
||||||
|
switch (o.type) {
|
||||||
|
case msgpack::type::BIN:
|
||||||
|
if(o.via.bin.size != N) { throw msgpack::type_error(); }
|
||||||
|
std::memcpy(v.data(), o.via.bin.ptr, o.via.bin.size);
|
||||||
|
break;
|
||||||
|
case msgpack::type::STR:
|
||||||
|
if(o.via.str.size != N) { throw msgpack::type_error(); }
|
||||||
|
std::memcpy(v.data(), o.via.str.ptr, N);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw msgpack::type_error();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <std::size_t N>
|
||||||
|
struct pack<std::array<unsigned char, N>> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::array<unsigned char, N>& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
o.pack_bin(size);
|
||||||
|
o.pack_bin_body(reinterpret_cast<char const*>(v.data()), size);
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <std::size_t N>
|
||||||
|
struct object<std::array<unsigned char, N>> {
|
||||||
|
void operator()(msgpack::object& o, const std::array<unsigned char, N>& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
o.type = msgpack::type::BIN;
|
||||||
|
o.via.bin.ptr = reinterpret_cast<char const*>(v.data());
|
||||||
|
o.via.bin.size = size;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <std::size_t N>
|
||||||
|
struct object_with_zone<std::array<unsigned char, N>> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const std::array<unsigned char, N>& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
o.type = msgpack::type::BIN;
|
||||||
|
char* ptr = static_cast<char*>(o.zone.allocate_align(size));
|
||||||
|
o.via.bin.ptr = ptr;
|
||||||
|
o.via.bin.size = size;
|
||||||
|
std::memcpy(ptr, v.data(), size);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_TYPE_ARRAY_UNSIGNED_CHAR_HPP
|
||||||
@@ -20,55 +20,82 @@
|
|||||||
#define MSGPACK_CPP11_FORWARD_LIST_HPP
|
#define MSGPACK_CPP11_FORWARD_LIST_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <forward_list>
|
#include <forward_list>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename T>
|
namespace adaptor {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::forward_list<T>& v)
|
|
||||||
{
|
template <typename T, typename Alloc>
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
struct as<std::forward_list<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
v.resize(o.via.array.size);
|
std::forward_list<T, Alloc> operator()(msgpack::object const& o) const {
|
||||||
msgpack::object* p = o.via.array.ptr;
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
for (auto &e : v) {
|
std::forward_list<T, Alloc> v;
|
||||||
p->convert(e);
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
++p;
|
msgpack::object* const pend = o.via.array.ptr;
|
||||||
|
while (p != pend) {
|
||||||
|
--p;
|
||||||
|
v.push_front(p->as<T>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
template <typename T, typename Alloc>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::forward_list<T>& v)
|
struct convert<std::forward_list<T, Alloc>> {
|
||||||
{
|
msgpack::object const& operator()(msgpack::object const& o, std::forward_list<T, Alloc>& v) const {
|
||||||
uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end()));
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
o.pack_array(size);
|
v.resize(o.via.array.size);
|
||||||
for(auto const& e : v) o.pack(e);
|
msgpack::object* p = o.via.array.ptr;
|
||||||
return o;
|
for (auto &e : v) {
|
||||||
}
|
p->convert(e);
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::forward_list<T>& v)
|
struct pack<std::forward_list<T, Alloc>> {
|
||||||
{
|
template <typename Stream>
|
||||||
o.type = msgpack::type::ARRAY;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::forward_list<T, Alloc>& v) const {
|
||||||
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()));
|
uint32_t size = checked_get_container_size(std::distance(v.begin(), v.end()));
|
||||||
o.via.array.size = size;
|
o.pack_array(size);
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(
|
for(auto const& e : v) o.pack(e);
|
||||||
o.zone.allocate_align(sizeof(msgpack::object)*size));
|
return o;
|
||||||
o.via.array.ptr = p;
|
|
||||||
for(auto const& e : v) *p++ = msgpack::object(e, o.zone);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
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
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_CPP11_FORWARD_LIST_FWD_HPP
|
|
||||||
#define MSGPACK_CPP11_FORWARD_LIST_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <forward_list>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::forward_list<T>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::forward_list<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::forward_list<T>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_FORWARD_LIST_FWD_HPP
|
|
||||||
90
include/msgpack/adaptor/cpp11/shared_ptr.hpp
Normal file
90
include/msgpack/adaptor/cpp11/shared_ptr.hpp
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_CPP11_SHARED_PTR_HPP
|
||||||
|
#define MSGPACK_CPP11_SHARED_PTR_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct as<std::shared_ptr<T>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
|
std::shared_ptr<T> operator()(msgpack::object const& o) const {
|
||||||
|
if(o.is_nil()) return nullptr;
|
||||||
|
return std::make_shared<T>(o.as<T>());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct convert<std::shared_ptr<T>> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, std::shared_ptr<T>& v) const {
|
||||||
|
if(o.is_nil()) v.reset();
|
||||||
|
else {
|
||||||
|
v = std::make_shared<T>();
|
||||||
|
msgpack::adaptor::convert<T>()(o, *v);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct pack<std::shared_ptr<T>> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::shared_ptr<T>& v) const {
|
||||||
|
if (v) o.pack(*v);
|
||||||
|
else o.pack_nil();
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct object<std::shared_ptr<T> > {
|
||||||
|
void operator()(msgpack::object& o, const std::shared_ptr<T>& v) const {
|
||||||
|
if (v) msgpack::adaptor::object<T>()(o, *v);
|
||||||
|
else o.type = msgpack::type::NIL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct object_with_zone<std::shared_ptr<T>> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const std::shared_ptr<T>& v) const {
|
||||||
|
if (v) msgpack::adaptor::object_with_zone<T>()(o, *v);
|
||||||
|
else o.type = msgpack::type::NIL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_CPP11_SHARED_PTR_HPP
|
||||||
@@ -19,14 +19,17 @@
|
|||||||
#define MSGPACK_CPP11_TUPLE_HPP
|
#define MSGPACK_CPP11_TUPLE_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
#include "msgpack/meta.hpp"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
// --- Pack from tuple to packer stream ---
|
// --- Pack from tuple to packer stream ---
|
||||||
template <typename Stream, typename Tuple, std::size_t N>
|
template <typename Stream, typename Tuple, std::size_t N>
|
||||||
@@ -39,15 +42,6 @@ struct StdTuplePacker {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Stream, typename Tuple>
|
|
||||||
struct StdTuplePacker<Stream, Tuple, 1> {
|
|
||||||
static void pack (
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const Tuple& v) {
|
|
||||||
o.pack(std::get<0>(v));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Stream, typename Tuple>
|
template <typename Stream, typename Tuple>
|
||||||
struct StdTuplePacker<Stream, Tuple, 0> {
|
struct StdTuplePacker<Stream, Tuple, 0> {
|
||||||
static void pack (
|
static void pack (
|
||||||
@@ -56,19 +50,51 @@ struct StdTuplePacker<Stream, Tuple, 0> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
template <typename Stream, typename... Args>
|
template <typename... Args>
|
||||||
inline const msgpack::packer<Stream>& operator<< (
|
struct pack<std::tuple<Args...>> {
|
||||||
msgpack::packer<Stream>& o,
|
template <typename Stream>
|
||||||
const std::tuple<Args...>& v) {
|
msgpack::packer<Stream>& operator()(
|
||||||
uint32_t size = checked_get_container_size(sizeof...(Args));
|
msgpack::packer<Stream>& o,
|
||||||
o.pack_array(size);
|
const std::tuple<Args...>& v) const {
|
||||||
StdTuplePacker<Stream, decltype(v), sizeof...(Args)>::pack(o, v);
|
uint32_t size = checked_get_container_size(sizeof...(Args));
|
||||||
return o;
|
o.pack_array(size);
|
||||||
}
|
StdTuplePacker<Stream, decltype(v), sizeof...(Args)>::pack(o, v);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
// --- Convert from tuple to object ---
|
// --- 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>
|
template <typename Tuple, std::size_t N>
|
||||||
struct StdTupleConverter {
|
struct StdTupleConverter {
|
||||||
static void convert(
|
static void convert(
|
||||||
@@ -79,15 +105,6 @@ struct StdTupleConverter {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Tuple>
|
|
||||||
struct StdTupleConverter<Tuple, 1> {
|
|
||||||
static void convert (
|
|
||||||
msgpack::object const& o,
|
|
||||||
Tuple& v) {
|
|
||||||
o.via.array.ptr[0].convert<typename std::remove_reference<decltype(std::get<0>(v))>::type>(std::get<0>(v));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Tuple>
|
template <typename Tuple>
|
||||||
struct StdTupleConverter<Tuple, 0> {
|
struct StdTupleConverter<Tuple, 0> {
|
||||||
static void convert (
|
static void convert (
|
||||||
@@ -96,15 +113,31 @@ struct StdTupleConverter<Tuple, 0> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
inline msgpack::object const& operator>> (
|
struct as<std::tuple<Args...>, typename std::enable_if<msgpack::all_of<msgpack::has_as, Args...>::value>::type> {
|
||||||
msgpack::object const& o,
|
std::tuple<Args...> operator()(
|
||||||
std::tuple<Args...>& v) {
|
msgpack::object const& o) 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 < sizeof...(Args)) { throw msgpack::type_error(); }
|
if (o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); }
|
||||||
StdTupleConverter<decltype(v), sizeof...(Args)>::convert(o, v);
|
return StdTupleAs<Args...>::as(o);
|
||||||
return 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 ---
|
// --- Convert from tuple to object with zone ---
|
||||||
template <typename Tuple, std::size_t N>
|
template <typename Tuple, std::size_t N>
|
||||||
@@ -117,15 +150,6 @@ struct StdTupleToObjectWithZone {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Tuple>
|
|
||||||
struct StdTupleToObjectWithZone<Tuple, 1> {
|
|
||||||
static void convert (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
const Tuple& v) {
|
|
||||||
o.via.array.ptr[0] = msgpack::object(std::get<0>(v), o.zone);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Tuple>
|
template <typename Tuple>
|
||||||
struct StdTupleToObjectWithZone<Tuple, 0> {
|
struct StdTupleToObjectWithZone<Tuple, 0> {
|
||||||
static void convert (
|
static void convert (
|
||||||
@@ -134,18 +158,26 @@ struct StdTupleToObjectWithZone<Tuple, 0> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Args>
|
namespace adaptor {
|
||||||
inline void operator<< (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
std::tuple<Args...> const& v) {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_CPP11_TUPLE_FWD_HPP
|
|
||||||
#define MSGPACK_CPP11_TUPLE_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <tuple>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
// --- Pack from tuple to packer stream ---
|
|
||||||
template <typename Stream, typename Tuple, std::size_t N>
|
|
||||||
struct StdTuplePacker;
|
|
||||||
|
|
||||||
template <typename Stream, typename... Args>
|
|
||||||
const msgpack::packer<Stream>& operator<< (
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const std::tuple<Args...>& v);
|
|
||||||
|
|
||||||
// --- Convert from tuple to object ---
|
|
||||||
|
|
||||||
template <typename Tuple, std::size_t N>
|
|
||||||
struct StdTupleConverter;
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
msgpack::object const& operator>> (
|
|
||||||
msgpack::object const& o,
|
|
||||||
std::tuple<Args...>& v);
|
|
||||||
|
|
||||||
// --- Convert from tuple to object with zone ---
|
|
||||||
template <typename Tuple, std::size_t N>
|
|
||||||
struct StdTupleToObjectWithZone;
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
void operator<< (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
std::tuple<Args...> const& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_TUPLE_FWD_HPP
|
|
||||||
90
include/msgpack/adaptor/cpp11/unique_ptr.hpp
Normal file
90
include/msgpack/adaptor/cpp11/unique_ptr.hpp
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_CPP11_UNIQUE_PTR_HPP
|
||||||
|
#define MSGPACK_CPP11_UNIQUE_PTR_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
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
|
||||||
@@ -19,124 +19,172 @@
|
|||||||
#define MSGPACK_TYPE_UNORDERED_MAP_HPP
|
#define MSGPACK_TYPE_UNORDERED_MAP_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename K, typename V>
|
namespace adaptor {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_map<K, V>& v)
|
|
||||||
{
|
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
struct as<
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
std::unordered_map<K, V, Hash, Compare, Alloc>,
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
||||||
std::unordered_map<K, V> tmp;
|
std::unordered_map<K, V, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
for(; p != pend; ++p) {
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
K key;
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
p->key.convert(key);
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
p->val.convert(tmp[key]);
|
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;
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_map<K,V>& v)
|
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 {
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
o.pack_map(size);
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
for(typename std::unordered_map<K,V>::const_iterator it(v.begin()), it_end(v.end());
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
it != it_end; ++it) {
|
std::unordered_map<K, V, Hash, Compare, Alloc> tmp;
|
||||||
o.pack(it->first);
|
for(; p != pend; ++p) {
|
||||||
o.pack(it->second);
|
K key;
|
||||||
|
p->key.convert(key);
|
||||||
|
p->val.convert(tmp[std::move(key)]);
|
||||||
|
}
|
||||||
|
v = std::move(tmp);
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::unordered_map<K,V>& v)
|
struct pack<std::unordered_map<K, V, Hash, Compare, Alloc>> {
|
||||||
{
|
template <typename Stream>
|
||||||
o.type = msgpack::type::MAP;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_map<K, V, Hash, Compare, Alloc>& v) const {
|
||||||
if(v.empty()) {
|
|
||||||
o.via.map.ptr = nullptr;
|
|
||||||
o.via.map.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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));
|
o.pack_map(size);
|
||||||
msgpack::object_kv* const pend = p + size;
|
for(typename std::unordered_map<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.map.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.map.size = size;
|
o.pack(it->first);
|
||||||
typename std::unordered_map<K,V>::const_iterator it(v.begin());
|
o.pack(it->second);
|
||||||
do {
|
}
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
return o;
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
||||||
template <typename K, typename V>
|
struct object_with_zone<std::unordered_map<K, V, Hash, Compare, Alloc>> {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multimap<K, V>& v)
|
void operator()(msgpack::object::with_zone& o, const std::unordered_map<K, V, Hash, Compare, Alloc>& v) const {
|
||||||
{
|
o.type = msgpack::type::MAP;
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
if(v.empty()) {
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
o.via.map.ptr = nullptr;
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
o.via.map.size = 0;
|
||||||
std::unordered_multimap<K, V> tmp;
|
} else {
|
||||||
for(; p != pend; ++p) {
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
std::pair<K, V> value;
|
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||||
p->key.convert(value.first);
|
msgpack::object_kv* const pend = p + size;
|
||||||
p->val.convert(value.second);
|
o.via.map.ptr = p;
|
||||||
tmp.insert(value);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_multimap<K,V>& v)
|
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
||||||
{
|
struct as<
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
std::unordered_multimap<K, V, Hash, Compare, Alloc>,
|
||||||
o.pack_map(size);
|
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
||||||
for(typename std::unordered_multimap<K,V>::const_iterator it(v.begin()), it_end(v.end());
|
std::unordered_multimap<K, V, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
it != it_end; ++it) {
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
o.pack(it->first);
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
o.pack(it->second);
|
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;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
template <typename K, typename V, typename Hash, typename Compare, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::unordered_multimap<K,V>& v)
|
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 {
|
||||||
o.type = msgpack::type::MAP;
|
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
if(v.empty()) {
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
o.via.map.ptr = nullptr;
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
o.via.map.size = 0;
|
std::unordered_multimap<K, V, Hash, Compare, Alloc> tmp;
|
||||||
} else {
|
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());
|
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));
|
o.pack_map(size);
|
||||||
msgpack::object_kv* const pend = p + size;
|
for(typename std::unordered_multimap<K, V, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.map.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.map.size = size;
|
o.pack(it->first);
|
||||||
typename std::unordered_multimap<K,V>::const_iterator it(v.begin());
|
o.pack(it->second);
|
||||||
do {
|
}
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
return o;
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
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 msgpack
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_UNORDERED_MAP_HPP
|
#endif // MSGPACK_TYPE_UNORDERED_MAP_HPP
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_UNORDERED_MAP_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_UNORDERED_MAP_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <unordered_map>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::unordered_map<K, V>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_map<K,V>& v);
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::unordered_map<K,V>& v);
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multimap<K, V>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_multimap<K,V>& v);
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::unordered_multimap<K,V>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_UNORDERED_MAP_FWD_HPP
|
|
||||||
@@ -19,116 +19,162 @@
|
|||||||
#define MSGPACK_TYPE_UNORDERED_SET_HPP
|
#define MSGPACK_TYPE_UNORDERED_SET_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename T>
|
namespace adaptor {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_set<T>& v)
|
|
||||||
{
|
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
struct as<std::unordered_set<Key, Hash, Compare, Alloc>, typename std::enable_if<msgpack::has_as<Key>::value>::type> {
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
std::unordered_set<Key, Hash, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
std::unordered_set<T> tmp;
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
while(p > pbegin) {
|
msgpack::object* const pbegin = o.via.array.ptr;
|
||||||
--p;
|
std::unordered_set<Key, Hash, Compare, Alloc> v;
|
||||||
tmp.insert(p->as<T>());
|
while (p > pbegin) {
|
||||||
|
--p;
|
||||||
|
v.insert(p->as<Key>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_set<T>& v)
|
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 {
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
o.pack_array(size);
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
for(typename std::unordered_set<T>::const_iterator it(v.begin()), it_end(v.end());
|
msgpack::object* const pbegin = o.via.array.ptr;
|
||||||
it != it_end; ++it) {
|
std::unordered_set<Key, Hash, Compare, Alloc> tmp;
|
||||||
o.pack(*it);
|
while(p > pbegin) {
|
||||||
|
--p;
|
||||||
|
tmp.insert(p->as<Key>());
|
||||||
|
}
|
||||||
|
v = std::move(tmp);
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::unordered_set<T>& v)
|
struct pack<std::unordered_set<Key, Hash, Compare, Alloc>> {
|
||||||
{
|
template <typename Stream>
|
||||||
o.type = msgpack::type::ARRAY;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::unordered_set<Key, Hash, Compare, Alloc>& v) const {
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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.pack_array(size);
|
||||||
msgpack::object* const pend = p + size;
|
for(typename std::unordered_set<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.array.ptr = p;
|
|
||||||
o.via.array.size = size;
|
|
||||||
typename std::unordered_set<T>::const_iterator it(v.begin());
|
|
||||||
do {
|
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multiset<T>& v)
|
|
||||||
{
|
|
||||||
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<T> tmp;
|
|
||||||
while(p > pbegin) {
|
|
||||||
--p;
|
|
||||||
tmp.insert(p->as<T>());
|
|
||||||
}
|
|
||||||
tmp.swap(v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_multiset<T>& v)
|
|
||||||
{
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_array(size);
|
|
||||||
for(typename std::unordered_multiset<T>::const_iterator it(v.begin()), it_end(v.end());
|
|
||||||
it != it_end; ++it) {
|
it != it_end; ++it) {
|
||||||
o.pack(*it);
|
o.pack(*it);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename Key, typename Hash, typename Compare, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::unordered_multiset<T>& v)
|
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;
|
o.type = msgpack::type::ARRAY;
|
||||||
if(v.empty()) {
|
if(v.empty()) {
|
||||||
o.via.array.ptr = nullptr;
|
o.via.array.ptr = nullptr;
|
||||||
o.via.array.size = 0;
|
o.via.array.size = 0;
|
||||||
} else {
|
} 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());
|
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.pack_array(size);
|
||||||
msgpack::object* const pend = p + size;
|
for(typename std::unordered_multiset<Key, Hash, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.array.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.array.size = size;
|
o.pack(*it);
|
||||||
typename std::unordered_multiset<T>::const_iterator it(v.begin());
|
}
|
||||||
do {
|
return o;
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
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 msgpack
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_UNORDERED_SET_HPP
|
#endif // MSGPACK_TYPE_UNORDERED_SET_HPP
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_UNORDERED_SET_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_UNORDERED_SET_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <unordered_set>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::unordered_set<T>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_set<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::unordered_set<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::unordered_multiset<T>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::unordered_multiset<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::unordered_multiset<T>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_UNORDERED_SET_FWD_HPP
|
|
||||||
@@ -21,9 +21,19 @@
|
|||||||
#include "msgpack/cpp_config.hpp"
|
#include "msgpack/cpp_config.hpp"
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_CPP03)
|
#if defined(MSGPACK_USE_CPP03)
|
||||||
#include "detail/cpp03_define.hpp"
|
#include "detail/cpp03_define_array.hpp"
|
||||||
|
#include "detail/cpp03_define_map.hpp"
|
||||||
#else // MSGPACK_USE_CPP03
|
#else // MSGPACK_USE_CPP03
|
||||||
#include "detail/cpp11_define.hpp"
|
#include "detail/cpp11_define_array.hpp"
|
||||||
|
#include "detail/cpp11_define_map.hpp"
|
||||||
#endif // MSGPACK_USE_CPP03
|
#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
|
||||||
|
|||||||
@@ -19,64 +19,97 @@
|
|||||||
#define MSGPACK_TYPE_DEQUE_HPP
|
#define MSGPACK_TYPE_DEQUE_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename T>
|
namespace adaptor {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::deque<T>& v)
|
|
||||||
{
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
v.resize(o.via.array.size);
|
template <typename T, typename Alloc>
|
||||||
msgpack::object* p = o.via.array.ptr;
|
struct as<std::deque<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
std::deque<T, Alloc> operator()(const msgpack::object& o) const {
|
||||||
typename std::deque<T>::iterator it = v.begin();
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
for(; p < pend; ++p, ++it) {
|
std::deque<T, Alloc> v;
|
||||||
p->convert(*it);
|
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;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::deque<T>& v)
|
|
||||||
{
|
template <typename T, typename Alloc>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
struct convert<std::deque<T, Alloc> > {
|
||||||
o.pack_array(size);
|
msgpack::object const& operator()(msgpack::object const& o, std::deque<T, Alloc>& v) const {
|
||||||
for(typename std::deque<T>::const_iterator it(v.begin()), it_end(v.end());
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
it != it_end; ++it) {
|
v.resize(o.via.array.size);
|
||||||
o.pack(*it);
|
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;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::deque<T>& v)
|
struct pack<std::deque<T, Alloc> > {
|
||||||
{
|
template <typename Stream>
|
||||||
o.type = msgpack::type::ARRAY;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::deque<T, Alloc>& v) const {
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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.pack_array(size);
|
||||||
msgpack::object* const pend = p + size;
|
for(typename std::deque<T, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.array.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.array.size = size;
|
o.pack(*it);
|
||||||
typename std::deque<T>::const_iterator it(v.begin());
|
}
|
||||||
do {
|
return o;
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
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)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_DEQUE_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_DEQUE_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <deque>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::deque<T>& v);
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::deque<T>& v);
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::deque<T>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_DEQUE_FWD_HPP
|
|
||||||
@@ -15,73 +15,88 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP03_DEFINE_HPP
|
#ifndef MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
||||||
#define MSGPACK_CPP03_DEFINE_HPP
|
#define MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/adaptor/msgpack_tuple_fwd.hpp"
|
#include "msgpack/adaptor/msgpack_tuple.hpp"
|
||||||
#include "msgpack/adaptor/int_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
|
||||||
#define MSGPACK_DEFINE(...) \
|
#define MSGPACK_DEFINE_ARRAY(...) \
|
||||||
template <typename Packer> \
|
template <typename Packer> \
|
||||||
void msgpack_pack(Packer& pk) const \
|
void msgpack_pack(Packer& pk) const \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_pack(pk); \
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
|
||||||
} \
|
} \
|
||||||
void msgpack_unpack(msgpack::object const& o) \
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
|
||||||
}\
|
}\
|
||||||
template <typename MSGPACK_OBJECT> \
|
template <typename MSGPACK_OBJECT> \
|
||||||
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \
|
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.
|
// MSGPACK_ADD_ENUM must be used in the global namespace.
|
||||||
#define MSGPACK_ADD_ENUM(enum) \
|
#define MSGPACK_ADD_ENUM(enum_name) \
|
||||||
namespace msgpack { \
|
namespace msgpack { \
|
||||||
|
/** @cond */ \
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, enum& v) \
|
/** @endcond */ \
|
||||||
{ \
|
namespace adaptor { \
|
||||||
int tmp; \
|
template<> \
|
||||||
o >> tmp; \
|
struct convert<enum_name> { \
|
||||||
v = static_cast<enum>(tmp); \
|
msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const {\
|
||||||
return o; \
|
int tmp; \
|
||||||
} \
|
o >> tmp; \
|
||||||
inline void operator<< (msgpack::object& o, const enum& v) \
|
v = static_cast<enum_name>(tmp); \
|
||||||
{ \
|
return o; \
|
||||||
o << static_cast<int>(v); \
|
} \
|
||||||
} \
|
}; \
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const enum& v) \
|
template<> \
|
||||||
{ \
|
struct object<enum_name> { \
|
||||||
o << static_cast<int>(v); \
|
void operator()(msgpack::object& o, const enum_name& v) const {\
|
||||||
} \
|
o << static_cast<int>(v); \
|
||||||
namespace detail { \
|
} \
|
||||||
|
}; \
|
||||||
|
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> \
|
template <typename Stream> \
|
||||||
struct packer_serializer<Stream, enum> { \
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \
|
||||||
static msgpack::packer<Stream>& pack(msgpack::packer<Stream>& o, const enum& v) { \
|
return o << static_cast<int>(v); \
|
||||||
return o << static_cast<int>(v); \
|
} \
|
||||||
} \
|
}; \
|
||||||
}; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
|
/** @cond */ \
|
||||||
|
} \
|
||||||
|
/** @endcond */ \
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
|
||||||
template <typename A0 = void, typename A1 = void, typename A2 = void, typename A3 = void, typename A4 = void, typename A5 = void, typename A6 = void, typename A7 = void, typename A8 = void, typename A9 = void, typename A10 = void, typename A11 = void, typename A12 = void, typename A13 = void, typename A14 = void, typename A15 = void, typename A16 = void, typename A17 = void, typename A18 = void, typename A19 = void, typename A20 = void, typename A21 = void, typename A22 = void, typename A23 = void, typename A24 = void, typename A25 = void, typename A26 = void, typename A27 = void, typename A28 = void, typename A29 = void, typename A30 = void, typename A31 = void, typename A32 = void>
|
template <typename A0 = void, typename A1 = void, typename A2 = void, typename A3 = void, typename A4 = void, typename A5 = void, typename A6 = void, typename A7 = void, typename A8 = void, typename A9 = void, typename A10 = void, typename A11 = void, typename A12 = void, typename A13 = void, typename A14 = void, typename A15 = void, typename A16 = void, typename A17 = void, typename A18 = void, typename A19 = void, typename A20 = void, typename A21 = void, typename A22 = void, typename A23 = void, typename A24 = void, typename A25 = void, typename A26 = void, typename A27 = void, typename A28 = void, typename A29 = void, typename A30 = void, typename A31 = void, typename A32 = void>
|
||||||
struct define;
|
struct define_array;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct define<> {
|
struct define_array<> {
|
||||||
typedef define<> value_type;
|
typedef define_array<> value_type;
|
||||||
typedef tuple<> tuple_type;
|
typedef tuple<> tuple_type;
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -100,11 +115,13 @@ struct define<> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
|
||||||
template <typename A0>
|
template <typename A0>
|
||||||
struct define<A0> {
|
struct define_array<A0> {
|
||||||
typedef define<A0> value_type;
|
typedef define_array<A0> value_type;
|
||||||
typedef tuple<A0> tuple_type;
|
typedef tuple<A0> tuple_type;
|
||||||
define(A0& _a0) :
|
define_array(A0& _a0) :
|
||||||
a0(_a0) {}
|
a0(_a0) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -138,10 +155,10 @@ struct define<A0> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1>
|
template <typename A0, typename A1>
|
||||||
struct define<A0, A1> {
|
struct define_array<A0, A1> {
|
||||||
typedef define<A0, A1> value_type;
|
typedef define_array<A0, A1> value_type;
|
||||||
typedef tuple<A0, A1> tuple_type;
|
typedef tuple<A0, A1> tuple_type;
|
||||||
define(A0& _a0, A1& _a1) :
|
define_array(A0& _a0, A1& _a1) :
|
||||||
a0(_a0), a1(_a1) {}
|
a0(_a0), a1(_a1) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -179,10 +196,10 @@ struct define<A0, A1> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2>
|
template <typename A0, typename A1, typename A2>
|
||||||
struct define<A0, A1, A2> {
|
struct define_array<A0, A1, A2> {
|
||||||
typedef define<A0, A1, A2> value_type;
|
typedef define_array<A0, A1, A2> value_type;
|
||||||
typedef tuple<A0, A1, A2> tuple_type;
|
typedef tuple<A0, A1, A2> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2) :
|
define_array(A0& _a0, A1& _a1, A2& _a2) :
|
||||||
a0(_a0), a1(_a1), a2(_a2) {}
|
a0(_a0), a1(_a1), a2(_a2) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -224,10 +241,10 @@ struct define<A0, A1, A2> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3>
|
template <typename A0, typename A1, typename A2, typename A3>
|
||||||
struct define<A0, A1, A2, A3> {
|
struct define_array<A0, A1, A2, A3> {
|
||||||
typedef define<A0, A1, A2, A3> value_type;
|
typedef define_array<A0, A1, A2, A3> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3> tuple_type;
|
typedef tuple<A0, A1, A2, A3> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -273,10 +290,10 @@ struct define<A0, A1, A2, A3> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4>
|
||||||
struct define<A0, A1, A2, A3, A4> {
|
struct define_array<A0, A1, A2, A3, A4> {
|
||||||
typedef define<A0, A1, A2, A3, A4> value_type;
|
typedef define_array<A0, A1, A2, A3, A4> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -326,10 +343,10 @@ struct define<A0, A1, A2, A3, A4> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
|
||||||
struct define<A0, A1, A2, A3, A4, A5> {
|
struct define_array<A0, A1, A2, A3, A4, A5> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -383,10 +400,10 @@ struct define<A0, A1, A2, A3, A4, A5> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -444,10 +461,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -509,10 +526,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -578,10 +595,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -651,10 +668,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -728,10 +745,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -809,10 +826,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -894,10 +911,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -983,10 +1000,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1076,10 +1093,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1173,10 +1190,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1274,10 +1291,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1379,10 +1396,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1488,10 +1505,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1601,10 +1618,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1718,10 +1735,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1839,10 +1856,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -1964,10 +1981,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2093,10 +2110,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2226,10 +2243,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2363,10 +2380,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2504,10 +2521,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2649,10 +2666,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2798,10 +2815,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -2951,10 +2968,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -3108,10 +3125,10 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
|
||||||
struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> {
|
struct define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> {
|
||||||
typedef define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> value_type;
|
typedef define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> value_type;
|
||||||
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> tuple_type;
|
typedef tuple<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> tuple_type;
|
||||||
define(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30, A31& _a31) :
|
define_array(A0& _a0, A1& _a1, A2& _a2, A3& _a3, A4& _a4, A5& _a5, A6& _a6, A7& _a7, A8& _a8, A9& _a9, A10& _a10, A11& _a11, A12& _a12, A13& _a13, A14& _a14, A15& _a15, A16& _a16, A17& _a17, A18& _a18, A19& _a19, A20& _a20, A21& _a21, A22& _a22, A23& _a23, A24& _a24, A25& _a25, A26& _a26, A27& _a27, A28& _a28, A29& _a29, A30& _a30, A31& _a31) :
|
||||||
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30), a31(_a31) {}
|
a0(_a0), a1(_a1), a2(_a2), a3(_a3), a4(_a4), a5(_a5), a6(_a6), a7(_a7), a8(_a8), a9(_a9), a10(_a10), a11(_a11), a12(_a12), a13(_a13), a14(_a14), a15(_a15), a16(_a16), a17(_a17), a18(_a18), a19(_a19), a20(_a20), a21(_a21), a22(_a22), a23(_a23), a24(_a24), a25(_a25), a26(_a26), a27(_a27), a28(_a28), a29(_a29), a30(_a30), a31(_a31) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -3268,208 +3285,214 @@ struct define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A
|
|||||||
A31& a31;
|
A31& a31;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
inline define<> make_define()
|
inline define_array<> make_define_array()
|
||||||
{
|
{
|
||||||
return define<>();
|
return define_array<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
|
||||||
template <typename A0>
|
template <typename A0>
|
||||||
define<A0> make_define(A0& a0)
|
inline define_array<A0> make_define_array(A0& a0)
|
||||||
{
|
{
|
||||||
return define<A0>(a0);
|
return define_array<A0>(a0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1>
|
template <typename A0, typename A1>
|
||||||
define<A0, A1> make_define(A0& a0, A1& a1)
|
inline define_array<A0, A1> make_define_array(A0& a0, A1& a1)
|
||||||
{
|
{
|
||||||
return define<A0, A1>(a0, a1);
|
return define_array<A0, A1>(a0, a1);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2>
|
template <typename A0, typename A1, typename A2>
|
||||||
define<A0, A1, A2> make_define(A0& a0, A1& a1, A2& a2)
|
inline define_array<A0, A1, A2> make_define_array(A0& a0, A1& a1, A2& a2)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2>(a0, a1, a2);
|
return define_array<A0, A1, A2>(a0, a1, a2);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3>
|
template <typename A0, typename A1, typename A2, typename A3>
|
||||||
define<A0, A1, A2, A3> make_define(A0& a0, A1& a1, A2& a2, A3& a3)
|
inline define_array<A0, A1, A2, A3> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3>(a0, a1, a2, a3);
|
return define_array<A0, A1, A2, A3>(a0, a1, a2, a3);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4>
|
||||||
define<A0, A1, A2, A3, A4> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4)
|
inline define_array<A0, A1, A2, A3, A4> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
|
return define_array<A0, A1, A2, A3, A4>(a0, a1, a2, a3, a4);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5>
|
||||||
define<A0, A1, A2, A3, A4, A5> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5)
|
inline define_array<A0, A1, A2, A3, A4, A5> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
|
return define_array<A0, A1, A2, A3, A4, A5>(a0, a1, a2, a3, a4, a5);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
|
return define_array<A0, A1, A2, A3, A4, A5, A6>(a0, a1, a2, a3, a4, a5, a6);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7>(a0, a1, a2, a3, a4, a5, a6, a7);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8>(a0, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
|
template <typename A0, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10, typename A11, typename A12, typename A13, typename A14, typename A15, typename A16, typename A17, typename A18, typename A19, typename A20, typename A21, typename A22, typename A23, typename A24, typename A25, typename A26, typename A27, typename A28, typename A29, typename A30, typename A31>
|
||||||
define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> make_define(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30, A31& a31)
|
inline define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31> make_define_array(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9, A10& a10, A11& a11, A12& a12, A13& a13, A14& a14, A15& a15, A16& a16, A17& a17, A18& a18, A19& a19, A20& a20, A21& a21, A22& a22, A23& a23, A24& a24, A25& a25, A26& a26, A27& a27, A28& a28, A29& a29, A30& a30, A31& a31)
|
||||||
{
|
{
|
||||||
return define<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31);
|
return define_array<A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31>(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP03_DEFINE_HPP
|
#endif // MSGPACK_CPP03_DEFINE_ARRAY_HPP
|
||||||
2799
include/msgpack/adaptor/detail/cpp03_define_map.hpp
Normal file
2799
include/msgpack/adaptor/detail/cpp03_define_map.hpp
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -15,91 +15,106 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
#ifndef MSGPACK_CPP11_DEFINE_HPP
|
#ifndef MSGPACK_CPP11_DEFINE_ARRAY_HPP
|
||||||
#define MSGPACK_CPP11_DEFINE_HPP
|
#define MSGPACK_CPP11_DEFINE_ARRAY_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
|
||||||
// for MSGPACK_ADD_ENUM
|
// for MSGPACK_ADD_ENUM
|
||||||
#include "msgpack/adaptor/int_fwd.hpp"
|
#include "msgpack/adaptor/int.hpp"
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#define MSGPACK_DEFINE(...) \
|
#define MSGPACK_DEFINE_ARRAY(...) \
|
||||||
template <typename Packer> \
|
template <typename Packer> \
|
||||||
void msgpack_pack(Packer& pk) const \
|
void msgpack_pack(Packer& pk) const \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_pack(pk); \
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_pack(pk); \
|
||||||
} \
|
} \
|
||||||
void msgpack_unpack(msgpack::object const& o) \
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_unpack(o); \
|
msgpack::type::make_define_array(__VA_ARGS__).msgpack_unpack(o); \
|
||||||
}\
|
}\
|
||||||
template <typename MSGPACK_OBJECT> \
|
template <typename MSGPACK_OBJECT> \
|
||||||
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
{ \
|
{ \
|
||||||
msgpack::type::make_define(__VA_ARGS__).msgpack_object(o, z); \
|
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.
|
// MSGPACK_ADD_ENUM must be used in the global namespace.
|
||||||
#define MSGPACK_ADD_ENUM(enum) \
|
#define MSGPACK_ADD_ENUM(enum_name) \
|
||||||
namespace msgpack { \
|
namespace msgpack { \
|
||||||
|
/** @cond */ \
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
MSGPACK_API_VERSION_NAMESPACE(v1) { \
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, enum& v) \
|
/** @endcond */ \
|
||||||
{ \
|
namespace adaptor { \
|
||||||
std::underlying_type<enum>::type tmp; \
|
template<> \
|
||||||
o >> tmp; \
|
struct convert<enum_name> { \
|
||||||
v = static_cast<enum>(tmp); \
|
msgpack::object const& operator()(msgpack::object const& o, enum_name& v) const { \
|
||||||
return o; \
|
std::underlying_type<enum_name>::type tmp; \
|
||||||
} \
|
o >> tmp; \
|
||||||
inline void operator<< (msgpack::object& o, const enum& v) \
|
v = static_cast<enum_name>(tmp); \
|
||||||
{ \
|
return o; \
|
||||||
auto tmp = static_cast<std::underlying_type<enum>::type>(v); \
|
} \
|
||||||
o << tmp; \
|
}; \
|
||||||
} \
|
template<> \
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const enum& v) \
|
struct object<enum_name> { \
|
||||||
{ \
|
void operator()(msgpack::object& o, const enum_name& v) const { \
|
||||||
auto tmp = static_cast<std::underlying_type<enum>::type>(v); \
|
auto tmp = static_cast<std::underlying_type<enum_name>::type>(v); \
|
||||||
o << tmp; \
|
o << tmp; \
|
||||||
} \
|
} \
|
||||||
namespace detail { \
|
}; \
|
||||||
|
template<> \
|
||||||
|
struct object_with_zone<enum_name> { \
|
||||||
|
void operator()(msgpack::object::with_zone& o, const enum_name& v) const { \
|
||||||
|
auto tmp = static_cast<std::underlying_type<enum_name>::type>(v); \
|
||||||
|
o << tmp; \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
template <> \
|
||||||
|
struct pack<enum_name> { \
|
||||||
template <typename Stream> \
|
template <typename Stream> \
|
||||||
struct packer_serializer<Stream, enum> { \
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const enum_name& v) const { \
|
||||||
static msgpack::packer<Stream>& pack(msgpack::packer<Stream>& o, const enum& v) { \
|
return o << static_cast<std::underlying_type<enum_name>::type>(v); \
|
||||||
return o << static_cast<std::underlying_type<enum>::type>(v); \
|
} \
|
||||||
} \
|
}; \
|
||||||
}; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
|
/** @cond */ \
|
||||||
|
} \
|
||||||
|
/** @endcond */ \
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
template <typename Tuple, std::size_t N>
|
template <typename Tuple, std::size_t N>
|
||||||
struct define_imp {
|
struct define_array_imp {
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
static void pack(Packer& pk, Tuple const& t) {
|
static void pack(Packer& pk, Tuple const& t) {
|
||||||
define_imp<Tuple, N-1>::pack(pk, t);
|
define_array_imp<Tuple, N-1>::pack(pk, t);
|
||||||
pk.pack(std::get<N-1>(t));
|
pk.pack(std::get<N-1>(t));
|
||||||
}
|
}
|
||||||
static void unpack(msgpack::object const& o, Tuple& t) {
|
static void unpack(msgpack::object const& o, Tuple& t) {
|
||||||
define_imp<Tuple, N-1>::unpack(o, t);
|
define_array_imp<Tuple, N-1>::unpack(o, t);
|
||||||
const size_t size = o.via.array.size;
|
const size_t size = o.via.array.size;
|
||||||
if(size <= N-1) { return; }
|
if(size <= N-1) { return; }
|
||||||
o.via.array.ptr[N-1].convert(std::get<N-1>(t));
|
o.via.array.ptr[N-1].convert(std::get<N-1>(t));
|
||||||
}
|
}
|
||||||
static void object(msgpack::object* o, msgpack::zone& z, Tuple const& t) {
|
static void object(msgpack::object* o, msgpack::zone& z, Tuple const& t) {
|
||||||
define_imp<Tuple, N-1>::object(o, z, t);
|
define_array_imp<Tuple, N-1>::object(o, z, t);
|
||||||
o->via.array.ptr[N-1] = msgpack::object(std::get<N-1>(t), z);
|
o->via.array.ptr[N-1] = msgpack::object(std::get<N-1>(t), z);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Tuple>
|
template <typename Tuple>
|
||||||
struct define_imp<Tuple, 1> {
|
struct define_array_imp<Tuple, 1> {
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
static void pack(Packer& pk, Tuple const& t) {
|
static void pack(Packer& pk, Tuple const& t) {
|
||||||
pk.pack(std::get<0>(t));
|
pk.pack(std::get<0>(t));
|
||||||
@@ -115,23 +130,23 @@ struct define_imp<Tuple, 1> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
struct define {
|
struct define_array {
|
||||||
typedef define<Args...> value_type;
|
typedef define_array<Args...> value_type;
|
||||||
typedef std::tuple<Args...> tuple_type;
|
typedef std::tuple<Args...> tuple_type;
|
||||||
define(Args&... args) :
|
define_array(Args&... args) :
|
||||||
a(args...) {}
|
a(args...) {}
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
{
|
{
|
||||||
pk.pack_array(sizeof...(Args));
|
pk.pack_array(sizeof...(Args));
|
||||||
|
|
||||||
define_imp<std::tuple<Args&...>, sizeof...(Args)>::pack(pk, a);
|
define_array_imp<std::tuple<Args&...>, sizeof...(Args)>::pack(pk, a);
|
||||||
}
|
}
|
||||||
void msgpack_unpack(msgpack::object const& o)
|
void msgpack_unpack(msgpack::object const& o)
|
||||||
{
|
{
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
|
|
||||||
define_imp<std::tuple<Args&...>, sizeof...(Args)>::unpack(o, a);
|
define_array_imp<std::tuple<Args&...>, sizeof...(Args)>::unpack(o, a);
|
||||||
}
|
}
|
||||||
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||||
{
|
{
|
||||||
@@ -139,15 +154,15 @@ struct define {
|
|||||||
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*sizeof...(Args)));
|
o->via.array.ptr = static_cast<msgpack::object*>(z.allocate_align(sizeof(msgpack::object)*sizeof...(Args)));
|
||||||
o->via.array.size = sizeof...(Args);
|
o->via.array.size = sizeof...(Args);
|
||||||
|
|
||||||
define_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);
|
define_array_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::tuple<Args&...> a;
|
std::tuple<Args&...> a;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct define<> {
|
struct define_array<> {
|
||||||
typedef define<> value_type;
|
typedef define_array<> value_type;
|
||||||
typedef std::tuple<> tuple_type;
|
typedef std::tuple<> tuple_type;
|
||||||
template <typename Packer>
|
template <typename Packer>
|
||||||
void msgpack_pack(Packer& pk) const
|
void msgpack_pack(Packer& pk) const
|
||||||
@@ -166,19 +181,21 @@ struct define<> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline define<> make_define()
|
inline define_array<> make_define_array()
|
||||||
{
|
{
|
||||||
return define<>();
|
return define_array<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
define<Args...> make_define(Args&... args)
|
inline define_array<Args...> make_define_array(Args&... args)
|
||||||
{
|
{
|
||||||
return define<Args...>(args...);
|
return define_array<Args...>(args...);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_DEFINE_HPP
|
#endif // MSGPACK_CPP11_DEFINE_ARRAY_HPP
|
||||||
171
include/msgpack/adaptor/detail/cpp11_define_map.hpp
Normal file
171
include/msgpack/adaptor/detail/cpp11_define_map.hpp
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_CPP11_DEFINE_MAP_HPP
|
||||||
|
#define MSGPACK_CPP11_DEFINE_MAP_HPP
|
||||||
|
|
||||||
|
// BOOST_PP_VARIADICS is defined in boost/preprocessor/config/config.hpp
|
||||||
|
// http://www.boost.org/libs/preprocessor/doc/ref/variadics.html
|
||||||
|
// However, supporting compiler detection is not complete. msgpack-c requires
|
||||||
|
// variadic macro arguments support. So BOOST_PP_VARIADICS is defined here explicitly.
|
||||||
|
#if !defined(MSGPACK_PP_VARIADICS)
|
||||||
|
#define MSGPACK_PP_VARIADICS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <msgpack/preprocessor.hpp>
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
|
||||||
|
// for MSGPACK_ADD_ENUM
|
||||||
|
#include "msgpack/adaptor/int.hpp"
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP_EACH_PROC(r, data, elem) \
|
||||||
|
MSGPACK_PP_IF( \
|
||||||
|
MSGPACK_PP_IS_BEGIN_PARENS(elem), \
|
||||||
|
elem, \
|
||||||
|
(MSGPACK_PP_STRINGIZE(elem))(elem) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP_IMPL(...) \
|
||||||
|
MSGPACK_PP_SEQ_TO_TUPLE( \
|
||||||
|
MSGPACK_PP_SEQ_FOR_EACH( \
|
||||||
|
MSGPACK_DEFINE_MAP_EACH_PROC, \
|
||||||
|
0, \
|
||||||
|
MSGPACK_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define MSGPACK_DEFINE_MAP(...) \
|
||||||
|
template <typename Packer> \
|
||||||
|
void msgpack_pack(Packer& pk) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_pack(pk); \
|
||||||
|
} \
|
||||||
|
void msgpack_unpack(msgpack::object const& o) \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_unpack(o); \
|
||||||
|
}\
|
||||||
|
template <typename MSGPACK_OBJECT> \
|
||||||
|
void msgpack_object(MSGPACK_OBJECT* o, msgpack::zone& z) const \
|
||||||
|
{ \
|
||||||
|
msgpack::type::make_define_map \
|
||||||
|
MSGPACK_DEFINE_MAP_IMPL(__VA_ARGS__) \
|
||||||
|
.msgpack_object(o, z); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MSGPACK_BASE_MAP(base) \
|
||||||
|
(MSGPACK_PP_STRINGIZE(base))(*const_cast<base *>(static_cast<base const*>(this)))
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
/// @cond
|
||||||
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
namespace type {
|
||||||
|
|
||||||
|
template <typename Tuple, std::size_t N>
|
||||||
|
struct define_map_imp {
|
||||||
|
template <typename Packer>
|
||||||
|
static void pack(Packer& pk, Tuple const& t) {
|
||||||
|
define_map_imp<Tuple, N-1>::pack(pk, t);
|
||||||
|
pk.pack(std::get<N-1>(t));
|
||||||
|
}
|
||||||
|
static void unpack(
|
||||||
|
msgpack::object const& o, Tuple const& t,
|
||||||
|
std::map<std::string, msgpack::object const*> const& kvmap) {
|
||||||
|
define_map_imp<Tuple, N-2>::unpack(o, t, kvmap);
|
||||||
|
auto it = kvmap.find(std::get<N-2>(t));
|
||||||
|
if (it != kvmap.end()) {
|
||||||
|
it->second->convert(std::get<N-1>(t));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static void object(msgpack::object* o, msgpack::zone& z, Tuple const& t) {
|
||||||
|
define_map_imp<Tuple, N-2>::object(o, z, t);
|
||||||
|
o->via.map.ptr[(N-1)/2].key = msgpack::object(std::get<N-2>(t), z);
|
||||||
|
o->via.map.ptr[(N-1)/2].val = msgpack::object(std::get<N-1>(t), z);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Tuple>
|
||||||
|
struct define_map_imp<Tuple, 0> {
|
||||||
|
template <typename Packer>
|
||||||
|
static void pack(Packer&, Tuple const&) {}
|
||||||
|
static void unpack(
|
||||||
|
msgpack::object const&, Tuple const&,
|
||||||
|
std::map<std::string, msgpack::object const*> const&) {}
|
||||||
|
static void object(msgpack::object*, msgpack::zone&, Tuple const&) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
struct define_map {
|
||||||
|
define_map(Args&... args) :
|
||||||
|
a(args...) {}
|
||||||
|
template <typename Packer>
|
||||||
|
void msgpack_pack(Packer& pk) const
|
||||||
|
{
|
||||||
|
static_assert(sizeof...(Args) % 2 == 0, "");
|
||||||
|
pk.pack_map(sizeof...(Args) / 2);
|
||||||
|
|
||||||
|
define_map_imp<std::tuple<Args&...>, sizeof...(Args)>::pack(pk, a);
|
||||||
|
}
|
||||||
|
void msgpack_unpack(msgpack::object const& o) const
|
||||||
|
{
|
||||||
|
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
|
std::map<std::string, msgpack::object const*> kvmap;
|
||||||
|
for (uint32_t i = 0; i < o.via.map.size; ++i) {
|
||||||
|
kvmap.emplace(
|
||||||
|
std::string(
|
||||||
|
o.via.map.ptr[i].key.via.str.ptr,
|
||||||
|
o.via.map.ptr[i].key.via.str.size),
|
||||||
|
&o.via.map.ptr[i].val);
|
||||||
|
}
|
||||||
|
define_map_imp<std::tuple<Args&...>, sizeof...(Args)>::unpack(o, a, kvmap);
|
||||||
|
}
|
||||||
|
void msgpack_object(msgpack::object* o, msgpack::zone& z) const
|
||||||
|
{
|
||||||
|
static_assert(sizeof...(Args) % 2 == 0, "");
|
||||||
|
o->type = msgpack::type::MAP;
|
||||||
|
o->via.map.ptr = static_cast<msgpack::object_kv*>(z.allocate_align(sizeof(msgpack::object_kv)*sizeof...(Args)/2));
|
||||||
|
o->via.map.size = sizeof...(Args) / 2;
|
||||||
|
|
||||||
|
define_map_imp<std::tuple<Args&...>, sizeof...(Args)>::object(o, z, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::tuple<Args&...> a;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
define_map<Args...> make_define_map(Args&... args)
|
||||||
|
{
|
||||||
|
return define_map<Args...>(args...);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace type
|
||||||
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
} // namespace msgpack
|
||||||
|
|
||||||
|
#endif // MSGPACK_CPP11_DEFINE_MAP_HPP
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// MessagePack for C++ static resolution routine
|
// MessagePack for C++ static resolution routine
|
||||||
//
|
//
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
// Copyright (C) 2008-2015 FURUHASHI Sadayuki and KONDO Takatoshi
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@@ -20,12 +20,15 @@
|
|||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/object_fwd.hpp"
|
||||||
|
#include "msgpack/meta.hpp"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
// tuple
|
// tuple
|
||||||
@@ -34,9 +37,6 @@ namespace type {
|
|||||||
using std::tuple_element;
|
using std::tuple_element;
|
||||||
using std::uses_allocator;
|
using std::uses_allocator;
|
||||||
using std::ignore;
|
using std::ignore;
|
||||||
using std::make_tuple;
|
|
||||||
using std::tie;
|
|
||||||
using std::forward_as_tuple;
|
|
||||||
using std::swap;
|
using std::swap;
|
||||||
|
|
||||||
template< class... Types >
|
template< class... Types >
|
||||||
@@ -71,24 +71,38 @@ namespace type {
|
|||||||
|
|
||||||
template< std::size_t I>
|
template< std::size_t I>
|
||||||
typename tuple_element<I, base >::type&
|
typename tuple_element<I, base >::type&
|
||||||
get() { return std::get<I>(*this); }
|
get() & { return std::get<I>(*this); }
|
||||||
|
|
||||||
template< std::size_t I>
|
template< std::size_t I>
|
||||||
typename tuple_element<I, base >::type const&
|
typename tuple_element<I, base >::type const&
|
||||||
get() const { return std::get<I>(*this); }
|
get() const& { return std::get<I>(*this); }
|
||||||
|
|
||||||
template< std::size_t I>
|
template< std::size_t I>
|
||||||
typename tuple_element<I, base >::type&&
|
typename tuple_element<I, base >::type&&
|
||||||
get() && { return std::get<I>(*this); }
|
get() && { return std::get<I>(*this); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template< class... Tuples >
|
template <class... Args>
|
||||||
auto tuple_cat(Tuples&&... args) ->
|
inline tuple<Args...> make_tuple(Args&&... args) {
|
||||||
|
return tuple<Args...>(args...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class... Args>
|
||||||
|
inline tuple<Args&&...> forward_as_tuple (Args&&... args) noexcept {
|
||||||
|
return tuple<Args&&...>(std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class... Tuples>
|
||||||
|
inline auto tuple_cat(Tuples&&... args) ->
|
||||||
decltype(
|
decltype(
|
||||||
std::tuple_cat(std::forward<typename std::remove_reference<Tuples>::type::base>(args)...)
|
std::tuple_cat(std::forward<typename std::remove_reference<Tuples>::type::base>(args)...)
|
||||||
) {
|
) {
|
||||||
return std::tuple_cat(std::forward<typename std::remove_reference<Tuples>::type::base>(args)...);
|
return std::tuple_cat(std::forward<typename std::remove_reference<Tuples>::type::base>(args)...);
|
||||||
}
|
}
|
||||||
|
template <class... Args>
|
||||||
|
inline tuple<Args&...> tie(Args&... args) {
|
||||||
|
return tuple<Args&...>(args...);
|
||||||
|
}
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
|
||||||
// --- Pack from tuple to packer stream ---
|
// --- Pack from tuple to packer stream ---
|
||||||
@@ -119,17 +133,50 @@ struct MsgpackTuplePacker<Stream, Tuple, 0> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Stream, typename... Args>
|
namespace adaptor {
|
||||||
const msgpack::packer<Stream>& operator<< (
|
|
||||||
msgpack::packer<Stream>& o,
|
template <typename... Args>
|
||||||
const type::tuple<Args...>& v) {
|
struct pack<msgpack::type::tuple<Args...>> {
|
||||||
o.pack_array(sizeof...(Args));
|
template <typename Stream>
|
||||||
MsgpackTuplePacker<Stream, decltype(v), sizeof...(Args)>::pack(o, v);
|
msgpack::packer<Stream>& operator()(
|
||||||
return o;
|
msgpack::packer<Stream>& o,
|
||||||
}
|
const msgpack::type::tuple<Args...>& v) const {
|
||||||
|
o.pack_array(sizeof...(Args));
|
||||||
|
MsgpackTuplePacker<Stream, decltype(v), sizeof...(Args)>::pack(o, v);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
// --- Convert from tuple to object ---
|
// --- Convert from tuple to object ---
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
struct MsgpackTupleAs;
|
||||||
|
|
||||||
|
template <typename T, typename... Args>
|
||||||
|
struct MsgpackTupleAsImpl {
|
||||||
|
static msgpack::type::tuple<T, Args...> as(msgpack::object const& o) {
|
||||||
|
return msgpack::type::tuple_cat(
|
||||||
|
msgpack::type::make_tuple(o.via.array.ptr[o.via.array.size - sizeof...(Args) - 1].as<T>()),
|
||||||
|
MsgpackTupleAs<Args...>::as(o));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
struct MsgpackTupleAs {
|
||||||
|
static msgpack::type::tuple<Args...> as(msgpack::object const& o) {
|
||||||
|
return MsgpackTupleAsImpl<Args...>::as(o);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct MsgpackTupleAs<> {
|
||||||
|
static msgpack::type::tuple<> as (msgpack::object const&) {
|
||||||
|
return msgpack::type::tuple<>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Tuple, std::size_t N>
|
template <typename Tuple, std::size_t N>
|
||||||
struct MsgpackTupleConverter {
|
struct MsgpackTupleConverter {
|
||||||
static void convert(
|
static void convert(
|
||||||
@@ -157,15 +204,31 @@ struct MsgpackTupleConverter<Tuple, 0> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
msgpack::object const& operator>> (
|
struct as<msgpack::type::tuple<Args...>, typename std::enable_if<msgpack::all_of<msgpack::has_as, Args...>::value>::type> {
|
||||||
msgpack::object const& o,
|
msgpack::type::tuple<Args...> operator()(
|
||||||
type::tuple<Args...>& v) {
|
msgpack::object const& o) 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 < sizeof...(Args)) { throw msgpack::type_error(); }
|
if (o.via.array.size < sizeof...(Args)) { throw msgpack::type_error(); }
|
||||||
MsgpackTupleConverter<decltype(v), sizeof...(Args)>::convert(o, v);
|
return MsgpackTupleAs<Args...>::as(o);
|
||||||
return o;
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
struct convert<msgpack::type::tuple<Args...>> {
|
||||||
|
msgpack::object const& operator()(
|
||||||
|
msgpack::object const& o,
|
||||||
|
msgpack::type::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(); }
|
||||||
|
MsgpackTupleConverter<decltype(v), sizeof...(Args)>::convert(o, v);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
// --- Convert from tuple to object with zone ---
|
// --- Convert from tuple to object with zone ---
|
||||||
template <typename Tuple, std::size_t N>
|
template <typename Tuple, std::size_t N>
|
||||||
@@ -195,17 +258,25 @@ struct MsgpackTupleToObjectWithZone<Tuple, 0> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename... Args>
|
namespace adaptor {
|
||||||
inline void operator<< (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
type::tuple<Args...> const& v) {
|
|
||||||
o.type = msgpack::type::ARRAY;
|
|
||||||
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*sizeof...(Args)));
|
|
||||||
o.via.array.size = sizeof...(Args);
|
|
||||||
MsgpackTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
struct object_with_zone<msgpack::type::tuple<Args...>> {
|
||||||
|
void operator()(
|
||||||
|
msgpack::object::with_zone& o,
|
||||||
|
msgpack::type::tuple<Args...> const& v) const {
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
o.via.array.ptr = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*sizeof...(Args)));
|
||||||
|
o.via.array.size = sizeof...(Args);
|
||||||
|
MsgpackTupleToObjectWithZone<decltype(v), sizeof...(Args)>::convert(o, v);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
///@endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,84 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_CPP11_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
#define MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <tuple>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
// tuple
|
|
||||||
using std::get;
|
|
||||||
using std::tuple_size;
|
|
||||||
using std::tuple_element;
|
|
||||||
using std::uses_allocator;
|
|
||||||
using std::ignore;
|
|
||||||
using std::make_tuple;
|
|
||||||
using std::tie;
|
|
||||||
using std::forward_as_tuple;
|
|
||||||
using std::swap;
|
|
||||||
|
|
||||||
template< class... Types >
|
|
||||||
class tuple;
|
|
||||||
|
|
||||||
template< class... Tuples >
|
|
||||||
auto tuple_cat(Tuples&&... args) ->
|
|
||||||
decltype(
|
|
||||||
std::tuple_cat(std::forward<typename std::remove_reference<Tuples>::type::base>(args)...)
|
|
||||||
);
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
// --- Pack ( from tuple to packer stream ---
|
|
||||||
template <typename Stream, typename Tuple, std::size_t N>
|
|
||||||
struct MsgpackTuplePacker;
|
|
||||||
|
|
||||||
template <typename Stream, typename... Args>
|
|
||||||
const msgpack::packer<Stream>& operator<< (
|
|
||||||
msgpack::packer<Stream>& o,
|
|
||||||
const type::tuple<Args...>& v);
|
|
||||||
|
|
||||||
// --- Convert from tuple to object ---
|
|
||||||
|
|
||||||
template <typename Tuple, std::size_t N>
|
|
||||||
struct MsgpackTupleConverter;
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
msgpack::object const& operator>> (
|
|
||||||
msgpack::object const& o,
|
|
||||||
type::tuple<Args...>& v);
|
|
||||||
|
|
||||||
// --- Convert from tuple to object with zone ---
|
|
||||||
template <typename Tuple, std::size_t N>
|
|
||||||
struct MsgpackTupleToObjectWithZone;
|
|
||||||
|
|
||||||
template <typename... Args>
|
|
||||||
void operator<< (
|
|
||||||
msgpack::object::with_zone& o,
|
|
||||||
type::tuple<Args...> const& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
245
include/msgpack/adaptor/ext.hpp
Normal file
245
include/msgpack/adaptor/ext.hpp
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
//
|
||||||
|
// MessagePack for C++ static resolution routine
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 KONDO Takatoshi
|
||||||
|
//
|
||||||
|
// 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_TYPE_EXT_HPP
|
||||||
|
#define MSGPACK_TYPE_EXT_HPP
|
||||||
|
|
||||||
|
#include "msgpack/versioning.hpp"
|
||||||
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
|
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
|
||||||
@@ -19,12 +19,14 @@
|
|||||||
#define MSGPACK_TYPE_FIXINT_HPP
|
#define MSGPACK_TYPE_FIXINT_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/int.hpp"
|
#include "msgpack/adaptor/int.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
@@ -56,156 +58,248 @@ typedef fix_int<int64_t> fix_int64;
|
|||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int8& v)
|
template <>
|
||||||
|
struct convert<type::fix_int8> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_int8& v) const
|
||||||
{ v = type::detail::convert_integer<int8_t>(o); return o; }
|
{ v = type::detail::convert_integer<int8_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int16& v)
|
template <>
|
||||||
|
struct convert<type::fix_int16> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_int16& v) const
|
||||||
{ v = type::detail::convert_integer<int16_t>(o); return o; }
|
{ v = type::detail::convert_integer<int16_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int32& v)
|
template <>
|
||||||
|
struct convert<type::fix_int32> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_int32& v) const
|
||||||
{ v = type::detail::convert_integer<int32_t>(o); return o; }
|
{ v = type::detail::convert_integer<int32_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_int64& v)
|
template <>
|
||||||
|
struct convert<type::fix_int64> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_int64& v) const
|
||||||
{ v = type::detail::convert_integer<int64_t>(o); return o; }
|
{ v = type::detail::convert_integer<int64_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint8& v)
|
template <>
|
||||||
|
struct convert<type::fix_uint8> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint8& v) const
|
||||||
{ v = type::detail::convert_integer<uint8_t>(o); return o; }
|
{ v = type::detail::convert_integer<uint8_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint16& v)
|
template <>
|
||||||
|
struct convert<type::fix_uint16> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint16& v) const
|
||||||
{ v = type::detail::convert_integer<uint16_t>(o); return o; }
|
{ v = type::detail::convert_integer<uint16_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint32& v)
|
template <>
|
||||||
|
struct convert<type::fix_uint32> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint32& v) const
|
||||||
{ v = type::detail::convert_integer<uint32_t>(o); return o; }
|
{ v = type::detail::convert_integer<uint32_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint64& v)
|
template <>
|
||||||
|
struct convert<type::fix_uint64> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, type::fix_uint64& v) const
|
||||||
{ v = type::detail::convert_integer<uint64_t>(o); return o; }
|
{ v = type::detail::convert_integer<uint64_t>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
template <typename Stream>
|
struct pack<type::fix_int8> {
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int8& v)
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int8& v) const
|
||||||
{ o.pack_fix_int8(v); return o; }
|
{ o.pack_fix_int8(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int16& v)
|
struct pack<type::fix_int16> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int16& v) const
|
||||||
{ o.pack_fix_int16(v); return o; }
|
{ o.pack_fix_int16(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int32& v)
|
struct pack<type::fix_int32> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int32& v) const
|
||||||
{ o.pack_fix_int32(v); return o; }
|
{ o.pack_fix_int32(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int64& v)
|
struct pack<type::fix_int64> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_int64& v) const
|
||||||
{ o.pack_fix_int64(v); return o; }
|
{ o.pack_fix_int64(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint8& v)
|
struct pack<type::fix_uint8> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint8& v) const
|
||||||
{ o.pack_fix_uint8(v); return o; }
|
{ o.pack_fix_uint8(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint16& v)
|
struct pack<type::fix_uint16> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint16& v) const
|
||||||
{ o.pack_fix_uint16(v); return o; }
|
{ o.pack_fix_uint16(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint32& v)
|
struct pack<type::fix_uint32> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint32& v) const
|
||||||
{ o.pack_fix_uint32(v); return o; }
|
{ o.pack_fix_uint32(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint64& v)
|
struct pack<type::fix_uint64> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::fix_uint64& v) const
|
||||||
{ o.pack_fix_uint64(v); return o; }
|
{ o.pack_fix_uint64(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct object<type::fix_int8> {
|
||||||
|
void operator()(msgpack::object& o, type::fix_int8 v) const {
|
||||||
|
if (v.get() < 0) {
|
||||||
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v.get();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_int8 v)
|
template <>
|
||||||
{
|
struct object<type::fix_int16> {
|
||||||
if (v.get() < 0) {
|
void operator()(msgpack::object& o, type::fix_int16 v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if(v.get() < 0) {
|
||||||
o.via.i64 = v.get();
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v.get();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v.get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_int16 v)
|
template <>
|
||||||
{
|
struct object<type::fix_int32> {
|
||||||
if(v.get() < 0) {
|
void operator()(msgpack::object& o, type::fix_int32 v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if (v.get() < 0) {
|
||||||
o.via.i64 = v.get();
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v.get();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v.get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_int32 v)
|
template <>
|
||||||
{
|
struct object<type::fix_int64> {
|
||||||
if (v.get() < 0) {
|
void operator()(msgpack::object& o, type::fix_int64 v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if (v.get() < 0) {
|
||||||
o.via.i64 = v.get();
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v.get();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v.get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_int64 v)
|
template <>
|
||||||
{
|
struct object<type::fix_uint8> {
|
||||||
if (v.get() < 0) {
|
void operator()(msgpack::object& o, type::fix_uint8 v) const
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v.get();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_uint8 v)
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_uint16 v)
|
template <>
|
||||||
|
struct object<type::fix_uint16> {
|
||||||
|
void operator()(msgpack::object& o, type::fix_uint16 v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_uint32 v)
|
template <>
|
||||||
|
struct object<type::fix_uint32> {
|
||||||
|
void operator()(msgpack::object& o, type::fix_uint32 v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::fix_uint64 v)
|
template <>
|
||||||
|
struct object<type::fix_uint64> {
|
||||||
|
void operator()(msgpack::object& o, type::fix_uint64 v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_int8 v)
|
struct object_with_zone<type::fix_int8> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_int8 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_int16 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_int16> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_int16 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_int32 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_int32> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_int32 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_int64 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_int64> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_int64 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_uint8 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_uint8> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_uint8 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_uint16 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_uint16> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_uint16 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_uint32 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_uint32> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_uint32 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::fix_uint64 v)
|
template <>
|
||||||
|
struct object_with_zone<type::fix_uint64> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::fix_uint64 v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_FIXINT_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_FIXINT_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct fix_int;
|
|
||||||
|
|
||||||
typedef fix_int<uint8_t> fix_uint8;
|
|
||||||
typedef fix_int<uint16_t> fix_uint16;
|
|
||||||
typedef fix_int<uint32_t> fix_uint32;
|
|
||||||
typedef fix_int<uint64_t> fix_uint64;
|
|
||||||
|
|
||||||
typedef fix_int<int8_t> fix_int8;
|
|
||||||
typedef fix_int<int16_t> fix_int16;
|
|
||||||
typedef fix_int<int32_t> fix_int32;
|
|
||||||
typedef fix_int<int64_t> fix_int64;
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_int8& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_int16& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_int32& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_int64& v);
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint8& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint16& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint32& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::fix_uint64& v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int8& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int16& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int32& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_int64& v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint8& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint16& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint32& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::fix_uint64& v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, type::fix_int8 v);
|
|
||||||
void operator<< (msgpack::object& o, type::fix_int16 v);
|
|
||||||
void operator<< (msgpack::object& o, type::fix_int32 v);
|
|
||||||
void operator<< (msgpack::object& o, type::fix_int64 v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, type::fix_uint8 v);
|
|
||||||
void operator<< (msgpack::object& o, type::fix_uint16 v);
|
|
||||||
void operator<< (msgpack::object& o, type::fix_uint32 v);
|
|
||||||
void operator<< (msgpack::object& o, type::fix_uint64 v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_int8 v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_int16 v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_int32 v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_int64 v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_uint8 v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_uint16 v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_uint32 v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::fix_uint64 v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_FIXINT_FWD_HPP
|
|
||||||
@@ -24,81 +24,107 @@
|
|||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
// FIXME check overflow, underflow
|
// FIXME check overflow, underflow
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, float& v)
|
template <>
|
||||||
{
|
struct convert<float> {
|
||||||
if(o.type == msgpack::type::FLOAT) {
|
msgpack::object const& operator()(msgpack::object const& o, float& v) const {
|
||||||
v = static_cast<float>(o.via.f64);
|
if(o.type == msgpack::type::FLOAT) {
|
||||||
|
v = static_cast<float>(o.via.f64);
|
||||||
|
}
|
||||||
|
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
|
||||||
|
v = static_cast<float>(o.via.u64);
|
||||||
|
}
|
||||||
|
else if (o.type == msgpack::type::NEGATIVE_INTEGER) {
|
||||||
|
v = static_cast<float>(o.via.i64);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw msgpack::type_error();
|
||||||
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
|
};
|
||||||
v = static_cast<float>(o.via.u64);
|
|
||||||
|
template <>
|
||||||
|
struct pack<float> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const float& v) const {
|
||||||
|
o.pack_float(v);
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
else if (o.type == msgpack::type::NEGATIVE_INTEGER) {
|
};
|
||||||
v = static_cast<float>(o.via.i64);
|
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct convert<double> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, double& v) const {
|
||||||
|
if(o.type == msgpack::type::FLOAT) {
|
||||||
|
v = o.via.f64;
|
||||||
|
}
|
||||||
|
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
|
||||||
|
v = static_cast<double>(o.via.u64);
|
||||||
|
}
|
||||||
|
else if (o.type == msgpack::type::NEGATIVE_INTEGER) {
|
||||||
|
v = static_cast<double>(o.via.i64);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw msgpack::type_error();
|
||||||
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
throw msgpack::type_error();
|
|
||||||
|
template <>
|
||||||
|
struct pack<double> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const double& v) const {
|
||||||
|
o.pack_double(v);
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const float& v)
|
|
||||||
{
|
|
||||||
o.pack_float(v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, double& v)
|
template <>
|
||||||
{
|
struct object<float> {
|
||||||
if(o.type == msgpack::type::FLOAT) {
|
void operator()(msgpack::object& o, float v) const {
|
||||||
v = o.via.f64;
|
o.type = msgpack::type::FLOAT;
|
||||||
|
o.via.f64 = static_cast<double>(v);
|
||||||
}
|
}
|
||||||
else if (o.type == msgpack::type::POSITIVE_INTEGER) {
|
};
|
||||||
v = static_cast<double>(o.via.u64);
|
|
||||||
|
template <>
|
||||||
|
struct object<double> {
|
||||||
|
void operator()(msgpack::object& o, double v) const {
|
||||||
|
o.type = msgpack::type::FLOAT;
|
||||||
|
o.via.f64 = v;
|
||||||
}
|
}
|
||||||
else if (o.type == msgpack::type::NEGATIVE_INTEGER) {
|
};
|
||||||
v = static_cast<double>(o.via.i64);
|
|
||||||
|
template <>
|
||||||
|
struct object_with_zone<float> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, float v) const {
|
||||||
|
static_cast<msgpack::object&>(o) << v;
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
throw msgpack::type_error();
|
|
||||||
|
template <>
|
||||||
|
struct object_with_zone<double> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, double v) const {
|
||||||
|
static_cast<msgpack::object&>(o) << v;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const double& v)
|
|
||||||
{
|
|
||||||
o.pack_double(v);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, float v)
|
|
||||||
{
|
|
||||||
o.type = msgpack::type::FLOAT;
|
|
||||||
o.via.f64 = static_cast<double>(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, double v)
|
|
||||||
{
|
|
||||||
o.type = msgpack::type::FLOAT;
|
|
||||||
o.via.f64 = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, float v)
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, double v)
|
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_FLOAT_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_FLOAT_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, float& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const float& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, double& v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const double& v);
|
|
||||||
void operator<< (msgpack::object& o, float v);
|
|
||||||
void operator<< (msgpack::object& o, double v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, float v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, double v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_FLOAT_FWD_HPP
|
|
||||||
@@ -19,12 +19,14 @@
|
|||||||
#define MSGPACK_TYPE_INT_HPP
|
#define MSGPACK_TYPE_INT_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1){
|
MSGPACK_API_VERSION_NAMESPACE(v1){
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
namespace detail {
|
namespace detail {
|
||||||
@@ -101,207 +103,333 @@ namespace detail {
|
|||||||
} // namespace detail
|
} // namespace detail
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, char& v)
|
namespace adaptor {
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct convert<char> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, char& v) const
|
||||||
{ v = type::detail::convert_integer<char>(o); return o; }
|
{ v = type::detail::convert_integer<char>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, signed char& v)
|
struct convert<signed char> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, signed char& v) const
|
||||||
{ v = type::detail::convert_integer<signed char>(o); return o; }
|
{ v = type::detail::convert_integer<signed char>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, signed short& v)
|
template <>
|
||||||
|
struct convert<signed short> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, signed short& v) const
|
||||||
{ v = type::detail::convert_integer<signed short>(o); return o; }
|
{ v = type::detail::convert_integer<signed short>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, signed int& v)
|
template <>
|
||||||
|
struct convert<signed int> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, signed int& v) const
|
||||||
{ v = type::detail::convert_integer<signed int>(o); return o; }
|
{ v = type::detail::convert_integer<signed int>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, signed long& v)
|
template <>
|
||||||
|
struct convert<signed long> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, signed long& v) const
|
||||||
{ v = type::detail::convert_integer<signed long>(o); return o; }
|
{ v = type::detail::convert_integer<signed long>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, signed long long& v)
|
template <>
|
||||||
|
struct convert<signed long long> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, signed long long& v) const
|
||||||
{ v = type::detail::convert_integer<signed long long>(o); return o; }
|
{ v = type::detail::convert_integer<signed long long>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, unsigned char& v)
|
template <>
|
||||||
|
struct convert<unsigned char> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, unsigned char& v) const
|
||||||
{ v = type::detail::convert_integer<unsigned char>(o); return o; }
|
{ v = type::detail::convert_integer<unsigned char>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, unsigned short& v)
|
template <>
|
||||||
|
struct convert<unsigned short> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, unsigned short& v) const
|
||||||
{ v = type::detail::convert_integer<unsigned short>(o); return o; }
|
{ v = type::detail::convert_integer<unsigned short>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, unsigned int& v)
|
template <>
|
||||||
|
struct convert<unsigned int> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, unsigned int& v) const
|
||||||
{ v = type::detail::convert_integer<unsigned int>(o); return o; }
|
{ v = type::detail::convert_integer<unsigned int>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, unsigned long& v)
|
template <>
|
||||||
|
struct convert<unsigned long> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, unsigned long& v) const
|
||||||
{ v = type::detail::convert_integer<unsigned long>(o); return o; }
|
{ v = type::detail::convert_integer<unsigned long>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, unsigned long long& v)
|
template <>
|
||||||
|
struct convert<unsigned long long> {
|
||||||
|
msgpack::object const& operator()(msgpack::object const& o, unsigned long long& v) const
|
||||||
{ v = type::detail::convert_integer<unsigned long long>(o); return o; }
|
{ v = type::detail::convert_integer<unsigned long long>(o); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, char v)
|
struct pack<char> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, char v) const
|
||||||
{ o.pack_char(v); return o; }
|
{ o.pack_char(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
template <typename Stream>
|
struct pack<signed char> {
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed char v)
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed char v) const
|
||||||
{ o.pack_signed_char(v); return o; }
|
{ o.pack_signed_char(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed short v)
|
struct pack<signed short> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed short v) const
|
||||||
{ o.pack_short(v); return o; }
|
{ o.pack_short(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed int v)
|
struct pack<signed int> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed int v) const
|
||||||
{ o.pack_int(v); return o; }
|
{ o.pack_int(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed long v)
|
struct pack<signed long> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed long v) const
|
||||||
{ o.pack_long(v); return o; }
|
{ o.pack_long(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed long long v)
|
struct pack<signed long long> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, signed long long v) const
|
||||||
{ o.pack_long_long(v); return o; }
|
{ o.pack_long_long(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned char v)
|
struct pack<unsigned char> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned char v) const
|
||||||
{ o.pack_unsigned_char(v); return o; }
|
{ o.pack_unsigned_char(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned short v)
|
struct pack<unsigned short> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned short v) const
|
||||||
{ o.pack_unsigned_short(v); return o; }
|
{ o.pack_unsigned_short(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned int v)
|
struct pack<unsigned int> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned int v) const
|
||||||
{ o.pack_unsigned_int(v); return o; }
|
{ o.pack_unsigned_int(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned long v)
|
struct pack<unsigned long> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned long v) const
|
||||||
{ o.pack_unsigned_long(v); return o; }
|
{ o.pack_unsigned_long(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned long long v)
|
struct pack<unsigned long long> {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, unsigned long long v) const
|
||||||
{ o.pack_unsigned_long_long(v); return o; }
|
{ o.pack_unsigned_long_long(v); return o; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, char v)
|
template <>
|
||||||
|
struct object<char> {
|
||||||
|
void operator()(msgpack::object& o, char v) const
|
||||||
{ type::detail::object_char(o, v); }
|
{ type::detail::object_char(o, v); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct object<signed char> {
|
||||||
|
void operator()(msgpack::object& o, signed char v) const {
|
||||||
|
if (v < 0) {
|
||||||
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, signed char v)
|
template <>
|
||||||
{
|
struct object<signed short> {
|
||||||
if (v < 0) {
|
void operator()(msgpack::object& o, signed short v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if (v < 0) {
|
||||||
o.via.i64 = v;
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, signed short v)
|
template <>
|
||||||
{
|
struct object<signed int> {
|
||||||
if (v < 0) {
|
void operator()(msgpack::object& o, signed int v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if (v < 0) {
|
||||||
o.via.i64 = v;
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, signed int v)
|
template <>
|
||||||
{
|
struct object<signed long> {
|
||||||
if (v < 0) {
|
void operator()(msgpack::object& o, signed long v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if (v < 0) {
|
||||||
o.via.i64 = v;
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, signed long v)
|
template <>
|
||||||
{
|
struct object<signed long long> {
|
||||||
if (v < 0) {
|
void operator()(msgpack::object& o, signed long long v) const {
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
if (v < 0) {
|
||||||
o.via.i64 = v;
|
o.type = msgpack::type::NEGATIVE_INTEGER;
|
||||||
|
o.via.i64 = v;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
o.type = msgpack::type::POSITIVE_INTEGER;
|
||||||
|
o.via.u64 = v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
};
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, signed long long v)
|
template <>
|
||||||
{
|
struct object<unsigned char> {
|
||||||
if (v < 0) {
|
void operator()(msgpack::object& o, unsigned char v) const
|
||||||
o.type = msgpack::type::NEGATIVE_INTEGER;
|
|
||||||
o.via.i64 = v;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
o.type = msgpack::type::POSITIVE_INTEGER;
|
|
||||||
o.via.u64 = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, unsigned char v)
|
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, unsigned short v)
|
template <>
|
||||||
|
struct object<unsigned short> {
|
||||||
|
void operator()(msgpack::object& o, unsigned short v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, unsigned int v)
|
template <>
|
||||||
|
struct object<unsigned int> {
|
||||||
|
void operator()(msgpack::object& o, unsigned int v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, unsigned long v)
|
template <>
|
||||||
|
struct object<unsigned long> {
|
||||||
|
void operator()(msgpack::object& o, unsigned long v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, unsigned long long v)
|
template <>
|
||||||
|
struct object<unsigned long long> {
|
||||||
|
void operator()(msgpack::object& o, unsigned long long v) const
|
||||||
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
{ o.type = msgpack::type::POSITIVE_INTEGER, o.via.u64 = v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, char v)
|
struct object_with_zone<char> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, char v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, signed char v)
|
struct object_with_zone<signed char> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, signed char v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, signed short v)
|
template <>
|
||||||
|
struct object_with_zone<signed short> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, signed short v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, signed int v)
|
template <>
|
||||||
|
struct object_with_zone<signed int> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, signed int v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, signed long v)
|
template <>
|
||||||
|
struct object_with_zone<signed long> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, signed long v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const signed long long& v)
|
template <>
|
||||||
|
struct object_with_zone<signed long long> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const signed long long& v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, unsigned char v)
|
struct object_with_zone<unsigned char> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, unsigned char v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, unsigned short v)
|
template <>
|
||||||
|
struct object_with_zone<unsigned short> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, unsigned short v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, unsigned int v)
|
template <>
|
||||||
|
struct object_with_zone<unsigned int> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, unsigned int v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, unsigned long v)
|
template <>
|
||||||
|
struct object_with_zone<unsigned long> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, unsigned long v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const unsigned long long& v)
|
template <>
|
||||||
|
struct object_with_zone<unsigned long long> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const unsigned long long& v) const
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
{ static_cast<msgpack::object&>(o) << v; }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,100 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ forward declaration
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_INT_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_INT_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1){
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, char& v);
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, signed char& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, signed short& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, signed int& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, signed long& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, signed long long& v);
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, unsigned char& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, unsigned short& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, unsigned int& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, unsigned long& v);
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, unsigned long long& v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, char v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed char v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed short v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed int v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed long v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, signed long long v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned char v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned short v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned int v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned long v);
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, unsigned long long v);
|
|
||||||
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, char v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, signed char v);
|
|
||||||
void operator<< (msgpack::object& o, signed short v);
|
|
||||||
void operator<< (msgpack::object& o, signed int v);
|
|
||||||
void operator<< (msgpack::object& o, signed long v);
|
|
||||||
void operator<< (msgpack::object& o, signed long long v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, unsigned char v);
|
|
||||||
void operator<< (msgpack::object& o, unsigned short v);
|
|
||||||
void operator<< (msgpack::object& o, unsigned int v);
|
|
||||||
void operator<< (msgpack::object& o, unsigned long v);
|
|
||||||
void operator<< (msgpack::object& o, unsigned long long v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, char v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, signed char v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, signed short v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, signed int v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, signed long v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const signed long long& v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, unsigned char v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, unsigned short v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, unsigned int v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, unsigned long v);
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const unsigned long long& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_INT_FWD_HPP
|
|
||||||
@@ -19,64 +19,95 @@
|
|||||||
#define MSGPACK_TYPE_LIST_HPP
|
#define MSGPACK_TYPE_LIST_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename T>
|
namespace adaptor {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::list<T>& v)
|
|
||||||
{
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
v.resize(o.via.array.size);
|
template <typename T, typename Alloc>
|
||||||
msgpack::object* p = o.via.array.ptr;
|
struct as<std::list<T, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
std::list<T, Alloc> operator()(msgpack::object const& o) const {
|
||||||
typename std::list<T>::iterator it = v.begin();
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
for(; p < pend; ++p, ++it) {
|
std::list<T, Alloc> v;
|
||||||
p->convert(*it);
|
msgpack::object* p = o.via.array.ptr;
|
||||||
|
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
||||||
|
for (; p < pend; ++p) {
|
||||||
|
v.push_back(p->as<T>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::list<T>& v)
|
|
||||||
{
|
template <typename T, typename Alloc>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
struct convert<std::list<T, Alloc> > {
|
||||||
o.pack_array(size);
|
msgpack::object const& operator()(msgpack::object const& o, std::list<T, Alloc>& v) const {
|
||||||
for(typename std::list<T>::const_iterator it(v.begin()), it_end(v.end());
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
it != it_end; ++it) {
|
v.resize(o.via.array.size);
|
||||||
o.pack(*it);
|
msgpack::object* p = o.via.array.ptr;
|
||||||
|
msgpack::object* const pend = o.via.array.ptr + o.via.array.size;
|
||||||
|
typename std::list<T, Alloc>::iterator it = v.begin();
|
||||||
|
for (; p < pend; ++p, ++it) {
|
||||||
|
p->convert(*it);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::list<T>& v)
|
struct pack<std::list<T, Alloc> > {
|
||||||
{
|
template <typename Stream>
|
||||||
o.type = msgpack::type::ARRAY;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::list<T, Alloc>& v) const {
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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.pack_array(size);
|
||||||
msgpack::object* const pend = p + size;
|
for (typename std::list<T, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.array.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.array.size = size;
|
o.pack(*it);
|
||||||
typename std::list<T>::const_iterator it(v.begin());
|
}
|
||||||
do {
|
return o;
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Alloc>
|
||||||
|
struct object_with_zone<std::list<T, Alloc> > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const std::list<T, Alloc>& v) const {
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
if (v.empty()) {
|
||||||
|
o.via.array.ptr = nullptr;
|
||||||
|
o.via.array.size = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||||
|
msgpack::object* const pend = p + size;
|
||||||
|
o.via.array.ptr = p;
|
||||||
|
o.via.array.size = size;
|
||||||
|
typename std::list<T, Alloc>::const_iterator it(v.begin());
|
||||||
|
do {
|
||||||
|
*p = msgpack::object(*it, o.zone);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +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_TYPE_LIST_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_LIST_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::list<T>& v);
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::list<T>& v);
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::list<T>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_LIST_FWD_HPP
|
|
||||||
@@ -28,191 +28,286 @@
|
|||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
template <typename K, typename V>
|
template <typename K, typename V, typename Compare = std::less<K>, typename Alloc = std::allocator<std::pair<K, V> > >
|
||||||
class assoc_vector : public std::vector< std::pair<K, V> > {};
|
class assoc_vector : public std::vector< std::pair<K, V>, Alloc > {
|
||||||
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
|
using std::vector<std::pair<K, V>, Alloc>::vector;
|
||||||
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
|
};
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template <typename K, typename V>
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
struct pair_first_less {
|
struct pair_first_less {
|
||||||
bool operator() (const std::pair<K, V>& x, const std::pair<K, V>& y) const
|
bool operator() (const std::pair<K, V>& x, const std::pair<K, V>& y) const
|
||||||
{ return x.first < y.first; }
|
{ return Compare()(x.first, y.first); }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
} //namespace type
|
} //namespace type
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
template <typename K, typename V>
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::assoc_vector<K,V>& v)
|
|
||||||
{
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
struct as<
|
||||||
v.resize(o.via.map.size);
|
type::assoc_vector<K, V, Compare, Alloc>,
|
||||||
msgpack::object_kv* p = o.via.map.ptr;
|
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
||||||
msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size;
|
type::assoc_vector<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
std::pair<K, V>* it(&v.front());
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
for(; p < pend; ++p, ++it) {
|
type::assoc_vector<K, V, Compare, Alloc> v;
|
||||||
p->key.convert(it->first);
|
v.reserve(o.via.map.size);
|
||||||
p->val.convert(it->second);
|
msgpack::object_kv* p = o.via.map.ptr;
|
||||||
|
msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size;
|
||||||
|
for (; p < pend; ++p) {
|
||||||
|
v.emplace_back(p->key.as<K>(), p->val.as<V>());
|
||||||
|
}
|
||||||
|
std::sort(v.begin(), v.end(), type::detail::pair_first_less<K, V, Compare, Alloc>());
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
std::sort(v.begin(), v.end(), type::detail::pair_first_less<K,V>());
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::assoc_vector<K,V>& v)
|
|
||||||
{
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
|
||||||
o.pack_map(size);
|
|
||||||
for(typename type::assoc_vector<K,V>::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>
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const type::assoc_vector<K,V>& v)
|
struct convert<type::assoc_vector<K, V, Compare, Alloc> > {
|
||||||
{
|
msgpack::object const& operator()(msgpack::object const& o, type::assoc_vector<K, V, Compare, Alloc>& v) const {
|
||||||
o.type = msgpack::type::MAP;
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
if(v.empty()) {
|
v.resize(o.via.map.size);
|
||||||
o.via.map.ptr = nullptr;
|
msgpack::object_kv* p = o.via.map.ptr;
|
||||||
o.via.map.size = 0;
|
msgpack::object_kv* const pend = o.via.map.ptr + o.via.map.size;
|
||||||
} else {
|
std::pair<K, V>* it(&v.front());
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
for (; p < pend; ++p, ++it) {
|
||||||
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
p->key.convert(it->first);
|
||||||
msgpack::object_kv* const pend = p + size;
|
|
||||||
o.via.map.ptr = p;
|
|
||||||
o.via.map.size = size;
|
|
||||||
typename type::assoc_vector<K,V>::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>
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::map<K, V>& v)
|
|
||||||
{
|
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
|
||||||
std::map<K, V> tmp;
|
|
||||||
for(; p != pend; ++p) {
|
|
||||||
K key;
|
|
||||||
p->key.convert(key);
|
|
||||||
typename std::map<K,V>::iterator it(tmp.lower_bound(key));
|
|
||||||
if(it != tmp.end() && !(key < it->first)) {
|
|
||||||
p->val.convert(it->second);
|
p->val.convert(it->second);
|
||||||
} else {
|
}
|
||||||
V val;
|
std::sort(v.begin(), v.end(), type::detail::pair_first_less<K, V, Compare, Alloc>());
|
||||||
p->val.convert(val);
|
return o;
|
||||||
tmp.insert(it, std::pair<K,V>(key, val));
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
|
struct pack<type::assoc_vector<K, V, Compare, Alloc> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::assoc_vector<K, V, Compare, Alloc>& v) const {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
o.pack_map(size);
|
||||||
|
for (typename type::assoc_vector<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
|
it != it_end; ++it) {
|
||||||
|
o.pack(it->first);
|
||||||
|
o.pack(it->second);
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
|
struct object_with_zone<type::assoc_vector<K, V, Compare, Alloc> > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const type::assoc_vector<K, V, Compare, Alloc>& v) const {
|
||||||
|
o.type = msgpack::type::MAP;
|
||||||
|
if (v.empty()) {
|
||||||
|
o.via.map.ptr = nullptr;
|
||||||
|
o.via.map.size = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||||
|
msgpack::object_kv* const pend = p + size;
|
||||||
|
o.via.map.ptr = p;
|
||||||
|
o.via.map.size = size;
|
||||||
|
typename type::assoc_vector<K, V, Compare, Alloc>::const_iterator it(v.begin());
|
||||||
|
do {
|
||||||
|
p->key = msgpack::object(it->first, o.zone);
|
||||||
|
p->val = msgpack::object(it->second, o.zone);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::map<K,V>& v)
|
|
||||||
{
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
struct as<
|
||||||
o.pack_map(size);
|
std::map<K, V, Compare, Alloc>,
|
||||||
for(typename std::map<K,V>::const_iterator it(v.begin()), it_end(v.end());
|
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
||||||
it != it_end; ++it) {
|
std::map<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
o.pack(it->first);
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
o.pack(it->second);
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
|
std::map<K, V, Compare, Alloc> v;
|
||||||
|
for (; p != pend; ++p) {
|
||||||
|
v.emplace(p->key.as<K>(), p->val.as<V>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::map<K,V>& v)
|
|
||||||
{
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
o.type = msgpack::type::MAP;
|
struct convert<std::map<K, V, Compare, Alloc> > {
|
||||||
if(v.empty()) {
|
msgpack::object const& operator()(msgpack::object const& o, std::map<K, V, Compare, Alloc>& v) const {
|
||||||
o.via.map.ptr = nullptr;
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
o.via.map.size = 0;
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
} else {
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
|
std::map<K, V, Compare, Alloc> tmp;
|
||||||
|
for (; p != pend; ++p) {
|
||||||
|
K key;
|
||||||
|
p->key.convert(key);
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
p->val.convert(tmp[std::move(key)]);
|
||||||
|
#else
|
||||||
|
p->val.convert(tmp[key]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
v = std::move(tmp);
|
||||||
|
#else
|
||||||
|
tmp.swap(v);
|
||||||
|
#endif
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
|
struct pack<std::map<K, V, Compare, Alloc> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::map<K, V, Compare, Alloc>& v) const {
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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));
|
o.pack_map(size);
|
||||||
msgpack::object_kv* const pend = p + size;
|
for (typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.map.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.map.size = size;
|
o.pack(it->first);
|
||||||
typename std::map<K,V>::const_iterator it(v.begin());
|
o.pack(it->second);
|
||||||
do {
|
}
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
return o;
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
template <typename K, typename V>
|
struct object_with_zone<std::map<K, V, Compare, Alloc> > {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::multimap<K, V>& v)
|
void operator()(msgpack::object::with_zone& o, const std::map<K, V, Compare, Alloc>& v) const {
|
||||||
{
|
o.type = msgpack::type::MAP;
|
||||||
if(o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
if (v.empty()) {
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
o.via.map.ptr = nullptr;
|
||||||
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
o.via.map.size = 0;
|
||||||
std::multimap<K, V> tmp;
|
}
|
||||||
for(; p != pend; ++p) {
|
else {
|
||||||
std::pair<K, V> value;
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
p->key.convert(value.first);
|
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||||
p->val.convert(value.second);
|
msgpack::object_kv* const pend = p + size;
|
||||||
tmp.insert(value);
|
o.via.map.ptr = p;
|
||||||
|
o.via.map.size = size;
|
||||||
|
typename std::map<K, V, Compare, Alloc>::const_iterator it(v.begin());
|
||||||
|
do {
|
||||||
|
p->key = msgpack::object(it->first, o.zone);
|
||||||
|
p->val = msgpack::object(it->second, o.zone);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename K, typename V>
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::multimap<K,V>& v)
|
|
||||||
{
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
struct as<
|
||||||
o.pack_map(size);
|
std::multimap<K, V, Compare, Alloc>,
|
||||||
for(typename std::multimap<K,V>::const_iterator it(v.begin()), it_end(v.end());
|
typename std::enable_if<msgpack::has_as<K>::value && msgpack::has_as<V>::value>::type> {
|
||||||
it != it_end; ++it) {
|
std::multimap<K, V, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
o.pack(it->first);
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
o.pack(it->second);
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
|
std::multimap<K, V, Compare, Alloc> v;
|
||||||
|
for (; p != pend; ++p) {
|
||||||
|
v.emplace(p->key.as<K>(), p->val.as<V>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::multimap<K,V>& v)
|
|
||||||
{
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
o.type = msgpack::type::MAP;
|
struct convert<std::multimap<K, V, Compare, Alloc> > {
|
||||||
if(v.empty()) {
|
msgpack::object const& operator()(msgpack::object const& o, std::multimap<K, V, Compare, Alloc>& v) const {
|
||||||
o.via.map.ptr = nullptr;
|
if (o.type != msgpack::type::MAP) { throw msgpack::type_error(); }
|
||||||
o.via.map.size = 0;
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
} else {
|
msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
|
std::multimap<K, V, Compare, Alloc> tmp;
|
||||||
|
for (; p != pend; ++p) {
|
||||||
|
std::pair<K, V> value;
|
||||||
|
p->key.convert(value.first);
|
||||||
|
p->val.convert(value.second);
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
tmp.insert(std::move(value));
|
||||||
|
#else
|
||||||
|
tmp.insert(value);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
v = std::move(tmp);
|
||||||
|
#else
|
||||||
|
tmp.swap(v);
|
||||||
|
#endif
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
|
struct pack<std::multimap<K, V, Compare, Alloc> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::multimap<K, V, Compare, Alloc>& v) const {
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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));
|
o.pack_map(size);
|
||||||
msgpack::object_kv* const pend = p + size;
|
for (typename std::multimap<K, V, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.map.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.map.size = size;
|
o.pack(it->first);
|
||||||
typename std::multimap<K,V>::const_iterator it(v.begin());
|
o.pack(it->second);
|
||||||
do {
|
}
|
||||||
p->key = msgpack::object(it->first, o.zone);
|
return o;
|
||||||
p->val = msgpack::object(it->second, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename K, typename V, typename Compare, typename Alloc>
|
||||||
|
struct object_with_zone<std::multimap<K, V, Compare, Alloc> > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const std::multimap<K, V, Compare, Alloc>& v) const {
|
||||||
|
o.type = msgpack::type::MAP;
|
||||||
|
if (v.empty()) {
|
||||||
|
o.via.map.ptr = nullptr;
|
||||||
|
o.via.map.size = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
msgpack::object_kv* p = static_cast<msgpack::object_kv*>(o.zone.allocate_align(sizeof(msgpack::object_kv)*size));
|
||||||
|
msgpack::object_kv* const pend = p + size;
|
||||||
|
o.via.map.ptr = p;
|
||||||
|
o.via.map.size = size;
|
||||||
|
typename std::multimap<K, V, Compare, Alloc>::const_iterator it(v.begin());
|
||||||
|
do {
|
||||||
|
p->key = msgpack::object(it->first, o.zone);
|
||||||
|
p->val = msgpack::object(it->second, o.zone);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_MAP_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_MAP_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <map>
|
|
||||||
#include <vector>
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
class assoc_vector;
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
template <typename K, typename V>
|
|
||||||
struct pair_first_less;
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::assoc_vector<K,V>& v);
|
|
||||||
template <typename Stream, typename K, typename V>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::assoc_vector<K,V>& v);
|
|
||||||
template <typename K, typename V>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const type::assoc_vector<K,V>& v);
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::map<K, V>& v);
|
|
||||||
template <typename Stream, typename K, typename V>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::map<K,V>& v);
|
|
||||||
template <typename K, typename V>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::map<K,V>& v);
|
|
||||||
|
|
||||||
template <typename K, typename V>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::multimap<K, V>& v);
|
|
||||||
template <typename Stream, typename K, typename V>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::multimap<K,V>& v);
|
|
||||||
template <typename K, typename V>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::multimap<K,V>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_MAP_HPP
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
#define MSGPACK_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/cpp_config.hpp"
|
|
||||||
|
|
||||||
#if defined(MSGPACK_USE_CPP03)
|
|
||||||
#include "detail/cpp03_msgpack_tuple_fwd.hpp"
|
|
||||||
#else // MSGPACK_USE_CPP03
|
|
||||||
#include "detail/cpp11_msgpack_tuple_fwd.hpp"
|
|
||||||
#endif // MSGPACK_USE_CPP03
|
|
||||||
|
|
||||||
#endif // MSGPACK_MSGPACK_TUPLE_FWD_HPP
|
|
||||||
@@ -19,40 +19,62 @@
|
|||||||
#define MSGPACK_TYPE_NIL_HPP
|
#define MSGPACK_TYPE_NIL_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
struct nil { };
|
struct nil { };
|
||||||
|
|
||||||
|
inline bool operator<(nil const& lhs, nil const& rhs) {
|
||||||
|
return &lhs < &rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool operator==(nil const& lhs, nil const& rhs) {
|
||||||
|
return &lhs == &rhs;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, type::nil&)
|
template <>
|
||||||
{
|
struct convert<type::nil> {
|
||||||
if(o.type != msgpack::type::NIL) { throw msgpack::type_error(); }
|
msgpack::object const& operator()(msgpack::object const& o, type::nil&) const {
|
||||||
return o;
|
if(o.type != msgpack::type::NIL) { throw msgpack::type_error(); }
|
||||||
}
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::nil&)
|
struct pack<type::nil> {
|
||||||
{
|
template <typename Stream>
|
||||||
o.pack_nil();
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::nil&) const {
|
||||||
return o;
|
o.pack_nil();
|
||||||
}
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, type::nil)
|
template <>
|
||||||
{
|
struct object<type::nil> {
|
||||||
o.type = msgpack::type::NIL;
|
void operator()(msgpack::object& o, type::nil) const {
|
||||||
}
|
o.type = msgpack::type::NIL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, type::nil v)
|
template <>
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
struct object_with_zone<type::nil> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, type::nil v) const {
|
||||||
|
static_cast<msgpack::object&>(o) << v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptror
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline void msgpack::object::as<void>() const
|
inline void msgpack::object::as<void>() const
|
||||||
@@ -61,7 +83,9 @@ inline void msgpack::object::as<void>() const
|
|||||||
convert(v);
|
convert(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_NIL_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_NIL_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
struct nil;
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::nil&);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::nil&);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, type::nil);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, type::nil v);
|
|
||||||
|
|
||||||
template <>
|
|
||||||
inline void msgpack::object::as<void>() const;
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_NIL_FWD_HPP
|
|
||||||
@@ -19,44 +19,72 @@
|
|||||||
#define MSGPACK_TYPE_PAIR_HPP
|
#define MSGPACK_TYPE_PAIR_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
|
#include "msgpack/meta.hpp"
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::pair<T1, T2>& v)
|
struct as<std::pair<T1, T2>,
|
||||||
{
|
typename std::enable_if<msgpack::all_of<msgpack::has_as, T1, T2>::value>::type> {
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
std::pair<T1, T2> operator()(msgpack::object const& o) const {
|
||||||
if(o.via.array.size != 2) { throw msgpack::type_error(); }
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
o.via.array.ptr[0].convert(v.first);
|
if (o.via.array.size != 2) { throw msgpack::type_error(); }
|
||||||
o.via.array.ptr[1].convert(v.second);
|
return std::make_pair(o.via.array.ptr[0].as<T1>(), o.via.array.ptr[1].as<T2>());
|
||||||
return o;
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
template <typename Stream, typename T1, typename T2>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::pair<T1, T2>& v)
|
|
||||||
{
|
|
||||||
o.pack_array(2);
|
|
||||||
o.pack(v.first);
|
|
||||||
o.pack(v.second);
|
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::pair<T1, T2>& v)
|
struct convert<std::pair<T1, T2> > {
|
||||||
{
|
msgpack::object const& operator()(msgpack::object const& o, std::pair<T1, T2>& v) const {
|
||||||
o.type = msgpack::type::ARRAY;
|
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2));
|
if(o.via.array.size != 2) { throw msgpack::type_error(); }
|
||||||
o.via.array.ptr = p;
|
o.via.array.ptr[0].convert(v.first);
|
||||||
o.via.array.size = 2;
|
o.via.array.ptr[1].convert(v.second);
|
||||||
p[0] = msgpack::object(v.first, o.zone);
|
return o;
|
||||||
p[1] = msgpack::object(v.second, o.zone);
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename T1, typename T2>
|
||||||
|
struct pack<std::pair<T1, T2> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::pair<T1, T2>& v) const {
|
||||||
|
o.pack_array(2);
|
||||||
|
o.pack(v.first);
|
||||||
|
o.pack(v.second);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T1, typename T2>
|
||||||
|
struct object_with_zone<std::pair<T1, T2> > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const std::pair<T1, T2>& v) const {
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*2));
|
||||||
|
o.via.array.ptr = p;
|
||||||
|
o.via.array.size = 2;
|
||||||
|
p[0] = msgpack::object(v.first, o.zone);
|
||||||
|
p[1] = msgpack::object(v.second, o.zone);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,42 +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_TYPE_PAIR_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_PAIR_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::pair<T1, T2>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T1, typename T2>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::pair<T1, T2>& v);
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::pair<T1, T2>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_PAIR_FWD_HPP
|
|
||||||
@@ -19,13 +19,15 @@
|
|||||||
#define MSGPACK_TYPE_RAW_HPP
|
#define MSGPACK_TYPE_RAW_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include <string.h>
|
#include <cstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
namespace type {
|
namespace type {
|
||||||
|
|
||||||
@@ -45,7 +47,7 @@ struct raw_ref {
|
|||||||
|
|
||||||
bool operator!= (const raw_ref& x) const
|
bool operator!= (const raw_ref& x) const
|
||||||
{
|
{
|
||||||
return !(*this != x);
|
return !(*this == x);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator< (const raw_ref& x) const
|
bool operator< (const raw_ref& x) const
|
||||||
@@ -61,38 +63,52 @@ struct raw_ref {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace type
|
} // namespace type
|
||||||
|
|
||||||
|
namespace adaptor {
|
||||||
|
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, msgpack::type::raw_ref& v)
|
template <>
|
||||||
{
|
struct convert<msgpack::type::raw_ref> {
|
||||||
if(o.type != msgpack::type::BIN) { throw msgpack::type_error(); }
|
msgpack::object const& operator()(msgpack::object const& o, msgpack::type::raw_ref& v) const {
|
||||||
v.ptr = o.via.bin.ptr;
|
if(o.type != msgpack::type::BIN) { throw msgpack::type_error(); }
|
||||||
v.size = o.via.bin.size;
|
v.ptr = o.via.bin.ptr;
|
||||||
return o;
|
v.size = o.via.bin.size;
|
||||||
}
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Stream>
|
template <>
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const msgpack::type::raw_ref& v)
|
struct pack<msgpack::type::raw_ref> {
|
||||||
{
|
template <typename Stream>
|
||||||
o.pack_bin(v.size);
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const msgpack::type::raw_ref& v) const {
|
||||||
o.pack_bin_body(v.ptr, v.size);
|
o.pack_bin(v.size);
|
||||||
return o;
|
o.pack_bin_body(v.ptr, v.size);
|
||||||
}
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object& o, const msgpack::type::raw_ref& v)
|
template <>
|
||||||
{
|
struct object<msgpack::type::raw_ref> {
|
||||||
o.type = msgpack::type::BIN;
|
void operator()(msgpack::object& o, const msgpack::type::raw_ref& v) const {
|
||||||
o.via.bin.ptr = v.ptr;
|
o.type = msgpack::type::BIN;
|
||||||
o.via.bin.size = v.size;
|
o.via.bin.ptr = v.ptr;
|
||||||
}
|
o.via.bin.size = v.size;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const msgpack::type::raw_ref& v)
|
template <>
|
||||||
{ static_cast<msgpack::object&>(o) << v; }
|
struct object_with_zone<msgpack::type::raw_ref> {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const msgpack::type::raw_ref& v) const {
|
||||||
|
static_cast<msgpack::object&>(o) << v;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
/// @cond
|
||||||
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_RAW_HPP
|
#endif // MSGPACK_TYPE_RAW_HPP
|
||||||
|
|||||||
@@ -1,50 +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_TYPE_RAW_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_RAW_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
#include <string.h>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
namespace type {
|
|
||||||
|
|
||||||
struct raw_ref;
|
|
||||||
|
|
||||||
} // namespace type
|
|
||||||
|
|
||||||
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, type::raw_ref& v);
|
|
||||||
|
|
||||||
template <typename Stream>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const type::raw_ref& v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object& o, const type::raw_ref& v);
|
|
||||||
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const type::raw_ref& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_RAW_FWD_HPP
|
|
||||||
@@ -19,115 +19,177 @@
|
|||||||
#define MSGPACK_TYPE_SET_HPP
|
#define MSGPACK_TYPE_SET_HPP
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
#include "msgpack/versioning.hpp"
|
||||||
#include "msgpack/object_fwd.hpp"
|
#include "msgpack/adaptor/adaptor_base.hpp"
|
||||||
#include "msgpack/adaptor/check_container_size.hpp"
|
#include "msgpack/adaptor/check_container_size.hpp"
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
/// @cond
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
template <typename T>
|
namespace adaptor {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::set<T>& v)
|
|
||||||
{
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
template <typename T, typename Compare, typename Alloc>
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
struct as<std::set<T, Compare, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
std::set<T> tmp;
|
std::set<T, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
while(p > pbegin) {
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
--p;
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
tmp.insert(p->as<T>());
|
msgpack::object* const pbegin = o.via.array.ptr;
|
||||||
|
std::set<T, Compare, Alloc> v;
|
||||||
|
while (p > pbegin) {
|
||||||
|
--p;
|
||||||
|
v.insert(p->as<T>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::set<T>& v)
|
|
||||||
{
|
template <typename T, typename Compare, typename Alloc>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
struct convert<std::set<T, Compare, Alloc> > {
|
||||||
o.pack_array(size);
|
msgpack::object const& operator()(msgpack::object const& o, std::set<T, Compare, Alloc>& v) const {
|
||||||
for(typename std::set<T>::const_iterator it(v.begin()), it_end(v.end());
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
it != it_end; ++it) {
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
o.pack(*it);
|
msgpack::object* const pbegin = o.via.array.ptr;
|
||||||
|
std::set<T, Compare, Alloc> tmp;
|
||||||
|
while (p > pbegin) {
|
||||||
|
--p;
|
||||||
|
tmp.insert(p->as<T>());
|
||||||
|
}
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
v = std::move(tmp);
|
||||||
|
#else
|
||||||
|
tmp.swap(v);
|
||||||
|
#endif
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T, typename Compare, typename Alloc>
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::set<T>& v)
|
struct pack<std::set<T, Compare, Alloc> > {
|
||||||
{
|
template <typename Stream>
|
||||||
o.type = msgpack::type::ARRAY;
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::set<T, Compare, Alloc>& v) const {
|
||||||
if(v.empty()) {
|
|
||||||
o.via.array.ptr = nullptr;
|
|
||||||
o.via.array.size = 0;
|
|
||||||
} else {
|
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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.pack_array(size);
|
||||||
msgpack::object* const pend = p + size;
|
for (typename std::set<T, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.array.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.array.size = size;
|
o.pack(*it);
|
||||||
typename std::set<T>::const_iterator it(v.begin());
|
}
|
||||||
do {
|
return o;
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Compare, typename Alloc>
|
||||||
template <typename T>
|
struct object_with_zone<std::set<T, Compare, Alloc> > {
|
||||||
inline msgpack::object const& operator>> (msgpack::object const& o, std::multiset<T>& v)
|
void operator()(msgpack::object::with_zone& o, const std::set<T, Compare, Alloc>& v) const {
|
||||||
{
|
o.type = msgpack::type::ARRAY;
|
||||||
if(o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
if (v.empty()) {
|
||||||
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
o.via.array.ptr = nullptr;
|
||||||
msgpack::object* const pbegin = o.via.array.ptr;
|
o.via.array.size = 0;
|
||||||
std::multiset<T> tmp;
|
}
|
||||||
while(p > pbegin) {
|
else {
|
||||||
--p;
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
tmp.insert(p->as<T>());
|
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||||
|
msgpack::object* const pend = p + size;
|
||||||
|
o.via.array.ptr = p;
|
||||||
|
o.via.array.size = size;
|
||||||
|
typename std::set<T, Compare, Alloc>::const_iterator it(v.begin());
|
||||||
|
do {
|
||||||
|
*p = msgpack::object(*it, o.zone);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tmp.swap(v);
|
};
|
||||||
return o;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
#if !defined(MSGPACK_USE_CPP03)
|
||||||
inline msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::multiset<T>& v)
|
|
||||||
{
|
template <typename T, typename Compare, typename Alloc>
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
struct as<std::multiset<T, Compare, Alloc>, typename std::enable_if<msgpack::has_as<T>::value>::type> {
|
||||||
o.pack_array(size);
|
std::multiset<T, Compare, Alloc> operator()(msgpack::object const& o) const {
|
||||||
for(typename std::multiset<T>::const_iterator it(v.begin()), it_end(v.end());
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
it != it_end; ++it) {
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
o.pack(*it);
|
msgpack::object* const pbegin = o.via.array.ptr;
|
||||||
|
std::multiset<T, Compare, Alloc> v;
|
||||||
|
while (p > pbegin) {
|
||||||
|
--p;
|
||||||
|
v.insert(p->as<T>());
|
||||||
|
}
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
return o;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
#endif // !defined(MSGPACK_USE_CPP03)
|
||||||
inline void operator<< (msgpack::object::with_zone& o, const std::multiset<T>& v)
|
|
||||||
{
|
template <typename T, typename Compare, typename Alloc>
|
||||||
o.type = msgpack::type::ARRAY;
|
struct convert<std::multiset<T, Compare, Alloc> > {
|
||||||
if(v.empty()) {
|
msgpack::object const& operator()(msgpack::object const& o, std::multiset<T, Compare, Alloc>& v) const {
|
||||||
o.via.array.ptr = nullptr;
|
if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); }
|
||||||
o.via.array.size = 0;
|
msgpack::object* p = o.via.array.ptr + o.via.array.size;
|
||||||
} else {
|
msgpack::object* const pbegin = o.via.array.ptr;
|
||||||
|
std::multiset<T, Compare, Alloc> tmp;
|
||||||
|
while (p > pbegin) {
|
||||||
|
--p;
|
||||||
|
tmp.insert(p->as<T>());
|
||||||
|
}
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
v = std::move(tmp);
|
||||||
|
#else
|
||||||
|
tmp.swap(v);
|
||||||
|
#endif
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Compare, typename Alloc>
|
||||||
|
struct pack<std::multiset<T, Compare, Alloc> > {
|
||||||
|
template <typename Stream>
|
||||||
|
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::multiset<T, Compare, Alloc>& v) const {
|
||||||
uint32_t size = checked_get_container_size(v.size());
|
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.pack_array(size);
|
||||||
msgpack::object* const pend = p + size;
|
for (typename std::multiset<T, Compare, Alloc>::const_iterator it(v.begin()), it_end(v.end());
|
||||||
o.via.array.ptr = p;
|
it != it_end; ++it) {
|
||||||
o.via.array.size = size;
|
o.pack(*it);
|
||||||
typename std::multiset<T>::const_iterator it(v.begin());
|
}
|
||||||
do {
|
return o;
|
||||||
*p = msgpack::object(*it, o.zone);
|
|
||||||
++p;
|
|
||||||
++it;
|
|
||||||
} while(p < pend);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Compare, typename Alloc>
|
||||||
|
struct object_with_zone<std::multiset<T, Compare, Alloc> > {
|
||||||
|
void operator()(msgpack::object::with_zone& o, const std::multiset<T, Compare, Alloc>& v) const {
|
||||||
|
o.type = msgpack::type::ARRAY;
|
||||||
|
if (v.empty()) {
|
||||||
|
o.via.array.ptr = nullptr;
|
||||||
|
o.via.array.size = 0;
|
||||||
|
} else {
|
||||||
|
uint32_t size = checked_get_container_size(v.size());
|
||||||
|
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
|
||||||
|
msgpack::object* const pend = p + size;
|
||||||
|
o.via.array.ptr = p;
|
||||||
|
o.via.array.size = size;
|
||||||
|
typename std::multiset<T, Compare, Alloc>::const_iterator it(v.begin());
|
||||||
|
do {
|
||||||
|
*p = msgpack::object(*it, o.zone);
|
||||||
|
++p;
|
||||||
|
++it;
|
||||||
|
} while(p < pend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace adaptor
|
||||||
|
|
||||||
|
/// @cond
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
} // namespace msgpack
|
} // namespace msgpack
|
||||||
|
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
//
|
|
||||||
// MessagePack for C++ static resolution routine
|
|
||||||
//
|
|
||||||
// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi
|
|
||||||
//
|
|
||||||
// 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_TYPE_SET_FWD_HPP
|
|
||||||
#define MSGPACK_TYPE_SET_FWD_HPP
|
|
||||||
|
|
||||||
#include "msgpack/versioning.hpp"
|
|
||||||
#include "msgpack/object_fwd.hpp"
|
|
||||||
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
namespace msgpack {
|
|
||||||
|
|
||||||
MSGPACK_API_VERSION_NAMESPACE(v1) {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::set<T>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::set<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::set<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
msgpack::object const& operator>> (msgpack::object const& o, std::multiset<T>& v);
|
|
||||||
|
|
||||||
template <typename Stream, typename T>
|
|
||||||
msgpack::packer<Stream>& operator<< (msgpack::packer<Stream>& o, const std::multiset<T>& v);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void operator<< (msgpack::object::with_zone& o, const std::multiset<T>& v);
|
|
||||||
|
|
||||||
} // MSGPACK_API_VERSION_NAMESPACE(v1)
|
|
||||||
|
|
||||||
} // namespace msgpack
|
|
||||||
|
|
||||||
#endif // MSGPACK_TYPE_SET_FWD_HPP
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user