forked from boostorg/fusion
Compare commits
412 Commits
boost-1.58
...
boost-1.79
Author | SHA1 | Date | |
---|---|---|---|
500e4c120f | |||
38060fab3a | |||
198458a9f2 | |||
4a699a39f5 | |||
b93b4c9a86 | |||
5a9bfa3d7d | |||
c46e492d45 | |||
4979945690 | |||
9dca58bd33 | |||
c3af48d345 | |||
70c38c7bf7 | |||
edddad2b4e | |||
b3c212c47f | |||
4778c4c180 | |||
5f30a8da60 | |||
fc32335387 | |||
b5751ae85d | |||
e5a007579f | |||
3e07b3f66b | |||
08076be2ac | |||
4c51811315 | |||
19d6c7ad3b | |||
1c693f05bf | |||
b180146e3d | |||
68affa1706 | |||
f0089a640e | |||
81a1c2c99a | |||
7b55860d78 | |||
70837a30c5 | |||
2e91d0b78e | |||
e375a4541b | |||
908a34a4ed | |||
62137c0ab7 | |||
753db26073 | |||
309a2d623f | |||
b5ba6cbd2b | |||
2160949150 | |||
6208b083fb | |||
95beeba19c | |||
efe9065b8c | |||
d1da8ee746 | |||
a26dcf59ce | |||
6b5c5be9be | |||
8c36079edb | |||
9db262acf5 | |||
a3abadb884 | |||
3cfbd9826d | |||
c1fea895c2 | |||
6a3ddd1458 | |||
b1f20628bb | |||
b0f0882229 | |||
b8fafe04d9 | |||
95b4500898 | |||
b02cb70760 | |||
77ebd568e1 | |||
e29b1a07f3 | |||
f03bb5ec2e | |||
cc0c684a92 | |||
c740a4dbad | |||
48f8af3e73 | |||
cc3fbc4f5d | |||
bd96a6bcfb | |||
2a95fcc3e9 | |||
47ff2e6cb5 | |||
9036c72a61 | |||
06a2f0560f | |||
c76cd3d6b2 | |||
77959b1d33 | |||
c6448b9e45 | |||
561890429b | |||
23c54602c2 | |||
30c044b03a | |||
a71b9607e1 | |||
102588ae46 | |||
0e4c5127f5 | |||
afb8b150a9 | |||
d832387fdb | |||
0c138de7cb | |||
98b96c3b97 | |||
68be23a0b9 | |||
6f8de8d774 | |||
5221bbbc76 | |||
0e900bba3f | |||
38aa3705d0 | |||
1854626651 | |||
e8da43a539 | |||
3b8fb67b52 | |||
c4881f1862 | |||
e818089a91 | |||
a95a838779 | |||
7443cb1101 | |||
84b1847442 | |||
a273cd8131 | |||
757541f9d2 | |||
dd695c1dbd | |||
96b2e51828 | |||
e962c1abb5 | |||
7899658d8e | |||
e3b053f969 | |||
11a3f250b8 | |||
79262831ef | |||
d8f608c8f1 | |||
2aea153be0 | |||
4734cf4a13 | |||
d5bd71c886 | |||
c3dec40e72 | |||
03ac9086bc | |||
9de3272174 | |||
25c6334c58 | |||
101a056a92 | |||
82f677c169 | |||
479bc3133b | |||
f61bffb21f | |||
4c67886cc2 | |||
38818fbe3d | |||
eeeee9bfbb | |||
eb0cbbc347 | |||
d0c17119e7 | |||
28ea5dacce | |||
6c96720080 | |||
0a8f0f49b2 | |||
cdd1408d2b | |||
540ea0ef0c | |||
671f22b013 | |||
dfceaffc58 | |||
2c86e9d18c | |||
d8e6f406ab | |||
b42314fb02 | |||
806b621931 | |||
39fb05e40f | |||
dc47261890 | |||
099333b61d | |||
71ad390cf0 | |||
821aaee960 | |||
b12c6b6af6 | |||
4eda545405 | |||
5fd8c36079 | |||
e6b5879511 | |||
33ce5701ae | |||
3cd289836d | |||
ffff00b1a2 | |||
c19cd1b0b7 | |||
3452deb057 | |||
0876b9558d | |||
580364a19e | |||
d6921c112a | |||
254d570b3d | |||
5c78fea465 | |||
da4abd0dce | |||
1faac814e3 | |||
3085f76d31 | |||
e18aa85602 | |||
320386dcf1 | |||
cbda55b962 | |||
e992658ce3 | |||
99699ede5d | |||
8243b3088b | |||
3e7d928ddd | |||
26f69719d0 | |||
0e0de6c4f1 | |||
984fcfd276 | |||
62f5ccac53 | |||
cf33f3db4e | |||
dfe08dec2c | |||
7ec3f1a68f | |||
42a01fc3f4 | |||
0d37235d1c | |||
e97f58749f | |||
80a86fbcd4 | |||
6bef7c98b2 | |||
e4b1233262 | |||
38535926bd | |||
1bce525b30 | |||
e606ceeff0 | |||
24d1c7fd1a | |||
e5d073d786 | |||
6a9b7f314d | |||
0471a65ca2 | |||
b6e5285430 | |||
9cb23af898 | |||
437cea006a | |||
7c15df79f2 | |||
503a89dc89 | |||
b24dfd635b | |||
84d8afbb31 | |||
36eac2e77c | |||
bb782de1ff | |||
451e21adb3 | |||
e0ceefafb6 | |||
2952fd254f | |||
1ec001888d | |||
98b81ee102 | |||
f1a619428a | |||
715a7fb729 | |||
fcdcfcd2c5 | |||
6f43cd7f66 | |||
c630611626 | |||
0d8243b36d | |||
ea9a176312 | |||
1747703b1a | |||
c158886591 | |||
5135b5109b | |||
490baac6e2 | |||
6bd644d43d | |||
64af83d999 | |||
e74ccb1cf5 | |||
7b13053c7e | |||
ef2dc2aaae | |||
ef1ca12e81 | |||
a2b8a8f254 | |||
16a069be14 | |||
3b96c3b70b | |||
61fab16418 | |||
928ced256a | |||
599b8d4aef | |||
1a2a8d67aa | |||
d5740f8310 | |||
5906d9c316 | |||
45d9b49ee5 | |||
55150a7fa6 | |||
27321dd18e | |||
79d8e9d11c | |||
904d3c2c01 | |||
7e4ab4f804 | |||
3189580857 | |||
71dcb3e02c | |||
82f24e0f73 | |||
f29e1e8209 | |||
12b25c2c99 | |||
bc6eaf7ab0 | |||
275236f86e | |||
a8b70d6679 | |||
7472e70951 | |||
104f508cef | |||
0263c75cd8 | |||
f7b90f2981 | |||
d314798241 | |||
5ed26ec932 | |||
4ebc028769 | |||
99ad77b92f | |||
e3d16edfb3 | |||
4173b4b97b | |||
9b43ac8ee0 | |||
c9c2c3bad6 | |||
d7d47619b4 | |||
100d223be4 | |||
44c21e0f10 | |||
3125c15ff4 | |||
11cc331f82 | |||
d1cd721969 | |||
2e466ac054 | |||
b88daeb697 | |||
1774972237 | |||
b46aad996a | |||
0526f7c04f | |||
53ba3de15a | |||
64b8406c16 | |||
2492ff9b25 | |||
3919f3ed73 | |||
12792a6c11 | |||
e9d489c07c | |||
8767d374ea | |||
ee718b363f | |||
87fffbead3 | |||
1c05cfc795 | |||
7cf404d096 | |||
0c18e85ecd | |||
bb8b5afc7f | |||
3298875ecc | |||
74c0d5d0ec | |||
e7ec658b62 | |||
4d3891ed31 | |||
1bc343660b | |||
981f71d04f | |||
d6c853f7ad | |||
f88dbb6876 | |||
4d5da0371b | |||
76f49608c7 | |||
73045b4d49 | |||
18742c6922 | |||
277e5ca034 | |||
1ad2e59e07 | |||
2c5c74069f | |||
a81024f617 | |||
c537da605b | |||
1d45a87201 | |||
ce4ccb929c | |||
5114d9419e | |||
ca0d92e68d | |||
c750552a02 | |||
a61285a0a1 | |||
999dad386e | |||
d512378f4e | |||
ef39bc8651 | |||
d2f8ee9f32 | |||
cbd2e1dc1d | |||
a6d1b303b3 | |||
76b7697ba5 | |||
1df7fc1dca | |||
9b77c26a24 | |||
59dfeec815 | |||
4855d1fac1 | |||
d3449ab5e5 | |||
c30fabf98f | |||
de3730c325 | |||
efd595fd10 | |||
e61d08d953 | |||
10d9f0ffba | |||
d9e5a620be | |||
c5ba3af4c0 | |||
22994d7e96 | |||
dc55e5e103 | |||
1bde5c6fa3 | |||
8242c688e7 | |||
24f527d401 | |||
6689de502b | |||
1646a7252b | |||
8761ed1b8d | |||
e37fd170ce | |||
74f0758bca | |||
dae9964b15 | |||
b1bb9921e2 | |||
4fa0a5f550 | |||
ed30a7ca6a | |||
e0debe282c | |||
7fdb3201fa | |||
8eee897e3f | |||
daea1c3142 | |||
2f6e162a7e | |||
bc01b7fa24 | |||
00823cc315 | |||
fc92ba530d | |||
c0fcaae951 | |||
298eeef9c9 | |||
62d9833bbf | |||
b4133761e8 | |||
7739e4026d | |||
f9fda7ce06 | |||
1f8ccd7bc3 | |||
969b475462 | |||
c77f84749f | |||
d937003962 | |||
6fe816fe89 | |||
d29dc277e6 | |||
d5ce74dffd | |||
a31009e73c | |||
8aa35da4c4 | |||
1e21a4eb7a | |||
5cceded23b | |||
78c5228d93 | |||
0e8e857c2f | |||
d197380540 | |||
3d0412bfd1 | |||
275f65f9ad | |||
9c7b7754fb | |||
2b14951660 | |||
973f2d3940 | |||
60cf66ad89 | |||
fb2e4c502f | |||
fffbbdebdf | |||
ddcd3cdf93 | |||
6df8d5a599 | |||
78afb4d3fc | |||
94f3b2a08b | |||
3521ea3417 | |||
ff25066be2 | |||
e0f10734b1 | |||
22268eb083 | |||
869513768d | |||
65fae37660 | |||
cac994a7c6 | |||
14228e9250 | |||
9911e05838 | |||
f22f1624b5 | |||
8b1da45bfe | |||
3b86f61f15 | |||
2445f60981 | |||
6f8c02eb6f | |||
3c34d639df | |||
b10d91ac82 | |||
b902afa5a0 | |||
528e6d16f0 | |||
2153df596b | |||
ce62bb49f3 | |||
265de03026 | |||
83fb0ef7a2 | |||
294a5ce644 | |||
bbdfc9972e | |||
91966ae524 | |||
94f53a8d4c | |||
0fcd2aa328 | |||
83a08934c8 | |||
ccb1aa20d9 | |||
6e569bcdc3 | |||
de50f65380 | |||
72912925cb | |||
da294ebc6d | |||
beba23f36c | |||
a2874ea5fe | |||
e12f59ebf2 | |||
0e24ec0a85 | |||
31b1ee7f73 | |||
53a1a74a10 | |||
1e2841c683 | |||
17928ac385 | |||
789b86fd6c | |||
abb15d1158 | |||
cccbc785d6 | |||
6849e31db0 | |||
6c130b9e44 | |||
a49eb03483 | |||
93a1fc3b87 |
251
.travis.yml
Normal file
251
.travis.yml
Normal file
@ -0,0 +1,251 @@
|
||||
# Copyright 2016, 2017 Peter Dimov
|
||||
# Copyright 2017-2018 Kohei Takahashi
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
language: cpp
|
||||
|
||||
sudo: false
|
||||
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
env:
|
||||
matrix:
|
||||
- BOGUS_JOB=true
|
||||
|
||||
matrix:
|
||||
|
||||
exclude:
|
||||
- env: BOGUS_JOB=true
|
||||
|
||||
include:
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-4.4 CXXSTD=98,0x
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.4
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
#- os: linux
|
||||
# dist: xenial
|
||||
# env: TOOLSET=gcc-4.5 CXXSTD=03,0x
|
||||
# addons:
|
||||
# apt:
|
||||
# packages:
|
||||
# - g++-4.5
|
||||
# sources:
|
||||
# - ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-4.6 CXXSTD=03,0x
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.6
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-4.7 CXXSTD=03,11
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.7
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-4.8 CXXSTD=03,11,1y
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.8
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-4.9 CXXSTD=03,11,14
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-4.9
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-5 CXXSTD=03,11,14,17
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-5
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-6 CXXSTD=03,11,14,17
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-6
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-7 CXXSTD=03,11,14,17
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-7
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=gcc-8 CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-8
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-3.5 CXXSTD=03,11,14,1z
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-3.5
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-3.6 CXXSTD=03,11,14,1z
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-3.6
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-3.7 CXXSTD=03,11,14,1z
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-3.7
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-3.8 CXXSTD=03,11,14,1z
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-3.8
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-3.9 CXXSTD=03,11,14,1z
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-3.9
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-4.0 CXXSTD=03,11,14,1z
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-4.0
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-5.0 CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-5.0
|
||||
sources:
|
||||
- llvm-toolchain-xenial-5.0
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-6.0 CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-6.0
|
||||
sources:
|
||||
- llvm-toolchain-xenial-6.0
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
env: TOOLSET=clang-7.0 CXXSTD=03,11,14,17,2a
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- clang-7
|
||||
sources:
|
||||
- llvm-toolchain-xenial-7
|
||||
|
||||
- os: osx
|
||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
|
||||
|
||||
install:
|
||||
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
|
||||
- cd ..
|
||||
- git clone --depth 1 -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
|
||||
- cd boost-root
|
||||
|
||||
- git submodule init libs/array
|
||||
- git submodule init libs/assert
|
||||
- git submodule init libs/bind
|
||||
- git submodule init libs/concept_check
|
||||
- git submodule init libs/config
|
||||
- git submodule init libs/container_hash
|
||||
- git submodule init libs/conversion
|
||||
- git submodule init libs/core
|
||||
- git submodule init libs/detail
|
||||
- git submodule init libs/function
|
||||
- git submodule init libs/function_types
|
||||
- git submodule init libs/functional
|
||||
- git submodule init libs/integer
|
||||
- git submodule init libs/iterator
|
||||
- git submodule init libs/lambda
|
||||
- git submodule init libs/move
|
||||
- git submodule init libs/mpl
|
||||
- git submodule init libs/optional
|
||||
- git submodule init libs/predef
|
||||
- git submodule init libs/preprocessor
|
||||
- git submodule init libs/smart_ptr
|
||||
- git submodule init libs/static_assert
|
||||
- git submodule init libs/throw_exception
|
||||
- git submodule init libs/tuple
|
||||
- git submodule init libs/type_index
|
||||
- git submodule init libs/type_traits
|
||||
- git submodule init libs/typeof
|
||||
- git submodule init libs/utility
|
||||
|
||||
- git submodule init libs/headers tools/boost_install tools/build
|
||||
- git submodule update
|
||||
|
||||
- rm -rf libs/fusion
|
||||
- mv $TRAVIS_BUILD_DIR libs/fusion
|
||||
- ln -s $(pwd)/libs/fusion $TRAVIS_BUILD_DIR
|
||||
|
||||
- ./bootstrap.sh
|
||||
- ./b2 headers
|
||||
|
||||
script:
|
||||
- ./b2 -j`(nproc || sysctl -n hw.ncpu) 2> /dev/null` libs/fusion/test toolset=$TOOLSET cxxstd=$CXXSTD
|
26
CMakeLists.txt
Normal file
26
CMakeLists.txt
Normal file
@ -0,0 +1,26 @@
|
||||
# Copyright 2018 Mike Dev
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
cmake_minimum_required(VERSION 3.5...3.20)
|
||||
project(boost_fusion VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
|
||||
|
||||
add_library(boost_fusion INTERFACE)
|
||||
add_library(Boost::fusion ALIAS boost_fusion)
|
||||
|
||||
target_include_directories(boost_fusion INTERFACE include)
|
||||
|
||||
target_link_libraries(boost_fusion
|
||||
INTERFACE
|
||||
Boost::config
|
||||
Boost::container_hash
|
||||
Boost::core
|
||||
Boost::function_types
|
||||
Boost::mpl
|
||||
Boost::preprocessor
|
||||
Boost::static_assert
|
||||
Boost::tuple
|
||||
Boost::type_traits
|
||||
Boost::typeof
|
||||
Boost::utility
|
||||
)
|
91
appveyor.yml
Normal file
91
appveyor.yml
Normal file
@ -0,0 +1,91 @@
|
||||
# Copyright 2016, 2017 Peter Dimov
|
||||
# Copyright 2017-2018 Kohei Takahashi
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
version: 1.0.{build}-{branch}
|
||||
|
||||
shallow_clone: true
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-9.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-10.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-11.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-12.0
|
||||
CXXSTD: latest # fake
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-14.0
|
||||
CXXSTD: 14
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||
TOOLSET: msvc-14.0
|
||||
CXXSTD: latest
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: msvc-14.1
|
||||
CXXSTD: 14
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: msvc-14.1
|
||||
CXXSTD: 17
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: msvc-14.1
|
||||
CXXSTD: latest
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: clang-win
|
||||
CXXSTD: 14
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
TOOLSET: clang-win
|
||||
CXXSTD: 17
|
||||
|
||||
install:
|
||||
- set BOOST_BRANCH=develop
|
||||
- if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master
|
||||
- cd ..
|
||||
- git clone --depth 1 -b %BOOST_BRANCH% https://github.com/boostorg/boost.git boost-root
|
||||
- cd boost-root
|
||||
|
||||
- git submodule init libs/array
|
||||
- git submodule init libs/assert
|
||||
- git submodule init libs/bind
|
||||
- git submodule init libs/concept_check
|
||||
- git submodule init libs/config
|
||||
- git submodule init libs/container_hash
|
||||
- git submodule init libs/conversion
|
||||
- git submodule init libs/core
|
||||
- git submodule init libs/detail
|
||||
- git submodule init libs/function
|
||||
- git submodule init libs/function_types
|
||||
- git submodule init libs/functional
|
||||
- git submodule init libs/integer
|
||||
- git submodule init libs/iterator
|
||||
- git submodule init libs/lambda
|
||||
- git submodule init libs/move
|
||||
- git submodule init libs/mpl
|
||||
- git submodule init libs/optional
|
||||
- git submodule init libs/predef
|
||||
- git submodule init libs/preprocessor
|
||||
- git submodule init libs/smart_ptr
|
||||
- git submodule init libs/static_assert
|
||||
- git submodule init libs/throw_exception
|
||||
- git submodule init libs/tuple
|
||||
- git submodule init libs/type_index
|
||||
- git submodule init libs/type_traits
|
||||
- git submodule init libs/typeof
|
||||
- git submodule init libs/utility
|
||||
|
||||
- git submodule init libs/headers tools/boost_install tools/build
|
||||
- git submodule update
|
||||
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\fusion
|
||||
- cmd /c bootstrap
|
||||
- b2 headers
|
||||
|
||||
build: off
|
||||
|
||||
test_script:
|
||||
- b2 -j%NUMBER_OF_PROCESSORS% --hash libs/fusion/test toolset=%TOOLSET% cxxstd=%CXXSTD%
|
@ -25,4 +25,8 @@ boostbook quickbook
|
||||
<format>pdf:<xsl:param>img.src.path=$(images_location)/
|
||||
;
|
||||
|
||||
|
||||
###############################################################################
|
||||
alias boostdoc ;
|
||||
explicit boostdoc ;
|
||||
alias boostrelease : quickbook ;
|
||||
explicit boostrelease ;
|
||||
|
@ -23,19 +23,6 @@ various data structures, non-intrusively, as full fledged Fusion sequences.
|
||||
#include <boost/fusion/adapted.hpp>
|
||||
#include <boost/fusion/include/adapted.hpp>
|
||||
|
||||
Fusion sequences may also be adapted as fully conforming __mpl__ sequences (see
|
||||
__intrinsics__). That way, we can have 2-way adaptation to and from __mpl__ and
|
||||
Fusion. To make Fusion sequences fully conforming __mpl__ sequences, include:
|
||||
|
||||
#include <boost/fusion/mpl.hpp>
|
||||
|
||||
If you want bi-directional adaptation to and from __mpl__ and Fusion, simply
|
||||
include:
|
||||
|
||||
#include <boost/fusion/include/mpl.hpp>
|
||||
|
||||
The header includes all the necessary headers.
|
||||
|
||||
[section:array Array]
|
||||
|
||||
This module provides adapters for arrays. Including the module
|
||||
@ -145,6 +132,21 @@ header makes all __mpl__ sequences fully conforming fusion sequences.
|
||||
std::cout << __at_c__<0>(v) << std::endl;
|
||||
std::cout << __at_c__<1>(v) << std::endl;
|
||||
|
||||
[heading Bi-directional adaptation]
|
||||
|
||||
Fusion sequences may also be adapted as fully conforming __mpl__ sequences (see
|
||||
__intrinsics__). That way, we can have 2-way adaptation to and from __mpl__ and
|
||||
Fusion. To make Fusion sequences fully conforming __mpl__ sequences, include:
|
||||
|
||||
#include <boost/fusion/mpl.hpp>
|
||||
|
||||
If you want bi-directional adaptation to and from __mpl__ and Fusion, simply
|
||||
include:
|
||||
|
||||
#include <boost/fusion/include/mpl.hpp>
|
||||
|
||||
The header includes all the necessary headers.
|
||||
|
||||
[heading See also]
|
||||
|
||||
__mpl__
|
||||
@ -227,7 +229,7 @@ __random_access_sequence__.
|
||||
struct_name,
|
||||
(member_type0, member_name0)
|
||||
(member_type1, member_name1)
|
||||
(BOOST_FUSION_ADAPT_AUTO, member_name2)
|
||||
(auto, member_name2)
|
||||
...
|
||||
)
|
||||
|
||||
@ -240,7 +242,7 @@ The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
|
||||
pairs declares the type and names of each of the struct members that are part of
|
||||
the sequence.
|
||||
|
||||
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
|
||||
When member_typeN is omitted or set to auto, the type is
|
||||
infered with Boost.TypeOf.
|
||||
|
||||
The macro should be used at global scope, and `struct_name` should be the fully
|
||||
@ -270,8 +272,8 @@ namespace qualified name of the struct to be adapted.
|
||||
// Without BOOST_PP_VARIADICS support :
|
||||
BOOST_FUSION_ADAPT_STRUCT(
|
||||
demo::employee,
|
||||
(BOOST_FUSION_ADAPT_AUTO, name)
|
||||
(BOOST_FUSION_ADAPT_AUTO, age)
|
||||
(auto, name)
|
||||
(auto, age)
|
||||
)
|
||||
|
||||
[endsect]
|
||||
@ -298,7 +300,7 @@ __random_access_sequence__.
|
||||
(struct_name) (specialization_param0)(specialization_param1)...,
|
||||
(member_type0, member_name0)
|
||||
(member_type1, member_name1)
|
||||
(BOOST_FUSION_ADAPT_AUTO, member_name2),
|
||||
(auto, member_name2),
|
||||
...
|
||||
)
|
||||
|
||||
@ -316,7 +318,7 @@ The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
|
||||
pairs declares the type and names of each of the struct members that are part of
|
||||
the sequence.
|
||||
|
||||
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
|
||||
When member_typeN is omitted or set to auto, the type is
|
||||
infered with Boost.TypeOf.
|
||||
|
||||
The macro should be used at global scope, and `struct_name` should be the fully
|
||||
@ -345,7 +347,7 @@ namespace qualified name of the struct to be adapted.
|
||||
(demo::employee) (Name)(Age),
|
||||
(Name, name)
|
||||
(Age, age)
|
||||
(BOOST_FUSION_ADAPT_AUTO, employment_timestamp))
|
||||
(auto, employment_timestamp))
|
||||
|
||||
// Or by infering type completely
|
||||
BOOST_FUSION_ADAPT_TPL_STRUCT(
|
||||
@ -390,7 +392,7 @@ adapted using the given name.
|
||||
struct_name, adapted_name,
|
||||
(member_type0, member_name0)
|
||||
(member_type1, member_name1)
|
||||
(BOOST_FUSION_ADAPT_AUTO, member_name2),
|
||||
(auto, member_name2),
|
||||
...
|
||||
)
|
||||
|
||||
@ -400,7 +402,7 @@ adapted using the given name.
|
||||
adapted_name,
|
||||
(member_type0, member_name0)
|
||||
(member_type1, member_name1)
|
||||
(BOOST_FUSION_ADAPT_AUTO, member_name2),
|
||||
(auto, member_name2),
|
||||
...
|
||||
)
|
||||
|
||||
@ -422,7 +424,7 @@ The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
|
||||
pairs declares the type and names of each of the struct members that are part of
|
||||
the sequence.
|
||||
|
||||
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
|
||||
When member_typeN is omitted or set to auto, the type is
|
||||
infered with Boost.TypeOf.
|
||||
|
||||
The macros should be used at global scope, and `struct_name` should be the fully
|
||||
@ -453,8 +455,8 @@ namespace qualified name of the struct to be converted.
|
||||
// Without BOOST_PP_VARIADICS support :
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMED(
|
||||
demo::employee, adapted_employee,
|
||||
(BOOST_FUSION_ADAPT_AUTO, name),
|
||||
(BOOST_FUSION_ADAPT_AUTO, age))
|
||||
(auto, name),
|
||||
(auto, age))
|
||||
|
||||
[endsect]
|
||||
|
||||
@ -481,7 +483,7 @@ The sequence of `([member_typeN,] member_nameN, key_typeN)` tuples
|
||||
declares the type, name and key type of each of the struct members
|
||||
that are part of the sequence.
|
||||
|
||||
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
|
||||
When member_typeN is omitted or set to auto, the type is
|
||||
infered with Boost.TypeOf.
|
||||
|
||||
The macro should be used at global scope, and `struct_name` should be the fully
|
||||
@ -519,8 +521,8 @@ namespace qualified name of the struct to be adapted.
|
||||
// Without BOOST_PP_VARIADICS support :
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
|
||||
demo::employee,
|
||||
(BOOST_FUSION_ADAPT_AUTO, name, keys::name),
|
||||
(BOOST_FUSION_ADAPT_AUTO, age, keys::name))
|
||||
(auto, name, keys::name),
|
||||
(auto, age, keys::name))
|
||||
|
||||
[endsect]
|
||||
|
||||
@ -554,7 +556,7 @@ The sequence of `([member_typeN,] member_nameN, key_typeN)`
|
||||
tuples declares the type, name and key type of each of the struct members
|
||||
that are part of the sequence.
|
||||
|
||||
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
|
||||
When member_typeN is omitted or set to auto, the type is
|
||||
infered with Boost.TypeOf.
|
||||
|
||||
The macro should be used at global scope, and `struct_name` should be the fully
|
||||
@ -641,7 +643,7 @@ The sequence of `(member_typeN, member_nameN, key_typeN)`
|
||||
triples declares the type, name and key type of each of the struct members
|
||||
that are part of the sequence.
|
||||
|
||||
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
|
||||
When member_typeN is omitted or set to auto, the type is
|
||||
infered with Boost.TypeOf.
|
||||
|
||||
The macros should be used at global scope, and `struct_name` should be the fully
|
||||
@ -678,8 +680,8 @@ namespace qualified name of the struct to be converted.
|
||||
// Without BOOST_PP_VARIADICS support :
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
|
||||
demo::employee, adapted_employee,
|
||||
(BOOST_FUSION_ADAPT_AUTO, name, keys::name)
|
||||
(BOOST_FUSION_ADAPT_AUTO, age, keys::age))
|
||||
(auto, name, keys::name)
|
||||
(auto, age, keys::age))
|
||||
|
||||
[endsect]
|
||||
|
||||
@ -713,7 +715,7 @@ instance of `type_name`.
|
||||
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
|
||||
that [^get_expr['N]] denotes to, when omitted the type is deduced from
|
||||
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
|
||||
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
|
||||
variadic macros auto can be used to avoid repeating the type.
|
||||
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
|
||||
of an instance of `type_name`. This expression may access variables named
|
||||
`obj` of type `type_name&`, which represent the corresponding instance of
|
||||
@ -823,7 +825,7 @@ instance of `type_name`.
|
||||
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
|
||||
that [^get_expr['N]] denotes to, when omitted the type is deduced from
|
||||
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
|
||||
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
|
||||
variadic macros auto can be used to avoid repeating the type.
|
||||
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
|
||||
of an instance of `type_name`. This expression may access variables named
|
||||
`obj` of type `type_name&`, which represent the corresponding instance of
|
||||
@ -928,7 +930,7 @@ instance of `type_name`.
|
||||
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
|
||||
that [^get_expr['N]] denotes to, when omitted the type is deduced from
|
||||
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
|
||||
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
|
||||
variadic macros auto can be used to avoid repeating the type.
|
||||
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
|
||||
of an instance of `type_name`. This expression may access variables named
|
||||
`obj` of type `type_name&`, which represent the corresponding instance of
|
||||
@ -1044,7 +1046,7 @@ instance of `type_name`.
|
||||
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
|
||||
that [^get_expr['N]] denotes to, when omitted the type is deduced from
|
||||
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
|
||||
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
|
||||
variadic macros auto can be used to avoid repeating the type.
|
||||
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
|
||||
of an instance of `type_name`. This expression may access variables named
|
||||
`obj` of type `type_name&`, which represent the corresponding instance of
|
||||
|
@ -258,6 +258,22 @@ the first call) and [arg_desc] of `seq`.
|
||||
typename result_of_name_macro<Sequence const, State const, F>::type name_macro(
|
||||
Sequence const& seq, State const& initial_state, F f);
|
||||
|
||||
template<
|
||||
typename Sequence,
|
||||
typename State,
|
||||
typename F
|
||||
>
|
||||
typename result_of_name_macro<Sequence, State, F>::type name_macro(
|
||||
Sequence& seq, State& initial_state, F f);
|
||||
|
||||
template<
|
||||
typename Sequence,
|
||||
typename State,
|
||||
typename F
|
||||
>
|
||||
typename result_of_name_macro<Sequence const, State, F>::type name_macro(
|
||||
Sequence const& seq, State& initial_state, F f);
|
||||
|
||||
[def seq_concept_macro [seq_concept]]
|
||||
[def arg_type_id_macro [arg_type_id]]
|
||||
[def arg_id_macro [arg_id]]
|
||||
@ -1722,7 +1738,7 @@ Takes 2 sequences and returns a sequence containing the elements of the first fo
|
||||
template<
|
||||
typename LhSequence,
|
||||
typename RhSequence>
|
||||
typename __result_of_join__<LhSequence, RhSequence>::type join(LhSequence const& lhs, RhSequence const& rhs);
|
||||
typename __result_of_join__<LhSequence const, RhSequence const>::type join(LhSequence const& lhs, RhSequence const& rhs);
|
||||
|
||||
[table Parameters
|
||||
[[Parameter][Requirement][Description]]
|
||||
@ -1767,7 +1783,7 @@ Zips sequences together to form a single sequence, whose members are tuples of t
|
||||
...
|
||||
typename SequenceN
|
||||
>
|
||||
typename __result_of_zip__<Sequence1, Sequence2, ... SequenceN>::type
|
||||
typename __result_of_zip__<Sequence1 const, Sequence2 const, ... SequenceN const>::type
|
||||
zip(Sequence1 const& seq1, Sequence2 const& seq2, ... SequenceN const& seqN);
|
||||
|
||||
[table Parameters
|
||||
@ -1886,7 +1902,7 @@ Returns a new sequence with an element added at the end.
|
||||
typename Sequence,
|
||||
typename T
|
||||
>
|
||||
typename __result_of_push_back__<Sequence, T>::type push_back(
|
||||
typename __result_of_push_back__<Sequence const, T>::type push_back(
|
||||
Sequence const& seq, T const& t);
|
||||
|
||||
[table Parameters
|
||||
@ -1927,7 +1943,7 @@ Returns a new sequence with an element added at the beginning.
|
||||
typename Sequence,
|
||||
typename T
|
||||
>
|
||||
typename __result_of_push_front__<Sequence, T>::type push_front(
|
||||
typename __result_of_push_front__<Sequence const, T>::type push_front(
|
||||
Sequence const& seq, T const& t);
|
||||
|
||||
[table Parameters
|
||||
|
@ -66,6 +66,11 @@ cases the most efficient.
|
||||
template <typename T0, typename T1, typename T2..., typename TN>
|
||||
struct vectorN;
|
||||
|
||||
[important Numbered forms will be deprecated in C++11 and it will be provided
|
||||
via aliasing templates. It means that your partial specialization
|
||||
might be compile error. You can detect whether it is aliasing
|
||||
templates or not, using `BOOST_FUSION_HAS_VARIADIC_VECTOR`.]
|
||||
|
||||
[*Variadic form]
|
||||
|
||||
template <
|
||||
@ -81,9 +86,11 @@ The numbered form accepts the exact number of elements. Example:
|
||||
|
||||
vector3<int, char, double>
|
||||
|
||||
The variadic form accepts `0` to `FUSION_MAX_VECTOR_SIZE` elements, where
|
||||
`FUSION_MAX_VECTOR_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the The variadic form accepts `0` to
|
||||
`FUSION_MAX_VECTOR_SIZE` elements, where `FUSION_MAX_VECTOR_SIZE` is a
|
||||
user definable predefined maximum that defaults to `10`. Example:
|
||||
|
||||
vector<int, char, double>
|
||||
|
||||
@ -232,9 +239,11 @@ each element is peculiarly constant (see __recursive_inline__).
|
||||
>
|
||||
struct list;
|
||||
|
||||
The variadic class interface accepts `0` to `FUSION_MAX_LIST_SIZE`
|
||||
elements, where `FUSION_MAX_LIST_SIZE` is a user definable predefined
|
||||
maximum that defaults to `10`. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic class interface accepts `0` to
|
||||
`FUSION_MAX_LIST_SIZE` elements, where `FUSION_MAX_LIST_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. Example:
|
||||
|
||||
list<int, char, double>
|
||||
|
||||
@ -532,9 +541,11 @@ complexity (see __overloaded_functions__).
|
||||
>
|
||||
struct set;
|
||||
|
||||
The variadic class interface accepts `0` to `FUSION_MAX_SET_SIZE` elements,
|
||||
where `FUSION_MAX_SET_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic class interface accepts `0` to
|
||||
`FUSION_MAX_SET_SIZE` elements, where `FUSION_MAX_SET_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. Example:
|
||||
|
||||
set<int, char, double>
|
||||
|
||||
@ -614,9 +625,11 @@ __overloaded_functions__).
|
||||
>
|
||||
struct map;
|
||||
|
||||
The variadic class interface accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
|
||||
where `FUSION_MAX_MAP_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic class interface accepts `0` to
|
||||
`FUSION_MAX_MAP_SIZE` elements, where `FUSION_MAX_MAP_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. Example:
|
||||
|
||||
map<__pair__<int, char>, __pair__<char, char>, __pair__<double, char> >
|
||||
|
||||
@ -697,10 +710,13 @@ Create a __list__ from one or more values.
|
||||
typename __result_of_make_list__<T0, T1,... TN>::type
|
||||
make_list(T0 const& x0, T1 const& x1... TN const& xN);
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_LIST_SIZE` elements, where
|
||||
`FUSION_MAX_LIST_SIZE` is a user definable predefined maximum that defaults
|
||||
to `10`. You may define the preprocessor constant `FUSION_MAX_LIST_SIZE`
|
||||
before including any Fusion header to change the default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_LIST_SIZE` elements, where `FUSION_MAX_LIST_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_LIST_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_LIST_SIZE 20
|
||||
|
||||
@ -794,11 +810,13 @@ Create a __vector__ from one or more values.
|
||||
typename __result_of_make_vector__<T0, T1,... TN>::type
|
||||
make_vector(T0 const& x0, T1 const& x1... TN const& xN);
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_VECTOR_SIZE` elements,
|
||||
where `FUSION_MAX_VECTOR_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_VECTOR_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_VECTOR_SIZE` elements, where `FUSION_MAX_VECTOR_SIZE` is a
|
||||
user definable predefined maximum that defaults to `10`. You may define
|
||||
the preprocessor constant `FUSION_MAX_VECTOR_SIZE` before including any
|
||||
Fusion header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_VECTOR_SIZE 20
|
||||
|
||||
@ -896,11 +914,13 @@ Create a __set__ from one or more values.
|
||||
typename __result_of_make_set__<T0, T1,... TN>::type
|
||||
make_set(T0 const& x0, T1 const& x1... TN const& xN);
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_SET_SIZE` elements,
|
||||
where `FUSION_MAX_SET_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_SET_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_SET_SIZE` elements, where `FUSION_MAX_SET_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_SET_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_SET_SIZE 20
|
||||
|
||||
@ -1049,10 +1069,13 @@ Constructs a tie using a __list__ sequence.
|
||||
__list__<T0&, T1&,... TN&>
|
||||
list_tie(T0& x0, T1& x1... TN& xN);
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_LIST_SIZE` elements, where
|
||||
`FUSION_MAX_LIST_SIZE` is a user definable predefined maximum that defaults
|
||||
to `10`. You may define the preprocessor constant `FUSION_MAX_LIST_SIZE`
|
||||
before including any Fusion header to change the default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_LIST_SIZE` elements, where `FUSION_MAX_LIST_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_LIST_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_LIST_SIZE 20
|
||||
|
||||
@ -1096,11 +1119,13 @@ Constructs a tie using a __vector__ sequence.
|
||||
__vector__<T0&, T1&,... TN&>
|
||||
vector_tie(T0& x0, T1& x1... TN& xN);
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_VECTOR_SIZE` elements,
|
||||
where `FUSION_MAX_VECTOR_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_VECTOR_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_VECTOR_SIZE` elements, where `FUSION_MAX_VECTOR_SIZE` is a
|
||||
user definable predefined maximum that defaults to `10`. You may define
|
||||
the preprocessor constant `FUSION_MAX_VECTOR_SIZE` before including any
|
||||
Fusion header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_VECTOR_SIZE 20
|
||||
|
||||
@ -1144,11 +1169,14 @@ Constructs a tie using a __map__ sequence.
|
||||
__map__<__pair__<K0, D0&>, __pair__<K1, D1&>,... __pair__<KN, DN&> >
|
||||
map_tie(D0& d0, D1& d1... DN& dN);
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
|
||||
where `FUSION_MAX_MAP_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`, and a corresponding number of key types.
|
||||
You may define the preprocessor constant `FUSION_MAX_MAP_SIZE` before
|
||||
including any Fusion header to change the default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_MAP_SIZE` elements, where `FUSION_MAX_MAP_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`, and a corresponding
|
||||
number of key types. You may define the preprocessor constant
|
||||
`FUSION_MAX_MAP_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
|
||||
#define FUSION_MAX_MAP_SIZE 20
|
||||
|
||||
@ -1249,10 +1277,13 @@ Returns the result type of __make_list__.
|
||||
template <typename T0, typename T1,... typename TN>
|
||||
struct make_list;
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_LIST_SIZE` elements, where
|
||||
`FUSION_MAX_LIST_SIZE` is a user definable predefined maximum that defaults
|
||||
to `10`. You may define the preprocessor constant `FUSION_MAX_LIST_SIZE`
|
||||
before including any Fusion header to change the default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_LIST_SIZE` elements, where `FUSION_MAX_LIST_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_LIST_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_LIST_SIZE 20
|
||||
|
||||
@ -1333,11 +1364,13 @@ Returns the result type of __make_vector__.
|
||||
template <typename T0, typename T1,... typename TN>
|
||||
struct make_vector;
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_VECTOR_SIZE` elements,
|
||||
where `FUSION_MAX_VECTOR_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_VECTOR_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_VECTOR_SIZE` elements, where `FUSION_MAX_VECTOR_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_VECTOR_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_VECTOR_SIZE 20
|
||||
|
||||
@ -1427,11 +1460,13 @@ Returns the result type of __make_set__.
|
||||
template <typename T0, typename T1,... typename TN>
|
||||
struct make_set;
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_SET_SIZE` elements,
|
||||
where `FUSION_MAX_SET_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_SET_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_SET_SIZE` elements, where `FUSION_MAX_SET_SIZE` is a user definable
|
||||
predefined maximum that defaults to `10`. You may define the preprocessor
|
||||
constant `FUSION_MAX_SET_SIZE` before including any Fusion header to change
|
||||
the default. Example:
|
||||
|
||||
#define FUSION_MAX_SET_SIZE 20
|
||||
|
||||
@ -1559,10 +1594,13 @@ Returns the result type of __list_tie__.
|
||||
template <typename T0, typename T1,... typename TN>
|
||||
struct list_tie;
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_LIST_SIZE` elements, where
|
||||
`FUSION_MAX_LIST_SIZE` is a user definable predefined maximum that defaults
|
||||
to `10`. You may define the preprocessor constant `FUSION_MAX_LIST_SIZE`
|
||||
before including any Fusion header to change the default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_LIST_SIZE` elements, where `FUSION_MAX_LIST_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_LIST_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_LIST_SIZE 20
|
||||
|
||||
@ -1603,11 +1641,13 @@ Returns the result type of __vector_tie__.
|
||||
template <typename T0, typename T1,... typename TN>
|
||||
struct vector_tie;
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_VECTOR_SIZE` elements,
|
||||
where `FUSION_MAX_VECTOR_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_VECTOR_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_VECTOR_SIZE` elements, where `FUSION_MAX_VECTOR_SIZE` is a user
|
||||
definable predefined maximum that defaults to `10`. You may define the
|
||||
preprocessor constant `FUSION_MAX_VECTOR_SIZE` before including any Fusion
|
||||
header to change the default. Example:
|
||||
|
||||
#define FUSION_MAX_VECTOR_SIZE 20
|
||||
|
||||
@ -1695,11 +1735,13 @@ Returns the result type of __map_tie__.
|
||||
template <typename K0, typename K1,... typename KN, typename D0, typename D1,... typename DN>
|
||||
struct map_tie;
|
||||
|
||||
The variadic function accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
|
||||
where `FUSION_MAX_MAP_SIZE` is a user definable predefined maximum that
|
||||
defaults to `10`. You may define the preprocessor constant
|
||||
`FUSION_MAX_MAP_SIZE` before including any Fusion header to change the
|
||||
default. Example:
|
||||
For C++11 compilers, the variadic function interface has no upper bound.
|
||||
|
||||
For C++03 compilers, the variadic function accepts `0` to
|
||||
`FUSION_MAX_MAP_SIZE` elements, where `FUSION_MAX_MAP_SIZE` is a user definable
|
||||
predefined maximum that defaults to `10`. You may define the preprocessor
|
||||
constant `FUSION_MAX_MAP_SIZE` before including any Fusion header to change
|
||||
the default. Example:
|
||||
|
||||
#define FUSION_MAX_MAP_SIZE 20
|
||||
|
||||
|
@ -400,7 +400,7 @@ producing a conforming Fusion sequence.
|
||||
[heading Usage]
|
||||
The user of __sequence_facade__ derives his sequence type from a specialization of __sequence_facade__ and passes the derived sequence type as the first template parameter. The second template parameter should be the traversal category of the sequence being implemented. The 3rd parameter should be set to `mpl::true_` if the sequence is a view.
|
||||
|
||||
The user must the implement the key expressions required by their sequence type.
|
||||
The user must implement the key expressions required by their sequence type.
|
||||
|
||||
[table Parameters
|
||||
[[Name][Description]]
|
||||
@ -447,7 +447,7 @@ producing a conforming Fusion iterator.
|
||||
[heading Usage]
|
||||
The user of iterator_facade derives his iterator type from a specialization of iterator_facade and passes the derived iterator type as the first template parameter. The second template parameter should be the traversal category of the iterator being implemented.
|
||||
|
||||
The user must the implement the key expressions required by their iterator type.
|
||||
The user must implement the key expressions required by their iterator type.
|
||||
|
||||
[table Parameters
|
||||
[[Name][Description]]
|
||||
|
@ -689,7 +689,7 @@ is not implemented).
|
||||
[[`R`] [A possibly const qualified __callable_obj__ type or reference type thereof]]
|
||||
[[`r`] [An object convertible to `R`]]
|
||||
[[`s`] [A __sequence__ of arguments that are accepted by `r`]]
|
||||
[[`f`] [An instance of `fused<R>`]]
|
||||
[[`f`] [An instance of `fused_procedure<R>`]]
|
||||
]
|
||||
|
||||
[heading Expression Semantics]
|
||||
|
@ -2,6 +2,7 @@
|
||||
Copyright (C) 2001-2011 Joel de Guzman
|
||||
Copyright (C) 2006 Dan Marsden
|
||||
Copyright (C) 2010 Christopher Schmidt
|
||||
Copyright (C) 2018 Kohei Takahashi
|
||||
|
||||
Use, modification and distribution is subject to the Boost Software
|
||||
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@ -20,39 +21,37 @@
|
||||
]
|
||||
]
|
||||
|
||||
[def __spirit__ [@http://spirit.sourceforge.net Spirit]]
|
||||
[def __phoenix__ [@http://www.boost.org/libs/phoenix/index.html Phoenix]]
|
||||
[def __mpl__ [@http://www.boost.org/libs/mpl/index.html MPL]]
|
||||
[def __spirit__ [@http://boost-spirit.com/home/ Spirit]]
|
||||
[def __phoenix__ [@http://www.boost.org/libs/phoenix Phoenix]]
|
||||
[def __mpl__ [@http://www.boost.org/libs/mpl MPL]]
|
||||
[def __stl__ [@http://en.wikipedia.org/wiki/Standard_Template_Library STL]]
|
||||
[def __tuple__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple]]
|
||||
[def __tuple__ [@http://www.boost.org/libs/tuple Boost.Tuple]]
|
||||
[def __tr1__tuple__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 Tuple]]
|
||||
[def __boost_tools__ [@http://www.boost.org/tools/index.html Boost Tools]]
|
||||
[def __spirit_list__ [@https://lists.sourceforge.net/lists/listinfo/spirit-general Spirit Mailing List]]
|
||||
[def __spirit_general__ [@news://news.gmane.org/gmane.comp.spirit.general Spirit General NNTP news portal]]
|
||||
[def __gmane__ [@http://www.gmane.org Gmane]]
|
||||
[def __mlist_archive__ [@http://news.gmane.org/gmane.comp.parsers.spirit.general]]
|
||||
[def __spirit_list__ [@https://sourceforge.net/projects/spirit/lists/spirit-general Spirit Mailing List]]
|
||||
[def __list_archive__ [@https://sourceforge.net/p/spirit/mailman/spirit-general/ archive]]
|
||||
[def __jaakko_jarvi__ [@http://www.boost.org/people/jaakko_jarvi.htm Jaakko Jarvi]]
|
||||
[def __david_abrahams__ [@http://www.boost.org/people/dave_abrahams.htm David Abrahams]]
|
||||
[def __the_forwarding_problem__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm The Forwarding Problem]]
|
||||
|
||||
[def __boost_any__ [@http://www.boost.org/doc/html/any.html Boost.Any]]
|
||||
[def __boost_any__ [@http://www.boost.org/libs/any Boost.Any Library]]
|
||||
[def __new_iterator_concepts__ [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts]]
|
||||
[def __boost_array_library__ [@http://www.boost.org/doc/html/array.html Boost.Array Library]]
|
||||
[def __boost_variant_library__ [@http://www.boost.org/doc/html/variant.html Boost.Variant Library]]
|
||||
[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple Library]]
|
||||
[def __boost_ref__ [@http://www.boost.org/doc/html/ref.html Boost.Ref]]
|
||||
[def __boost_ref_call__ [@http://www.boost.org/doc/html/ref.html `ref`]]
|
||||
[def __boost_result_of__ [@http://www.boost.org/libs/utility/utility.htm#result_of Boost.ResultOf]]
|
||||
[def __boost_array_library__ [@http://www.boost.org/libs/array Boost.Array Library]]
|
||||
[def __boost_variant_library__ [@http://www.boost.org/libs/variant Boost.Variant Library]]
|
||||
[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple Boost.Tuple Library]]
|
||||
[def __boost_ref__ [@http://www.boost.org/libs/core/ref.html Ref utility]]
|
||||
[def __boost_ref_call__ [@http://www.boost.org/libs/core/ref.html `ref`]]
|
||||
[def __boost_result_of__ [@http://www.boost.org/libs/utility/utility.htm#result_of ResultOf utility]]
|
||||
[def __boost_result_of_call__ [@http://www.boost.org/libs/utility/utility.htm#result_of `boost::result_of`]]
|
||||
[def __boost_enable_if__ [@http://www.boost.org/libs/utility/enable_if.html Boost.EnableIf utility]]
|
||||
[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr/shared_ptr.htm `boost::shared_ptr`]]
|
||||
[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward/doc/html/index.html Boost.Functional/Forward]]
|
||||
[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory/doc/html/index.html Boost.Functional/Factory]]
|
||||
[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.Functional/Hash]]
|
||||
[def __std_pair_doc__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]]
|
||||
[def __boost_enable_if__ [@http://www.boost.org/libs/core/doc/html/core/enable_if.html EnableIf utility]]
|
||||
[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr#shared_ptr `boost::shared_ptr`]]
|
||||
[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward Boost.Functional/Forward Library]]
|
||||
[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory Boost.Functional/Factory Library]]
|
||||
[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.ContainerHash Library]]
|
||||
[def __std_pair_doc__ [@http://en.cppreference.com/w/cpp/utility/pair `std::pair`]]
|
||||
[def __std_tuple_doc__ [@http://en.cppreference.com/w/cpp/utility/tuple `std::tuple`]]
|
||||
[def __std_plus_doc__ [@http://www.sgi.com/tech/stl/plus.html `std::plus`]]
|
||||
[def __std_minus_doc__ [@http://www.sgi.com/tech/stl/minus.html `std::minus`]]
|
||||
[def __std_plus_doc__ [@http://en.cppreference.com/w/cpp/utility/functional/plus `std::plus`]]
|
||||
[def __std_minus_doc__ [@http://en.cppreference.com/w/cpp/utility/functional/minus `std::minus`]]
|
||||
|
||||
[def __mpl_integral_constant__ [@http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html MPL Integral Constant]]
|
||||
[def __mpl_boolean_constant__ [@http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html MPL Boolean Constant]]
|
||||
@ -79,6 +78,7 @@
|
||||
[def __bidirectional_iterator__ [link fusion.iterator.concepts.bidirectional_iterator Bidirectional Iterator]]
|
||||
[def __random_access_iterator__ [link fusion.iterator.concepts.random_access_iterator Random Access Iterator]]
|
||||
[def __associative_iterator__ [link fusion.iterator.concepts.associative_iterator Associative Iterator]]
|
||||
[def __unbounded_iterator__ [link fusion.iterator.concepts.unbounded_iterator Unbounded Iterator]]
|
||||
|
||||
[def __next__ [link fusion.iterator.functions.next `next`]]
|
||||
[def __prior__ [link fusion.iterator.functions.prior `prior`]]
|
||||
@ -108,6 +108,7 @@
|
||||
[def __bidirectional_sequence__ [link fusion.sequence.concepts.bidirectional_sequence Bidirectional Sequence]]
|
||||
[def __random_access_sequence__ [link fusion.sequence.concepts.random_access_sequence Random Access Sequence]]
|
||||
[def __associative_sequence__ [link fusion.sequence.concepts.associative_sequence Associative Sequence]]
|
||||
[def __unbounded_sequence__ [link fusion.sequence.concepts.unbounded_sequence Unbounded Sequence]]
|
||||
|
||||
[def __containers__ [link fusion.container Container]]
|
||||
[def __vector__ [link fusion.container.vector `vector`]]
|
||||
@ -337,6 +338,8 @@
|
||||
|
||||
[def __adt_attribute_proxy__ [link fusion.notes.adt_attribute_proxy `adt_attribute_proxy`]]
|
||||
|
||||
[def __window_function__ [@http://en.wikipedia.org/wiki/Window_function Window Function]]
|
||||
|
||||
[include preface.qbk]
|
||||
[include introduction.qbk]
|
||||
[include quick_start.qbk]
|
||||
|
@ -69,6 +69,8 @@
|
||||
Access Iterator</a></span></dt>
|
||||
<dt><span class="section"><a href="fusion/iterator/concepts/associative_iterator.html">Associative
|
||||
Iterator</a></span></dt>
|
||||
<dt><span class="section"><a href="fusion/iterator/concepts/unbounded_iterator.html">Unbounded
|
||||
Iterator</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="section"><a href="fusion/iterator/functions.html">Functions</a></span></dt>
|
||||
<dd><dl>
|
||||
@ -116,6 +118,8 @@
|
||||
Access Sequence</a></span></dt>
|
||||
<dt><span class="section"><a href="fusion/sequence/concepts/associative_sequence.html">Associative
|
||||
Sequence</a></span></dt>
|
||||
<dt><span class="section"><a href="fusion/sequence/concepts/unbounded_sequence.html">Unbounded
|
||||
Sequence</a></span></dt>
|
||||
</dl></dd>
|
||||
<dt><span class="section"><a href="fusion/sequence/intrinsic.html">Intrinsic</a></span></dt>
|
||||
<dd><dl>
|
||||
@ -274,7 +278,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
<td align="left"><p><small>Last revised: May 10, 2013 at 05:54:18 GMT</small></p></td>
|
||||
<td align="left"><p><small>Last revised: June 25, 2015 at 13:41:27 GMT</small></p></td>
|
||||
<td align="right"><div class="copyright-footer"></div></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
|
@ -257,6 +257,12 @@ expressions must be valid:
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Unbounded Iterator]
|
||||
|
||||
[warning In this release, __unbounded_iterator__ concept has no effect. It's reserved for future release.]
|
||||
|
||||
[endsect]
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Functions]
|
||||
|
@ -61,11 +61,8 @@ tool. QuickBook can be found in the __boost_tools__.
|
||||
[heading Support]
|
||||
|
||||
Please direct all questions to Spirit's mailing list. You can subscribe to the
|
||||
__spirit_list__. The mailing list has a searchable archive. A search link to
|
||||
this archive is provided in __spirit__'s home page. You may also read and post
|
||||
messages to the mailing list through __spirit_general__ (thanks to __gmane__).
|
||||
The news group mirrors the mailing list. Here is a link to the archives:
|
||||
__mlist_archive__.
|
||||
__spirit_list__. The mailing list has a searchable archive. Here is a link to
|
||||
the archives: __list_archive__.
|
||||
|
||||
[endsect]
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
[/==============================================================================
|
||||
Copyright (C) 2001-2011 Joel de Guzman
|
||||
Copyright (C) 2006 Dan Marsden
|
||||
Copyright (C) 2018 Kohei Takahashi
|
||||
|
||||
Use, modification and distribution is subject to the Boost Software
|
||||
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@ -8,20 +9,20 @@
|
||||
===============================================================================/]
|
||||
[section References]
|
||||
|
||||
# [@http://boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts],
|
||||
# [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts],
|
||||
David Abrahams, Jeremy Siek, Thomas Witt, 2004-11-01.
|
||||
# [@http://boost.org/libs/tuple/doc/tuple_users_guide.html The Boost Tuple Library],
|
||||
# [@http://www.boost.org/libs/tuple The Boost Tuple Library],
|
||||
Jaakko Jarvi, 2001.
|
||||
# [@http://www.boost.org/libs/spirit/ Spirit Parser Library],
|
||||
# [@http://www.boost.org/libs/spirit Spirit Parser Library],
|
||||
Joel de Guzman, 2001-2006.
|
||||
# [@http://www.boost.org/libs/mpl/ The Boost MPL Library],
|
||||
# [@http://www.boost.org/libs/mpl The Boost MPL Library],
|
||||
Aleksey Gurtovoy and David Abrahams, 2002-2004.
|
||||
# [@http://www.boost.org/doc/html/array.html Boost Array],
|
||||
# [@http://www.boost.org/libs/array The Boost Array Library],
|
||||
Nicolai Josuttis, 2002-2004.
|
||||
# [@http://www.sgi.com/tech/stl/ Standard Template Library Programmer's Guide],
|
||||
Hewlett-Packard Company, 1994.
|
||||
# [@http://www.boost.org/doc/html/ref.html Boost.Ref],
|
||||
# [@http://www.boost.org/libs/core/ref.html Boost.Core / Ref utility],
|
||||
Jaakko Jarvi, Peter Dimov, Douglas Gregor, Dave Abrahams, 1999-2002.
|
||||
# [@http://www.boost.org/libs/hana The Boost Hana Library],
|
||||
Louis Dionne, 2017.
|
||||
|
||||
[endsect]
|
||||
|
||||
|
@ -39,6 +39,11 @@ These concepts pertain to sequence traversal.
|
||||
The __associative_sequence__ concept is orthogonal to traversal. An Associative
|
||||
Sequence allows efficient retrieval of elements based on keys.
|
||||
|
||||
[heading Boundary]
|
||||
|
||||
The __unbounded_sequence__ concept is also orthogonal to traversal and associativity.
|
||||
A Unbounded Sequence allows out-of-bounds access.
|
||||
|
||||
[section Forward Sequence]
|
||||
|
||||
[heading Description]
|
||||
@ -359,6 +364,55 @@ you can use `__result_of_value_at_key__<S, K>`.]
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Unbounded Sequence]
|
||||
|
||||
[heading Description]
|
||||
|
||||
A Unbounded Sequence allows Out-of-Bounds access: it will achieve something like a __window_function__.
|
||||
Most of the sequences do not meet this concept, but some special usecases do.
|
||||
|
||||
[important User extending sequences should handle any parameters or be SFINAE-friendly.]
|
||||
|
||||
[variablelist Notation
|
||||
[[`s`] [An Fusion Sequence]]
|
||||
[[`S`] [An Fusion Sequence type]]
|
||||
[[`M`] [An __mpl__ integral constant]]
|
||||
[[`N`] [An integral constant]]
|
||||
[[`K`] [An arbitrary /key/ type]]
|
||||
[[`o`] [An arbitrary object]]
|
||||
[[`e`] [A Sequence element]]
|
||||
]
|
||||
|
||||
[heading Valid Expressions]
|
||||
|
||||
[table
|
||||
[[Expression] [Return type] [Type Requirements] [Runtime Complexity]]
|
||||
[[`__at_c__<N>(s)`] [Any type] [] [Depends on its traversability]]
|
||||
[[`__at_c__<N>(s) = o`] [Any type] [] [Depends on its traversability]]
|
||||
[[`__at__<M>(s)`] [Any type] [] [Depends on its traversability]]
|
||||
[[`__at__<M>(s) = o`] [Any type] [] [Depends on its traversability]]
|
||||
[[`__at_key__<K>(s)`] [Any type] [`S` should be __associative_sequence__] [Depends on its traversability]]
|
||||
[[`__at_key__<K>(s) = o`] [Any type] [`S` should be __associative_sequence__] [Depends on its traversability]]
|
||||
]
|
||||
|
||||
[heading Result Type Expressions]
|
||||
|
||||
[table
|
||||
[[Expression] [Compile Time Complexity]]
|
||||
[[`__result_of_at__<S, M>::type`] [Depends on its traversability]]
|
||||
[[`__result_of_at_c__<S, N>::type`] [Depends on its traversability]]
|
||||
[[`__result_of_value_at__<S, M>::type`] [Depends on its traversability]]
|
||||
[[`__result_of_value_at_c__<S, N>::type`] [Depends on its traversability]]
|
||||
[[`__result_of_at_key__<S, K>::type`] [Depends on its traversability]]
|
||||
[[`__result_of_value_at_key__<S, K>::type`] [Depends on its traversability]]
|
||||
]
|
||||
|
||||
[heading Models]
|
||||
|
||||
* none.
|
||||
|
||||
[endsect]
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Intrinsic]
|
||||
@ -686,7 +740,7 @@ element from the beginning of the sequence, is a valid expression. Else,
|
||||
returns a type convertible to the M-th element from the beginning of the
|
||||
sequence.
|
||||
|
||||
[*Precondition]: `0 <= M::value < __size__(s)`
|
||||
[*Precondition]: `0 <= M::value < __size__(seq)` (where `seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Equivalent to
|
||||
|
||||
@ -739,7 +793,7 @@ element from the beginning of the sequence, is a valid expression. Else,
|
||||
returns a type convertible to the N-th element from the beginning of the
|
||||
sequence.
|
||||
|
||||
[*Precondition]: `0 <= N < __size__(s)`
|
||||
[*Precondition]: `0 <= N < __size__(seq)` (where `seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Equivalent to
|
||||
|
||||
@ -833,7 +887,7 @@ the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the
|
||||
element associated with Key, is a valid expression. Else, returns a type
|
||||
convertible to the element associated with Key.
|
||||
|
||||
[*Precondition]: `has_key<Key>(seq) == true`
|
||||
[*Precondition]: `has_key<Key>(seq) == true` (where `seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Returns the element associated with Key.
|
||||
|
||||
@ -1149,6 +1203,8 @@ the actual element type, use __result_of_value_at__].
|
||||
|
||||
[*Return type]: Any type.
|
||||
|
||||
[*Precondition]: `0 <= M::value < __result_of_size__<Seq>::value` (where `Seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Returns the result type of using __at__ to access the `M`th element of `Seq`.
|
||||
|
||||
[heading Header]
|
||||
@ -1191,6 +1247,8 @@ get the actual element type, use __result_of_value_at_c__].
|
||||
|
||||
[*Return type]: Any type
|
||||
|
||||
[*Precondition]: `0 <= N < __result_of_size__<Seq>::value` (where `Seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Returns the result type of using __at_c__ to access the `N`th element of `Seq`.
|
||||
|
||||
[heading Header]
|
||||
@ -1350,6 +1408,8 @@ you want to get the actual element type, use __result_of_value_at_key__].
|
||||
|
||||
[*Return type]: Any type.
|
||||
|
||||
[*Precondition]: `has_key<Seq, Key>::type::value == true` (where `Seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Returns the result of using __at_key__ to access the element with key type `Key` in `Seq`.
|
||||
|
||||
[heading Header]
|
||||
@ -1388,6 +1448,8 @@ Returns the actual element type associated with a Key from the __sequence__.
|
||||
|
||||
[*Return type]: Any type.
|
||||
|
||||
[*Precondition]: `has_key<Seq, Key>::type::value == true` (where `Seq` is not __unbounded_sequence__)
|
||||
|
||||
[*Semantics]: Returns the actual element type associated with key type
|
||||
`Key` in `Seq`.
|
||||
|
||||
@ -1460,6 +1522,16 @@ each element. Analogously, the global `operator>>` has been overloaded
|
||||
to extract __sequence__(s) from generic input streams by recursively
|
||||
calling `operator>>` for each element.
|
||||
|
||||
Please note that, to display your adapted types via fusion IO system,
|
||||
corresponding overloaded operators should be introduced to same namespace
|
||||
of the type.
|
||||
|
||||
namespace your_awesome_library
|
||||
{
|
||||
using boost::fusion::operators::operator>>; // for input
|
||||
using boost::fusion::operators::operator<<; // for output
|
||||
...
|
||||
|
||||
The default delimiter between the elements is space, and the __sequence__
|
||||
is enclosed in parenthesis. For Example:
|
||||
|
||||
|
@ -227,6 +227,8 @@ And optionally from:
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct associative_tag {};
|
||||
|
||||
struct unbounded_tag {};
|
||||
}}
|
||||
|
||||
[*Semantics]: Establishes the conceptual classification of a particular
|
||||
|
13
doc/view.qbk
13
doc/view.qbk
@ -93,10 +93,9 @@ presents only those elements for which its predicate evaluates to
|
||||
[heading Template parameters]
|
||||
|
||||
[table
|
||||
[[Parameter] [Description] [Default]]
|
||||
[[`Sequence`] [A __forward_sequence__] []]
|
||||
[[`Pred`] [Unary Metafunction
|
||||
returning an `mpl::bool_`] []]
|
||||
[[Parameter] [Description] [Default]]
|
||||
[[`Sequence`] [A __forward_sequence__] []]
|
||||
[[`Pred`] [A unary __mpl_lambda_expression__] []]
|
||||
]
|
||||
|
||||
[heading Model of]
|
||||
@ -271,7 +270,7 @@ defined in the implemented models.
|
||||
[heading Description]
|
||||
|
||||
`zip_view` presents a view which iterates over a collection of __sequence__(s) in parallel. A `zip_view`
|
||||
is constructed from a __sequence__ of references to the component __sequence__s.
|
||||
is constructed from a __sequence__ of references to the component `__sequence__`s.
|
||||
|
||||
[heading Header]
|
||||
|
||||
@ -287,7 +286,7 @@ is constructed from a __sequence__ of references to the component __sequence__s.
|
||||
|
||||
[table
|
||||
[[Parameter] [Description] [Default]]
|
||||
[[`Sequences`] [A __forward_sequence__ of references to other Fusion __sequence__s] []]
|
||||
[[`Sequences`] [A __forward_sequence__ of references to other Fusion `__sequence__`s] []]
|
||||
]
|
||||
|
||||
[heading Model of]
|
||||
@ -309,7 +308,7 @@ defined in __forward_sequence__.
|
||||
|
||||
[table
|
||||
[[Expression] [Semantics]]
|
||||
[[`ZV(s)`] [Creates a `zip_view` given a sequence of references to the component __sequence__s.]]
|
||||
[[`ZV(s)`] [Creates a `zip_view` given a sequence of references to the component `__sequence__`s.]]
|
||||
[[`ZV(zv1)`] [Copy constructs a `zip_view` from another `zip_view`, `zv`.]]
|
||||
[[`zv1 = zv2`] [Assigns to a `zip_view`, `zv`, from another `zip_view`, `zv2`.]]
|
||||
]
|
||||
|
@ -15,12 +15,7 @@
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/comparison/less.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||
@ -45,13 +40,11 @@
|
||||
TEMPLATE_PARAMS_SEQ, \
|
||||
NAME_SEQ, \
|
||||
I, \
|
||||
BOOST_PP_IF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE), \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
|
||||
BOOST_PP_IF( \
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 4) \
|
||||
, 1, 0))
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 4)) \
|
||||
|
||||
#define BOOST_FUSION_ADAPT_TPL_ADT(TEMPLATE_PARAMS_SEQ, NAME_SEQ , ATTRIBUTES) \
|
||||
BOOST_FUSION_ADAPT_STRUCT_BASE( \
|
||||
|
@ -14,10 +14,7 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||
@ -46,13 +43,11 @@
|
||||
TEMPLATE_PARAMS_SEQ, \
|
||||
NAME_SEQ, \
|
||||
I, \
|
||||
BOOST_PP_IF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE), \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
|
||||
BOOST_PP_IF( \
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 5) \
|
||||
, 1, 0)) \
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 5)) \
|
||||
\
|
||||
template< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
|
||||
|
@ -15,12 +15,14 @@
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp>
|
||||
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/control/expr_if.hpp>
|
||||
#include <boost/preprocessor/seq/seq.hpp>
|
||||
#include <boost/preprocessor/seq/elem.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
|
||||
#include <boost/typeof/typeof.hpp>
|
||||
|
||||
@ -36,18 +38,18 @@
|
||||
boost::remove_const<boost::remove_reference<lvalue>::type>::type
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
|
||||
BOOST_PP_IF(DEDUCE_TYPE, 0, 2), ATTRIBUTE)
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_SETEXPR(ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
|
||||
BOOST_PP_IF(DEDUCE_TYPE, 1, 3), ATTRIBUTE)
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
||||
TEMPLATE_PARAMS_SEQ) \
|
||||
@ -55,52 +57,45 @@
|
||||
struct deduced_attr_type { \
|
||||
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||
typedef \
|
||||
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
|
||||
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
||||
typename) \
|
||||
BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
|
||||
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
|
||||
ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, 1)) type; \
|
||||
};
|
||||
|
||||
#else
|
||||
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
struct deduced_attr_type { \
|
||||
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||
typedef BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
|
||||
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
|
||||
ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, 1)) type; \
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#define BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF( \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
BOOST_FUSION_DEDUCED_ATTR_TYPE( \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
typedef \
|
||||
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
|
||||
boost::remove_const< \
|
||||
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
|
||||
deduced_attr_type::type \
|
||||
>::type type; \
|
||||
\
|
||||
typedef \
|
||||
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
|
||||
boost::add_const< \
|
||||
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
|
||||
deduced_attr_type::type \
|
||||
>::type const_type;
|
||||
BOOST_PP_EXPR_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), \
|
||||
typename) \
|
||||
deduced_attr_type::type type; \
|
||||
typedef type const_type;
|
||||
|
||||
#define BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE( \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type; \
|
||||
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) const_type;
|
||||
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, 0, ATTRIBUTE) type; \
|
||||
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, 1, ATTRIBUTE) const_type;
|
||||
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ADT_C_BASE( \
|
||||
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,PREFIX, \
|
||||
ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE) \
|
||||
ATTRIBUTE,ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE) \
|
||||
\
|
||||
template< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
|
||||
@ -116,7 +111,7 @@
|
||||
BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE)( \
|
||||
NAME_SEQ, \
|
||||
ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
PREFIX, \
|
||||
TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
@ -128,7 +123,7 @@
|
||||
Val const& val) \
|
||||
{ \
|
||||
PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_SETEXPR(ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE); \
|
||||
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE); \
|
||||
} \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
@ -137,7 +132,7 @@
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj) \
|
||||
{ \
|
||||
return PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE); \
|
||||
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE); \
|
||||
} \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
@ -146,7 +141,7 @@
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& obj) \
|
||||
{ \
|
||||
return PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE); \
|
||||
ATTRIBUTE_TUPLE_SIZE, DEDUCE_TYPE); \
|
||||
} \
|
||||
}; \
|
||||
\
|
||||
@ -160,7 +155,7 @@
|
||||
> \
|
||||
{ \
|
||||
typedef \
|
||||
BOOST_PP_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||
BOOST_PP_EXPR_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename) \
|
||||
access::adt_attribute_access< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
|
||||
, I \
|
||||
@ -201,7 +196,7 @@
|
||||
> \
|
||||
{ \
|
||||
typedef \
|
||||
BOOST_PP_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||
BOOST_PP_EXPR_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename) \
|
||||
access::adt_attribute_access< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
|
||||
, I \
|
||||
@ -252,7 +247,8 @@
|
||||
, I \
|
||||
> \
|
||||
{ \
|
||||
typedef BOOST_PP_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||
typedef BOOST_PP_EXPR_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), \
|
||||
typename) \
|
||||
adt_attribute_proxy< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
|
||||
, I \
|
||||
|
@ -10,12 +10,15 @@
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
|
||||
#include <boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp>
|
||||
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/mpl/aux_/preprocessor/token_equal.hpp>
|
||||
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
|
||||
#if BOOST_PP_VARIADICS
|
||||
|
||||
@ -41,7 +44,7 @@
|
||||
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
|
||||
BOOST_PP_IF(BOOST_PP_IS_EMPTY(A), \
|
||||
BOOST_PP_IIF(BOOST_MPL_PP_TOKEN_EQUAL(auto, A), \
|
||||
((3, (C,D,E))), \
|
||||
((5, (A,B,C,D,E))) \
|
||||
)
|
||||
@ -55,7 +58,7 @@
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) \
|
||||
BOOST_PP_TUPLE_ELEM( \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
|
||||
BOOST_PP_SUB(BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 1), \
|
||||
BOOST_PP_DEC(BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE)), \
|
||||
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE))
|
||||
|
||||
#endif
|
||||
|
@ -9,23 +9,21 @@
|
||||
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_ATTR_FILLER_HPP
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp>
|
||||
|
||||
#include <boost/preprocessor/arithmetic/sub.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/logical/or.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
#include <boost/preprocessor/variadic/to_seq.hpp>
|
||||
#include <boost/preprocessor/variadic/to_tuple.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/preprocessor/seq/for_each.hpp>
|
||||
#include <boost/preprocessor/seq/push_front.hpp>
|
||||
#include <boost/preprocessor/seq/rest_n.hpp>
|
||||
#include <boost/mpl/aux_/preprocessor/token_equal.hpp>
|
||||
|
||||
#include <boost/preprocessor/tuple/reverse.hpp>
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/logical/or.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/variadic/to_seq.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
#include <boost/preprocessor/seq/seq.hpp>
|
||||
#include <boost/preprocessor/seq/rest_n.hpp>
|
||||
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE) \
|
||||
@ -47,11 +45,15 @@
|
||||
# define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
|
||||
# define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
|
||||
|
||||
// MSVC don't compile when using BOOST_PP_BITOR instead of BOOST_PP_OR.
|
||||
# define BOOST_FUSION_ADAPT_ADT_FILLER(...) \
|
||||
BOOST_PP_IF( \
|
||||
BOOST_PP_IIF( \
|
||||
BOOST_PP_OR( \
|
||||
BOOST_PP_IS_EMPTY(BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__)), \
|
||||
BOOST_PP_IS_EMPTY(BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__))), \
|
||||
BOOST_MPL_PP_TOKEN_EQUAL(auto, \
|
||||
BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__)), \
|
||||
BOOST_MPL_PP_TOKEN_EQUAL(auto, \
|
||||
BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__))), \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR( \
|
||||
BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__), \
|
||||
BOOST_FUSION_WORKAROUND_VARIADIC_EMPTINESS_LAST_ELEM(__VA_ARGS__) \
|
||||
@ -63,7 +65,7 @@
|
||||
|
||||
# define BOOST_FUSION_WORKAROUND_VARIADIC_EMPTINESS_LAST_ELEM(...) \
|
||||
BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REST_N( \
|
||||
BOOST_PP_SUB(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), 1), \
|
||||
BOOST_PP_DEC(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)), \
|
||||
BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
|
||||
|
||||
#else // BOOST_PP_VARIADICS
|
||||
@ -80,7 +82,7 @@
|
||||
# define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
|
||||
|
||||
# define BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A, B, C, D) \
|
||||
BOOST_PP_IF(BOOST_PP_IS_EMPTY(A), \
|
||||
BOOST_PP_IIF(BOOST_MPL_PP_TOKEN_EQUAL(auto, A), \
|
||||
((2, (C,D))), \
|
||||
((4, (A,B,C,D))) \
|
||||
)
|
||||
|
@ -103,9 +103,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
array_iterator<Array, Pos>& operator=(array_iterator<Array, Pos> const&);
|
||||
BOOST_DELETED_FUNCTION(array_iterator& operator=(array_iterator const&))
|
||||
};
|
||||
}}
|
||||
|
||||
|
@ -144,9 +144,8 @@ namespace boost { namespace fusion
|
||||
: is_same<typename I1::identity, typename I2::identity>
|
||||
{};
|
||||
|
||||
private:
|
||||
// silence MSVC warning C4512: assignment operator could not be generated
|
||||
boost_tuple_iterator& operator= (boost_tuple_iterator const&);
|
||||
BOOST_DELETED_FUNCTION(boost_tuple_iterator& operator= (boost_tuple_iterator const&))
|
||||
};
|
||||
|
||||
template <typename Null>
|
||||
|
23
include/boost/fusion/adapted/std_array.hpp
Normal file
23
include/boost/fusion/adapted/std_array.hpp
Normal file
@ -0,0 +1,23 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY__01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY__01062013_1700
|
||||
|
||||
#include <boost/fusion/adapted/std_array/std_array_iterator.hpp>
|
||||
#include <boost/fusion/adapted/std_array/tag_of.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/is_view_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/category_of_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/begin_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/end_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/size_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/at_impl.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/value_at_impl.hpp>
|
||||
|
||||
#endif
|
25
include/boost/fusion/adapted/std_array/detail/array_size.hpp
Normal file
25
include/boost/fusion/adapted/std_array/detail/array_size.hpp
Normal file
@ -0,0 +1,25 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_ARRAY_SIZE_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_ARRAY_SIZE_01062013_1700
|
||||
|
||||
#include <cstddef>
|
||||
#include <boost/type_traits/integral_constant.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace extension
|
||||
{
|
||||
template<class T>
|
||||
struct std_array_size;
|
||||
|
||||
template<template<typename, std::size_t> class Array, typename T, std::size_t N>
|
||||
struct std_array_size<Array<T, N> > : boost::integral_constant<std::size_t, N> {};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
45
include/boost/fusion/adapted/std_array/detail/at_impl.hpp
Normal file
45
include/boost/fusion/adapted/std_array/detail/at_impl.hpp
Normal file
@ -0,0 +1,45 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_AT_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_AT_IMPL_01062013_1700
|
||||
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
|
||||
#include <boost/mpl/if.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename T>
|
||||
struct at_impl;
|
||||
|
||||
template<>
|
||||
struct at_impl<std_array_tag>
|
||||
{
|
||||
template<typename Sequence, typename N>
|
||||
struct apply
|
||||
{
|
||||
typedef typename mpl::if_<
|
||||
is_const<Sequence>,
|
||||
typename Sequence::const_reference,
|
||||
typename Sequence::reference>::type type;
|
||||
|
||||
static type
|
||||
call(Sequence& seq)
|
||||
{
|
||||
return seq[N::value];
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
41
include/boost/fusion/adapted/std_array/detail/begin_impl.hpp
Normal file
41
include/boost/fusion/adapted/std_array/detail/begin_impl.hpp
Normal file
@ -0,0 +1,41 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_BEGIN_OF_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_BEGIN_OF_IMPL_01062013_1700
|
||||
|
||||
#include <boost/fusion/adapted/std_array/std_array_iterator.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename T>
|
||||
struct begin_impl;
|
||||
|
||||
template <>
|
||||
struct begin_impl<std_array_tag>
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply
|
||||
{
|
||||
typedef std_array_iterator<Sequence, 0> type;
|
||||
|
||||
static type
|
||||
call(Sequence& v)
|
||||
{
|
||||
return type(v);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
@ -0,0 +1,35 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_CATEGORY_OF_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_CATEGORY_OF_IMPL_01062013_1700
|
||||
|
||||
#include <boost/config/no_tr1/utility.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename T>
|
||||
struct category_of_impl;
|
||||
|
||||
template<>
|
||||
struct category_of_impl<std_array_tag>
|
||||
{
|
||||
template<typename T>
|
||||
struct apply
|
||||
{
|
||||
typedef random_access_traversal_tag type;
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
45
include/boost/fusion/adapted/std_array/detail/end_impl.hpp
Normal file
45
include/boost/fusion/adapted/std_array/detail/end_impl.hpp
Normal file
@ -0,0 +1,45 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_END_OF_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_END_OF_IMPL_01062013_1700
|
||||
|
||||
#include <boost/fusion/adapted/std_array/std_array_iterator.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template <typename Tag>
|
||||
struct end_impl;
|
||||
|
||||
template <>
|
||||
struct end_impl<std_array_tag>
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct apply
|
||||
{
|
||||
typedef typename remove_const<Sequence>::type seq_type;
|
||||
static int const size = std_array_size<seq_type>::value;
|
||||
typedef std_array_iterator<Sequence, size> type;
|
||||
|
||||
static type
|
||||
call(Sequence& v)
|
||||
{
|
||||
return type(v);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
@ -0,0 +1,32 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_IS_SEQUENCE_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_IS_SEQUENCE_IMPL_01062013_1700
|
||||
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename Tag>
|
||||
struct is_sequence_impl;
|
||||
|
||||
template<>
|
||||
struct is_sequence_impl<std_array_tag>
|
||||
{
|
||||
template<typename Sequence>
|
||||
struct apply : mpl::true_ {};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
@ -0,0 +1,33 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_IS_VIEW_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_IS_VIEW_IMPL_01062013_1700
|
||||
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename Tag>
|
||||
struct is_view_impl;
|
||||
|
||||
template<>
|
||||
struct is_view_impl<std_array_tag>
|
||||
{
|
||||
template<typename T>
|
||||
struct apply : mpl::false_
|
||||
{};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
41
include/boost/fusion/adapted/std_array/detail/size_impl.hpp
Normal file
41
include/boost/fusion/adapted/std_array/detail/size_impl.hpp
Normal file
@ -0,0 +1,41 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_SIZE_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_SIZE_IMPL_01062013_1700
|
||||
|
||||
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename T>
|
||||
struct size_impl;
|
||||
|
||||
template<>
|
||||
struct size_impl<std_array_tag>
|
||||
{
|
||||
template<typename Sequence>
|
||||
struct apply
|
||||
: mpl::int_
|
||||
<
|
||||
std_array_size
|
||||
<
|
||||
typename remove_const<Sequence>::type
|
||||
>::value
|
||||
>
|
||||
{};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
@ -0,0 +1,32 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_VALUE_AT_IMPL_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_VALUE_AT_IMPL_01062013_1700
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
|
||||
struct std_array_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename T>
|
||||
struct value_at_impl;
|
||||
|
||||
template <>
|
||||
struct value_at_impl<std_array_tag>
|
||||
{
|
||||
template <typename Sequence, typename N>
|
||||
struct apply
|
||||
{
|
||||
typedef typename Sequence::value_type type;
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
107
include/boost/fusion/adapted/std_array/std_array_iterator.hpp
Normal file
107
include/boost/fusion/adapted/std_array/std_array_iterator.hpp
Normal file
@ -0,0 +1,107 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2013 Mateusz Loskot
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_ARRAY_ITERATOR_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_ARRAY_ITERATOR_01062013_1700
|
||||
|
||||
#include <cstddef>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/mpl/assert.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/minus.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/fusion/iterator/iterator_facade.hpp>
|
||||
#include <boost/fusion/adapted/std_array/detail/array_size.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct random_access_traversal_tag;
|
||||
|
||||
template <typename Array, int Pos>
|
||||
struct std_array_iterator
|
||||
: iterator_facade<std_array_iterator<Array, Pos>, random_access_traversal_tag>
|
||||
{
|
||||
BOOST_MPL_ASSERT_RELATION(Pos, >=, 0);
|
||||
BOOST_MPL_ASSERT_RELATION(Pos, <=, std::tuple_size<Array>::value);
|
||||
|
||||
typedef mpl::int_<Pos> index;
|
||||
typedef Array array_type;
|
||||
|
||||
std_array_iterator(Array& a)
|
||||
: array(a) {}
|
||||
|
||||
Array& array;
|
||||
|
||||
template <typename Iterator>
|
||||
struct value_of
|
||||
{
|
||||
typedef typename Iterator::array_type array_type;
|
||||
typedef typename array_type::value_type type;
|
||||
};
|
||||
|
||||
template <typename Iterator>
|
||||
struct deref
|
||||
{
|
||||
typedef typename Iterator::array_type array_type;
|
||||
typedef typename
|
||||
mpl::if_<
|
||||
is_const<array_type>
|
||||
, typename array_type::const_reference
|
||||
, typename array_type::reference
|
||||
>::type
|
||||
type;
|
||||
|
||||
static type
|
||||
call(Iterator const & it)
|
||||
{
|
||||
return it.array[Iterator::index::value];
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Iterator, typename N>
|
||||
struct advance
|
||||
{
|
||||
typedef typename Iterator::index index;
|
||||
typedef typename Iterator::array_type array_type;
|
||||
typedef std_array_iterator<array_type, index::value + N::value> type;
|
||||
|
||||
static type
|
||||
call(Iterator const& i)
|
||||
{
|
||||
return type(i.array);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Iterator>
|
||||
struct next : advance<Iterator, mpl::int_<1> > {};
|
||||
|
||||
template <typename Iterator>
|
||||
struct prior : advance<Iterator, mpl::int_<-1> > {};
|
||||
|
||||
template <typename I1, typename I2>
|
||||
struct distance : mpl::minus<typename I2::index, typename I1::index>
|
||||
{
|
||||
typedef typename
|
||||
mpl::minus<
|
||||
typename I2::index, typename I1::index
|
||||
>::type
|
||||
type;
|
||||
|
||||
static type
|
||||
call(I1 const&, I2 const&)
|
||||
{
|
||||
return type();
|
||||
}
|
||||
};
|
||||
|
||||
BOOST_DELETED_FUNCTION(std_array_iterator& operator=(std_array_iterator const&))
|
||||
};
|
||||
}}
|
||||
|
||||
#endif
|
52
include/boost/fusion/adapted/std_array/tag_of.hpp
Normal file
52
include/boost/fusion/adapted/std_array/tag_of.hpp
Normal file
@ -0,0 +1,52 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_STD_ARRAY_TAG_OF_01062013_1700)
|
||||
#define BOOST_FUSION_STD_ARRAY_TAG_OF_01062013_1700
|
||||
|
||||
#include <boost/fusion/support/tag_of_fwd.hpp>
|
||||
#include <array>
|
||||
#include <cstddef>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct std_array_tag;
|
||||
struct fusion_sequence_tag;
|
||||
|
||||
namespace traits
|
||||
{
|
||||
template<typename T, std::size_t N>
|
||||
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
|
||||
struct tag_of<std::array<T,N>, void >
|
||||
#else
|
||||
struct tag_of<std::array<T,N> >
|
||||
#endif
|
||||
{
|
||||
typedef std_array_tag type;
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
namespace boost { namespace mpl
|
||||
{
|
||||
template<typename>
|
||||
struct sequence_tag;
|
||||
|
||||
template<typename T, std::size_t N>
|
||||
struct sequence_tag<std::array<T,N> >
|
||||
{
|
||||
typedef fusion::fusion_sequence_tag type;
|
||||
};
|
||||
|
||||
template<typename T, std::size_t N>
|
||||
struct sequence_tag<std::array<T,N> const>
|
||||
{
|
||||
typedef fusion::fusion_sequence_tag type;
|
||||
};
|
||||
}}
|
||||
|
||||
#endif
|
@ -7,26 +7,26 @@
|
||||
#if !defined(BOOST_FUSION_BUILD_STD_TUPLE_05292014_0100)
|
||||
#define BOOST_FUSION_BUILD_STD_TUPLE_05292014_0100
|
||||
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/index_sequence.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <tuple>
|
||||
#include <cstddef>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename First, typename Last
|
||||
, bool is_empty = result_of::equal_to<First, Last>::value
|
||||
>
|
||||
template <typename First, typename Last,
|
||||
bool is_empty = result_of::equal_to<First, Last>::value>
|
||||
struct build_std_tuple;
|
||||
|
||||
template <typename First, typename Last>
|
||||
struct build_std_tuple<First, Last, true>
|
||||
{
|
||||
typedef std::tuple<> type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(First const&, Last const&)
|
||||
@ -35,35 +35,18 @@ namespace boost { namespace fusion { namespace detail
|
||||
}
|
||||
};
|
||||
|
||||
template <int ...> struct indexed_tuple { };
|
||||
|
||||
template <int, typename = indexed_tuple<>>
|
||||
struct make_indexed_tuple;
|
||||
|
||||
template <int Head, int ...Tail>
|
||||
struct make_indexed_tuple<Head, indexed_tuple<Tail...>>
|
||||
{
|
||||
typedef typename
|
||||
boost::mpl::eval_if_c<
|
||||
(Head == 0),
|
||||
boost::mpl::identity<indexed_tuple<Tail...>>,
|
||||
make_indexed_tuple<Head - 1, indexed_tuple<Head - 1, Tail...>>
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
|
||||
template <typename T, typename Rest>
|
||||
struct push_front_std_tuple;
|
||||
|
||||
template <typename T, typename ...Rest>
|
||||
struct push_front_std_tuple<T, std::tuple<Rest...>>
|
||||
struct push_front_std_tuple<T, std::tuple<Rest...> >
|
||||
{
|
||||
typedef std::tuple<T, Rest...> type;
|
||||
|
||||
template <int ...I>
|
||||
template <std::size_t ...I>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
indexed_call(T const& first, std::tuple<Rest...> const& rest, indexed_tuple<I...>)
|
||||
indexed_call(T const& first, std::tuple<Rest...> const& rest, index_sequence<I...>)
|
||||
{
|
||||
return type(first, std::get<I>(rest)...);
|
||||
}
|
||||
@ -72,7 +55,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
static type
|
||||
call(T const& first, std::tuple<Rest...> const& rest)
|
||||
{
|
||||
typedef typename make_indexed_tuple<sizeof...(Rest)>::type gen;
|
||||
typedef typename make_index_sequence<sizeof...(Rest)>::type gen;
|
||||
return indexed_call(first, rest, gen());
|
||||
}
|
||||
};
|
||||
|
@ -13,11 +13,8 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/comparison/less.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||
@ -44,11 +41,11 @@
|
||||
NAME_SEQ, \
|
||||
IS_VIEW, \
|
||||
I, \
|
||||
PREFIX, \
|
||||
BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR(ATTRIBUTE), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
|
||||
BOOST_PP_IF(BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE),3), 1, 0)) \
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE),3)) \
|
||||
\
|
||||
template< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
|
||||
|
@ -12,13 +12,6 @@
|
||||
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_0(X, Y, Z) \
|
||||
(X, obj.Y, Z) BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_1
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_1(X, Y, Z) \
|
||||
(X, obj.Y, Z) BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_0
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_0_END
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_1_END
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS( \
|
||||
WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
|
||||
\
|
||||
@ -27,9 +20,7 @@
|
||||
\
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_AS_VIEW( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \
|
||||
BOOST_PP_CAT( \
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_0 ATTRIBUTES, \
|
||||
_END))
|
||||
ATTRIBUTES)
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS( \
|
||||
|
@ -14,13 +14,10 @@
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/comparison/less.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/remove_const.hpp>
|
||||
#include <boost/preprocessor/seq/seq.hpp>
|
||||
#include <boost/preprocessor/variadic/to_seq.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/extension.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||
@ -43,13 +40,11 @@
|
||||
NAME_SEQ, \
|
||||
IS_VIEW, \
|
||||
I, \
|
||||
BOOST_PP_IF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_PP_IIF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR(ATTRIBUTE), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
|
||||
BOOST_PP_IF( \
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), 2) \
|
||||
, 1, 0))
|
||||
BOOST_PP_LESS( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), 2))
|
||||
|
||||
|
||||
|
||||
@ -61,27 +56,30 @@
|
||||
(1)NAME_SEQ, \
|
||||
struct_tag, \
|
||||
0, \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(__VA_ARGS__), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER( \
|
||||
BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_C)
|
||||
|
||||
# define BOOST_FUSION_ADAPT_STRUCT(NAME, ...) \
|
||||
# define BOOST_FUSION_ADAPT_STRUCT(...) \
|
||||
BOOST_FUSION_ADAPT_STRUCT_BASE( \
|
||||
(0), \
|
||||
(0)(NAME), \
|
||||
(0)(BOOST_PP_SEQ_HEAD(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
|
||||
struct_tag, \
|
||||
0, \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(__VA_ARGS__), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER( \
|
||||
BOOST_PP_SEQ_TAIL(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_C)
|
||||
|
||||
# define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ...) \
|
||||
# define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(...) \
|
||||
BOOST_FUSION_ADAPT_STRUCT_BASE( \
|
||||
(0), \
|
||||
(0)(NAME), \
|
||||
(0)(BOOST_PP_SEQ_HEAD(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
|
||||
struct_tag, \
|
||||
1, \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(__VA_ARGS__), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER( \
|
||||
BOOST_PP_SEQ_TAIL(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_C)
|
||||
|
||||
|
||||
#else // BOOST_PP_VARIADICS
|
||||
|
||||
# define BOOST_FUSION_ADAPT_TPL_STRUCT( \
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
|
||||
#ifdef BOOST_PP_VARIADICS
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
|
||||
#define BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_0(X, Y, Z) \
|
||||
((X, Y, Z)) BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_1
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT( \
|
||||
TEMPLATE_PARAMS_SEQ, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
|
||||
|
@ -8,8 +8,7 @@
|
||||
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_AUTO_HPP
|
||||
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_AUTO_HPP
|
||||
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
|
||||
#define BOOST_FUSION_ADAPT_AUTO BOOST_PP_EMPTY()
|
||||
#define BOOST_FUSION_ADAPT_AUTO auto
|
||||
#define BOOST_MPL_PP_TOKEN_EQUAL_auto(x) x
|
||||
|
||||
#endif
|
||||
|
@ -29,11 +29,14 @@
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
#include <boost/preprocessor/comparison/less.hpp>
|
||||
#include <boost/preprocessor/logical/not.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/mpl/tag.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
|
||||
#include <boost/typeof/typeof.hpp>
|
||||
|
||||
@ -64,7 +67,7 @@
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# define BOOST_FUSION_ATTRIBUTE_TYPEOF( \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
|
||||
TEMPLATE_PARAMS_SEQ) \
|
||||
@ -73,7 +76,7 @@
|
||||
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||
typedef \
|
||||
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ), typename, ) \
|
||||
BOOST_TYPEOF( PREFIX() obj.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
|
||||
BOOST_TYPEOF( PREFIX() obj.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
|
||||
0, ATTRIBUTE)) \
|
||||
type; \
|
||||
}; \
|
||||
@ -84,12 +87,12 @@
|
||||
|
||||
#else
|
||||
# define BOOST_FUSION_ATTRIBUTE_TYPEOF( \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
struct deduced_attr_type { \
|
||||
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
|
||||
typedef BOOST_TYPEOF( \
|
||||
PREFIX() obj.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE)) \
|
||||
PREFIX() obj.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, 0, ATTRIBUTE)) \
|
||||
type; \
|
||||
}; \
|
||||
\
|
||||
@ -100,9 +103,9 @@
|
||||
#endif
|
||||
|
||||
#define BOOST_FUSION_ATTRIBUTE_GIVENTYPE( \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPLE_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
|
||||
typedef \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) attribute_type;
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, 0, ATTRIBUTE) attribute_type;
|
||||
|
||||
|
||||
#ifdef BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
|
||||
@ -159,7 +162,7 @@
|
||||
|
||||
#define BOOST_FUSION_ADAPT_STRUCT_C_BASE( \
|
||||
TEMPLATE_PARAMS_SEQ,NAME_SEQ,IS_VIEW, \
|
||||
I,PREFIX,ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE, \
|
||||
I,PREFIX,ATTRIBUTE,ATTRIBUTE_TUPLE_SIZE, \
|
||||
DEDUCE_TYPE) \
|
||||
\
|
||||
template< \
|
||||
@ -174,7 +177,7 @@
|
||||
BOOST_FUSION_ATTRIBUTE_TYPEOF, BOOST_FUSION_ATTRIBUTE_GIVENTYPE)( \
|
||||
NAME_SEQ, \
|
||||
ATTRIBUTE, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
PREFIX, \
|
||||
TEMPLATE_PARAMS_SEQ) \
|
||||
\
|
||||
@ -201,8 +204,8 @@
|
||||
call(Seq& seq) \
|
||||
{ \
|
||||
return seq.PREFIX() \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
|
||||
BOOST_PP_IF(DEDUCE_TYPE, 0, 1), ATTRIBUTE); \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
|
||||
BOOST_PP_NOT(DEDUCE_TYPE), ATTRIBUTE); \
|
||||
} \
|
||||
}; \
|
||||
}; \
|
||||
@ -222,9 +225,8 @@
|
||||
call() \
|
||||
{ \
|
||||
return BOOST_PP_STRINGIZE( \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
|
||||
BOOST_PP_IF(DEDUCE_TYPE, 0, 1), \
|
||||
ATTRIBUTE)); \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE, \
|
||||
BOOST_PP_NOT(DEDUCE_TYPE), ATTRIBUTE)); \
|
||||
} \
|
||||
};
|
||||
|
||||
@ -274,7 +276,7 @@ namespace boost
|
||||
struct struct_is_view< \
|
||||
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
|
||||
> \
|
||||
: mpl::BOOST_PP_IF(IS_VIEW,true_,false_) \
|
||||
: mpl::BOOST_PP_IIF(IS_VIEW,true_,false_) \
|
||||
{}; \
|
||||
} \
|
||||
} \
|
||||
|
@ -10,13 +10,16 @@
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp>
|
||||
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
#include <boost/preprocessor/arithmetic/sub.hpp>
|
||||
#include <boost/mpl/aux_/preprocessor/token_equal.hpp>
|
||||
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
#include <boost/preprocessor/variadic/size.hpp>
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
#include <boost/preprocessor/variadic/elem.hpp>
|
||||
|
||||
#if BOOST_PP_VARIADICS
|
||||
|
||||
@ -29,7 +32,14 @@
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_WRAP_ATTR(...) \
|
||||
((BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)))
|
||||
BOOST_PP_IIF( \
|
||||
BOOST_MPL_PP_TOKEN_EQUAL(auto, BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__)), \
|
||||
((2, \
|
||||
(BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__), \
|
||||
BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__)))), \
|
||||
((BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), \
|
||||
(__VA_ARGS__))) \
|
||||
)
|
||||
|
||||
#else // BOOST_PP_VARIADICS
|
||||
|
||||
@ -43,7 +53,7 @@
|
||||
BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0
|
||||
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_WRAP_ATTR(X, Y, Z) \
|
||||
BOOST_PP_IF(BOOST_PP_IS_EMPTY(X), \
|
||||
BOOST_PP_IIF(BOOST_MPL_PP_TOKEN_EQUAL(auto, X), \
|
||||
((2, (Y,Z))), \
|
||||
((3, (X,Y,Z))) \
|
||||
)
|
||||
@ -57,7 +67,7 @@
|
||||
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) \
|
||||
BOOST_PP_TUPLE_ELEM( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
|
||||
BOOST_PP_SUB(BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), 1), \
|
||||
BOOST_PP_DEC(BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE)), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR(ATTRIBUTE))
|
||||
|
||||
#endif
|
||||
|
@ -9,15 +9,21 @@
|
||||
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_BASE_ATTR_FILLER_HPP
|
||||
|
||||
#include <boost/config.hpp>
|
||||
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp>
|
||||
|
||||
#include <boost/preprocessor/empty.hpp>
|
||||
#include <boost/preprocessor/tuple/size.hpp>
|
||||
#include <boost/mpl/aux_/preprocessor/token_equal.hpp>
|
||||
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
#include <boost/preprocessor/control/iif.hpp>
|
||||
#include <boost/preprocessor/control/expr_iif.hpp>
|
||||
#include <boost/preprocessor/logical/compl.hpp>
|
||||
#include <boost/preprocessor/tuple/elem.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
#include <boost/preprocessor/variadic/to_seq.hpp>
|
||||
#include <boost/preprocessor/seq/for_each.hpp>
|
||||
#include <boost/preprocessor/seq/push_front.hpp>
|
||||
#include <boost/preprocessor/facilities/expand.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
|
||||
|
||||
#define BOOST_FUSION_ADAPT_STRUCT_FILLER_0(X, Y) \
|
||||
@ -32,7 +38,7 @@
|
||||
#define BOOST_FUSION_ADAPT_STRUCT_FILLER_1_END
|
||||
|
||||
#define BOOST_FUSION_ADAPT_STRUCT_WRAP_ATTR(X, Y) \
|
||||
BOOST_PP_IF(BOOST_PP_IS_EMPTY(X), \
|
||||
BOOST_PP_IIF(BOOST_MPL_PP_TOKEN_EQUAL(auto, BOOST_PP_EXPAND(X)), \
|
||||
((1, (Y))), \
|
||||
((2, (X,Y))) \
|
||||
)
|
||||
@ -47,16 +53,16 @@
|
||||
#if BOOST_PP_VARIADICS
|
||||
|
||||
# define BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER_OP(r, unused, elem) \
|
||||
BOOST_PP_IF(BOOST_FUSION_PP_IS_SEQ(elem), \
|
||||
BOOST_PP_CAT( BOOST_FUSION_ADAPT_STRUCT_FILLER_0 elem ,_END), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAP_ATTR(BOOST_FUSION_ADAPT_AUTO, \
|
||||
elem))
|
||||
BOOST_PP_IIF(BOOST_FUSION_PP_IS_SEQ(elem), \
|
||||
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 elem ,_END), \
|
||||
BOOST_PP_EXPR_IIF(BOOST_PP_COMPL(BOOST_PP_IS_EMPTY(elem)), \
|
||||
BOOST_FUSION_ADAPT_STRUCT_WRAP_ATTR(auto, elem)))
|
||||
|
||||
# define BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(...) \
|
||||
# define BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(VA_ARGS_SEQ) \
|
||||
BOOST_PP_SEQ_PUSH_FRONT( \
|
||||
BOOST_PP_SEQ_FOR_EACH( \
|
||||
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER_OP, \
|
||||
unused, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)), \
|
||||
unused, VA_ARGS_SEQ), \
|
||||
(0,0))
|
||||
|
||||
#endif // BOOST_PP_VARIADICS
|
||||
|
@ -8,6 +8,8 @@
|
||||
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_IS_TPL_HPP
|
||||
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_ADAPT_IS_TPL_HPP
|
||||
|
||||
#include <boost/preprocessor/seq/seq.hpp>
|
||||
|
||||
#define BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ) \
|
||||
BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ)
|
||||
|
||||
|
@ -10,19 +10,18 @@
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/fusion/iterator/advance.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
|
||||
#include <boost/fusion/adapted/struct/detail/namespace.hpp>
|
||||
#include <boost/preprocessor/inc.hpp>
|
||||
#include <boost/preprocessor/if.hpp>
|
||||
#include <boost/preprocessor/expr_if.hpp>
|
||||
#include <boost/preprocessor/dec.hpp>
|
||||
#include <boost/preprocessor/logical/not.hpp>
|
||||
#include <boost/preprocessor/punctuation/comma_if.hpp>
|
||||
#include <boost/preprocessor/comparison/equal.hpp>
|
||||
#include <boost/preprocessor/seq/seq.hpp>
|
||||
#include <boost/preprocessor/seq/for_each.hpp>
|
||||
#include <boost/preprocessor/seq/for_each_i.hpp>
|
||||
@ -41,15 +40,65 @@
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_FILLER_0_END
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_FILLER_1_END
|
||||
|
||||
#ifdef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_COMMA_IF(I) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)( \
|
||||
other_self.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE))
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)( \
|
||||
other_self.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE))
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(self_type const& other_self) \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{}
|
||||
|
||||
// Use templated version instead.
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_COPY_ASSIGN_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I_, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)= \
|
||||
other.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE);
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_COPY_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
self_type& operator=(self_type const& other) \
|
||||
{ \
|
||||
BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_COPY_ASSIGN_FILLER_I, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
\
|
||||
return *this; \
|
||||
}
|
||||
|
||||
#else // BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED NAME(self_type const&) = default;
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_COPY_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED self_type& operator=(self_type const&) = default;
|
||||
|
||||
#endif // BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPEL_SIZE, I_, ATTRIBUTE) \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I_, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_EXPR_IF( \
|
||||
I_, \
|
||||
@ -62,14 +111,14 @@
|
||||
boost::fusion::next(BOOST_PP_CAT(i,BOOST_PP_DEC(I_))); \
|
||||
) \
|
||||
\
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)= \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)= \
|
||||
boost::fusion::deref(BOOST_PP_CAT(i,I_));
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
self_type& \
|
||||
operator=(Seq const& seq) \
|
||||
{ \
|
||||
@ -81,125 +130,200 @@
|
||||
BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
\
|
||||
return *this; \
|
||||
}
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_ATTR_I(R, ATTRIBUTE_TUPEL_SIZE, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE);
|
||||
#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_CTOR(NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_ASSIGN_OP(ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#else // BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) \
|
||||
|| BOOST_WORKAROUND(BOOST_GCC, < 40500) \
|
||||
|| BOOST_WORKAROUND(BOOST_MSVC, == 1800)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_CTOR_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_COMMA_IF(I) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)( \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)(std::move( \
|
||||
other_self.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)))
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(self_type&& other_self) \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_MOVE_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{}
|
||||
|
||||
#else // BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED NAME(self_type&&) = default;
|
||||
|
||||
#endif // BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) \
|
||||
|| BOOST_WORKAROUND(BOOST_GCC, < 40600) \
|
||||
|| BOOST_WORKAROUND(BOOST_MSVC, == 1800)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_ASSIGN_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I_, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)=std::move( \
|
||||
other.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE));
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
self_type& operator=(self_type&& other) \
|
||||
{ \
|
||||
BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_MOVE_ASSIGN_FILLER_I, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
\
|
||||
return *this; \
|
||||
}
|
||||
|
||||
#else // BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_MOVE_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED self_type& operator=(self_type&&) = default;
|
||||
|
||||
#endif // BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
|
||||
|
||||
#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_ATTR_I(R, ATTRIBUTE_TUPLE_SIZE, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,0,ATTRIBUTE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE);
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_COMMA_IF(I) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)( \
|
||||
boost::fusion::deref(boost::fusion::advance_c<I>(boost::fusion::begin( \
|
||||
seq))))
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
, typename boost::disable_if< \
|
||||
boost::is_convertible< \
|
||||
Seq const& \
|
||||
, BOOST_PP_TUPLE_ELEM( \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
0, \
|
||||
BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
|
||||
> \
|
||||
>::type* =0
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_COMMA_IF(I) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)()
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)()
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_PP_SEQ_FOR_EACH_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_ATTR_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME() \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{} \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(self_type const& other_self) \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{} \
|
||||
BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
BOOST_FUSION_DEFINE_STRUCT_MOVE_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(Seq const& seq \
|
||||
BOOST_PP_IF( \
|
||||
BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
|
||||
BOOST_PP_TUPLE_EAT(2), \
|
||||
BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER)( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
) \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{} \
|
||||
\
|
||||
BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP(ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
|
||||
BOOST_FUSION_DEFINE_STRUCT_COPY_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
BOOST_FUSION_DEFINE_STRUCT_MOVE_ASSIGN_OP( \
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP(ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_1( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
explicit \
|
||||
NAME(boost::call_traits< \
|
||||
BOOST_PP_TUPLE_ELEM( \
|
||||
ATTRIBUTE_TUPEL_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
|
||||
ATTRIBUTE_TUPLE_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
|
||||
>::param_type arg) \
|
||||
: BOOST_PP_TUPLE_ELEM( \
|
||||
ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
|
||||
ATTRIBUTE_TUPLE_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
|
||||
{}
|
||||
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
explicit \
|
||||
NAME(typename boost::call_traits< \
|
||||
typename boost::fusion::detail::get_first_arg< \
|
||||
BOOST_PP_TUPLE_ELEM( \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
0, \
|
||||
BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
|
||||
, BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ) \
|
||||
>::type \
|
||||
>::param_type arg) \
|
||||
: BOOST_PP_TUPLE_ELEM( \
|
||||
ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
|
||||
ATTRIBUTE_TUPLE_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
|
||||
{}
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I( \
|
||||
R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_COMMA_IF(I) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)(BOOST_PP_CAT(_,I))
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,1,ATTRIBUTE)(BOOST_PP_CAT(_,I))
|
||||
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I(R, DATA, I, ATTRIBUTE) \
|
||||
\
|
||||
@ -215,14 +339,14 @@
|
||||
>::param_type BOOST_PP_CAT(_,I)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I, \
|
||||
( \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
|
||||
BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ) \
|
||||
), \
|
||||
@ -230,77 +354,64 @@
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{}
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I( \
|
||||
R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
|
||||
R, ATTRIBUTE_TUPLE_SIZE, I, ATTRIBUTE) \
|
||||
\
|
||||
BOOST_PP_COMMA_IF(I) \
|
||||
boost::call_traits< \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE) \
|
||||
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPLE_SIZE,0,ATTRIBUTE) \
|
||||
>::param_type BOOST_PP_CAT(_,I)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_N( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ)) \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I, \
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTE_TUPLE_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
{}
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR_N, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR_1)( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
|
||||
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N, \
|
||||
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1)( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_NONEMPTY_STRUCT_IMPL( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
|
||||
NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR( \
|
||||
NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE)
|
||||
NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(Seq const&) \
|
||||
{} \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
self_type& \
|
||||
operator=(Seq const& seq) \
|
||||
{ \
|
||||
return *this; \
|
||||
}
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_IMPL( \
|
||||
NAMESPACE_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAMESPACE_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
|
||||
\
|
||||
@ -311,35 +422,32 @@
|
||||
BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
|
||||
BOOST_FUSION_DEFINE_NONEMPTY_STRUCT_IMPL, \
|
||||
BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL)( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
}; \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_NONEMPTY_TPL_STRUCT_IMPL( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
|
||||
NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) \
|
||||
NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR( \
|
||||
TEMPLATE_PARAMS_SEQ, \
|
||||
NAME, \
|
||||
BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), \
|
||||
ATTRIBUTE_TUPEL_SIZE)
|
||||
ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_EMPTY_TPL_STRUCT_IMPL( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)
|
||||
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL( \
|
||||
TEMPLATE_PARAMS_SEQ, \
|
||||
NAMESPACE_SEQ, \
|
||||
NAME, \
|
||||
ATTRIBUTES_SEQ, \
|
||||
ATTRIBUTE_TUPEL_SIZE) \
|
||||
ATTRIBUTE_TUPLE_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
|
||||
\
|
||||
@ -354,7 +462,7 @@
|
||||
BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
|
||||
BOOST_FUSION_DEFINE_NONEMPTY_TPL_STRUCT_IMPL, \
|
||||
BOOST_FUSION_DEFINE_EMPTY_TPL_STRUCT_IMPL)( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)\
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPLE_SIZE)\
|
||||
}; \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/preprocessor/comma_if.hpp>
|
||||
#include <boost/preprocessor/facilities/is_empty.hpp>
|
||||
#include <boost/preprocessor/facilities/empty.hpp>
|
||||
#include <boost/preprocessor/repeat.hpp>
|
||||
#include <boost/preprocessor/seq/for_each_i.hpp>
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
@ -62,11 +62,10 @@
|
||||
~, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
|
||||
#define BOOST_FUSION_IGNORE_1(ARG1)
|
||||
#define BOOST_FUSION_IGNORE_2(ARG1, ARG2)
|
||||
|
||||
#define BOOST_FUSION_MAKE_COPY_CONSTRUCTOR(NAME, ATTRIBUTES_SEQ) \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(BOOST_PP_SEQ_FOR_EACH_I( \
|
||||
BOOST_FUSION_MAKE_CONST_REF_PARAM, \
|
||||
~, \
|
||||
@ -337,7 +336,7 @@
|
||||
typedef boost::mpl::int_<N> index; \
|
||||
typedef boost_fusion_detail_Seq sequence_type; \
|
||||
\
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq) \
|
||||
: seq_(seq) \
|
||||
BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES( \
|
||||
@ -425,17 +424,10 @@
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
|
||||
\
|
||||
/* Note: second BOOST_PP_IF is necessary to avoid MSVC warning when */ \
|
||||
/* calling BOOST_FUSION_IGNORE_1 with no arguments. */ \
|
||||
NAME() \
|
||||
BOOST_PP_IF( \
|
||||
ATTRIBUTES_SEQ_SIZE, \
|
||||
BOOST_PP_IF(ATTRIBUTES_SEQ_SIZE, \
|
||||
BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \
|
||||
BOOST_FUSION_IGNORE_1) \
|
||||
(BOOST_PP_IF( \
|
||||
ATTRIBUTES_SEQ_SIZE, \
|
||||
ATTRIBUTES_SEQ, \
|
||||
0)) \
|
||||
BOOST_PP_EMPTY)(ATTRIBUTES_SEQ) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
|
@ -13,8 +13,6 @@
|
||||
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_PREPROCESSOR_IS_SEQ_HPP
|
||||
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_PREPROCESSOR_IS_SEQ_HPP
|
||||
|
||||
#include <boost/preprocessor/seq/size.hpp>
|
||||
#include <boost/preprocessor/arithmetic/dec.hpp>
|
||||
#include <boost/preprocessor/punctuation/paren.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/config/config.hpp>
|
||||
|
@ -28,8 +28,7 @@
|
||||
\
|
||||
WRAPPED_TYPE& obj; \
|
||||
\
|
||||
private: \
|
||||
NAME& operator= (NAME const&); \
|
||||
BOOST_DELETED_FUNCTION(NAME& operator= (NAME const&)) \
|
||||
}; \
|
||||
\
|
||||
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -10,8 +11,6 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/accumulate_fwd.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -27,11 +26,7 @@ namespace boost { namespace fusion
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence, State const, F>
|
||||
>::type
|
||||
inline typename result_of::accumulate<Sequence, State const, F>::type
|
||||
accumulate(Sequence& seq, State const& state, F f)
|
||||
{
|
||||
return fusion::fold(seq, state, f);
|
||||
@ -39,11 +34,7 @@ namespace boost { namespace fusion
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence const, State const, F>
|
||||
>::type
|
||||
inline typename result_of::accumulate<Sequence const, State const, F>::type
|
||||
accumulate(Sequence const& seq, State const& state, F f)
|
||||
{
|
||||
return fusion::fold(seq, state, f);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2011 Eric Niebler
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -8,8 +9,6 @@
|
||||
#define BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -21,20 +20,12 @@ namespace boost { namespace fusion
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence, State const, F>
|
||||
>::type
|
||||
inline typename result_of::accumulate<Sequence, State const, F>::type
|
||||
accumulate(Sequence& seq, State const& state, F f);
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence const, State const, F>
|
||||
>::type
|
||||
inline typename result_of::accumulate<Sequence const, State const, F>::type
|
||||
accumulate(Sequence const& seq, State const& state, F f);
|
||||
}}
|
||||
|
||||
|
@ -2,12 +2,15 @@
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2006 Dan Marsden
|
||||
Copyright (c) 2009-2010 Christopher Schmidt
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
|
||||
#define FUSION_HASH #
|
||||
|
||||
#ifdef BOOST_FUSION_REVERSE_FOLD
|
||||
# ifdef BOOST_FUSION_ITER_FOLD
|
||||
# define BOOST_FUSION_FOLD_NAME reverse_iter_fold
|
||||
@ -41,378 +44,193 @@
|
||||
# define BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(IT) fusion::deref(IT)
|
||||
#endif
|
||||
|
||||
#if (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||
FUSION_HASH if BOOST_WORKAROUND BOOST_PREVENT_MACRO_SUBSTITUTION (BOOST_MSVC, < 1500)
|
||||
FUSION_HASH define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
|
||||
FUSION_HASH else
|
||||
FUSION_HASH define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
|
||||
FUSION_HASH endif
|
||||
#else
|
||||
# if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
|
||||
# else
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
|
||||
# endif
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
template<typename State, typename It, typename F>
|
||||
struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)
|
||||
: fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
typename add_reference<typename add_const<State>::type>::type,
|
||||
BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(It))
|
||||
>
|
||||
template<int SeqSize, typename It, typename State, typename F, typename = void
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH if BOOST_WORKAROUND BOOST_PREVENT_MACRO_SUBSTITUTION (BOOST_MSVC, < 1500)
|
||||
#endif
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, < 1500) || \
|
||||
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||
// Dirty hack: those compilers cannot choose exactly one partial specialization.
|
||||
, bool = SeqSize == 0
|
||||
#endif
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH endif
|
||||
#endif
|
||||
>
|
||||
struct BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)
|
||||
{};
|
||||
|
||||
template<typename Result,int N>
|
||||
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)
|
||||
template<typename It, typename State, typename F>
|
||||
struct BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)<0,It,State,F
|
||||
, typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH if BOOST_WORKAROUND BOOST_PREVENT_MACRO_SUBSTITUTION (BOOST_MSVC, < 1500)
|
||||
#endif
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, < 1500) || \
|
||||
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||
, true
|
||||
#endif
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH endif
|
||||
#endif
|
||||
>
|
||||
{
|
||||
template<typename State3, typename It3, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_3(State3 const& state3,It3 const& it3,F& f)
|
||||
{
|
||||
return BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
Result
|
||||
, N-4
|
||||
>::call(
|
||||
f(state3,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it3)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it3),
|
||||
f);
|
||||
}
|
||||
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return call_3(
|
||||
f(state2,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it2)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it2),
|
||||
f);
|
||||
}
|
||||
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it1),
|
||||
f);
|
||||
}
|
||||
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0),
|
||||
f);
|
||||
}
|
||||
typedef typename State::type type;
|
||||
};
|
||||
|
||||
template<typename Result>
|
||||
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,3>
|
||||
{
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return f(state2,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it2));
|
||||
}
|
||||
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it1),
|
||||
f);
|
||||
}
|
||||
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Result>
|
||||
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,2>
|
||||
{
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return f(state1,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it1));
|
||||
}
|
||||
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0)),
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Result>
|
||||
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,1>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return f(state,
|
||||
BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it0));
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Result>
|
||||
struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<Result,0>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const&, F)
|
||||
{
|
||||
return static_cast<Result>(state);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename StateRef, typename It0, typename F, int N>
|
||||
struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)
|
||||
{
|
||||
typedef typename
|
||||
BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
rest2;
|
||||
typedef typename
|
||||
result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<it1>::type
|
||||
it2;
|
||||
typedef typename
|
||||
BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
rest2
|
||||
, it2
|
||||
, F
|
||||
>::type
|
||||
rest3;
|
||||
typedef typename
|
||||
result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<it2>::type
|
||||
it3;
|
||||
|
||||
typedef typename
|
||||
BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
typename BOOST_PP_CAT(
|
||||
BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
rest3
|
||||
, it3
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
|
||||
it3
|
||||
>::type
|
||||
, F
|
||||
, N-4
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 3
|
||||
>
|
||||
{
|
||||
typedef typename
|
||||
BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
|
||||
typedef typename
|
||||
BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
typename BOOST_PP_CAT(
|
||||
BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
|
||||
it1 const
|
||||
>::type const
|
||||
, F
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 2
|
||||
>
|
||||
: BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
typename BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
|
||||
It0 const
|
||||
>::type const
|
||||
, F
|
||||
>
|
||||
{};
|
||||
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 1
|
||||
>
|
||||
: BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME, _lvalue_state)<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>
|
||||
{};
|
||||
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 0
|
||||
>
|
||||
{
|
||||
typedef StateRef type;
|
||||
};
|
||||
|
||||
template<typename StateRef, typename It0, typename F, int SeqSize>
|
||||
struct BOOST_PP_CAT(result_of_first_unrolled,BOOST_FUSION_FOLD_NAME)
|
||||
{
|
||||
typedef typename
|
||||
BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
typename fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
StateRef,
|
||||
BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(
|
||||
It0 const)
|
||||
)
|
||||
>::type
|
||||
, typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<
|
||||
It0 const
|
||||
>::type
|
||||
, F
|
||||
, SeqSize-1
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
|
||||
template<int SeqSize, typename StateRef, typename Seq, typename F>
|
||||
struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)
|
||||
{
|
||||
typedef typename
|
||||
BOOST_PP_CAT(
|
||||
result_of_first_unrolled,BOOST_FUSION_FOLD_NAME)<
|
||||
StateRef
|
||||
, BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(
|
||||
typename result_of::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION<Seq>::type
|
||||
template<int SeqSize, typename It, typename State, typename F>
|
||||
struct BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)<SeqSize,It,State,F
|
||||
, typename boost::enable_if_has_type<
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH if BOOST_WORKAROUND BOOST_PREVENT_MACRO_SUBSTITUTION (BOOST_MSVC, >= 1500)
|
||||
#endif
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1500) || \
|
||||
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||
// Following SFINAE enables to avoid MSVC 9's partial specialization
|
||||
// ambiguous bug but MSVC 8 don't compile, and moreover MSVC 8 style
|
||||
// workaround won't work with MSVC 9.
|
||||
typename boost::disable_if_c<SeqSize == 0, State>::type::type
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH else
|
||||
BOOST_FUSION_FOLD_IMPL_ENABLER(State)
|
||||
#endif
|
||||
#else
|
||||
BOOST_FUSION_FOLD_IMPL_ENABLER(State)
|
||||
#endif
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH endif
|
||||
#endif
|
||||
>::type
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH if BOOST_WORKAROUND BOOST_PREVENT_MACRO_SUBSTITUTION (BOOST_MSVC, < 1500)
|
||||
#endif
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, < 1500) || \
|
||||
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||
, false
|
||||
#endif
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH endif
|
||||
#endif
|
||||
>
|
||||
: BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)<
|
||||
SeqSize-1
|
||||
, typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(It const)
|
||||
)
|
||||
, F
|
||||
, SeqSize
|
||||
>::type
|
||||
type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(StateRef state, Seq& seq, F f)
|
||||
{
|
||||
typedef
|
||||
BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)<
|
||||
type
|
||||
, SeqSize
|
||||
>
|
||||
unrolled_impl;
|
||||
|
||||
return unrolled_impl::call(
|
||||
state,
|
||||
BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq)),
|
||||
f);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename StateRef, typename Seq, typename F>
|
||||
struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<0,StateRef,Seq,F>
|
||||
{
|
||||
typedef StateRef type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static StateRef
|
||||
call(StateRef state, Seq&, F)
|
||||
{
|
||||
return static_cast<StateRef>(state);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Seq, typename State, typename F, bool IsSegmented>
|
||||
struct BOOST_PP_CAT(result_of_, BOOST_FUSION_FOLD_NAME)
|
||||
: BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<
|
||||
result_of::size<Seq>::value
|
||||
, typename add_reference<
|
||||
typename add_const<State>::type
|
||||
>::type
|
||||
, Seq
|
||||
>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
|
||||
template<typename It, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)<
|
||||
0
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
BOOST_PP_CAT(it_,BOOST_FUSION_FOLD_NAME)(mpl::int_<0>, It const&, typename State::type state, F&)
|
||||
{
|
||||
return state;
|
||||
}
|
||||
|
||||
template<typename It, typename State, typename F, int SeqSize>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename lazy_enable_if_c<
|
||||
SeqSize != 0
|
||||
, BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)<
|
||||
SeqSize
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
>
|
||||
>::type
|
||||
BOOST_PP_CAT(it_,BOOST_FUSION_FOLD_NAME)(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
|
||||
{
|
||||
return BOOST_PP_CAT(it_,BOOST_FUSION_FOLD_NAME)<
|
||||
typename result_of::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM(It const)
|
||||
)
|
||||
>
|
||||
, F
|
||||
>(
|
||||
mpl::int_<SeqSize-1>()
|
||||
, fusion::BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION(it)
|
||||
, f(state, BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM(it))
|
||||
, f
|
||||
);
|
||||
}
|
||||
|
||||
template<typename Seq, typename State, typename F
|
||||
, bool = traits::is_sequence<Seq>::value
|
||||
, bool = traits::is_segmented<Seq>::value>
|
||||
struct BOOST_PP_CAT(result_of_,BOOST_FUSION_FOLD_NAME)
|
||||
{};
|
||||
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct BOOST_PP_CAT(result_of_,BOOST_FUSION_FOLD_NAME)<Seq, State, F, true, false>
|
||||
: BOOST_PP_CAT(result_of_it_,BOOST_FUSION_FOLD_NAME)<
|
||||
result_of::size<Seq>::value
|
||||
, BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(
|
||||
typename result_of::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION<Seq>::type
|
||||
)
|
||||
, add_reference<State>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename BOOST_PP_CAT(result_of_,BOOST_FUSION_FOLD_NAME)<Seq, State, F>::type
|
||||
BOOST_FUSION_FOLD_NAME(Seq& seq, State& state, F& f)
|
||||
{
|
||||
return BOOST_PP_CAT(it_,BOOST_FUSION_FOLD_NAME)<
|
||||
BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(
|
||||
typename result_of::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION<Seq>::type
|
||||
)
|
||||
, add_reference<State>
|
||||
, F
|
||||
>(
|
||||
typename result_of::size<Seq>::type()
|
||||
, BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(
|
||||
fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq)
|
||||
)
|
||||
, state
|
||||
, f
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct BOOST_FUSION_FOLD_NAME
|
||||
: detail::BOOST_PP_CAT(result_of_, BOOST_FUSION_FOLD_NAME)<
|
||||
Seq
|
||||
, State
|
||||
, F
|
||||
, traits::is_segmented<Seq>::type::value
|
||||
>
|
||||
: detail::BOOST_PP_CAT(result_of_,BOOST_FUSION_FOLD_NAME)<Seq, State, F>
|
||||
{};
|
||||
}
|
||||
|
||||
@ -425,10 +243,7 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
BOOST_FUSION_FOLD_NAME(Seq& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::BOOST_FUSION_FOLD_NAME<Seq,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::BOOST_FUSION_FOLD_NAME<Seq, State const, F>(seq, state, f);
|
||||
}
|
||||
|
||||
template<typename Seq, typename State, typename F>
|
||||
@ -440,47 +255,40 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
BOOST_FUSION_FOLD_NAME(Seq const& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::BOOST_FUSION_FOLD_NAME<Seq const,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::BOOST_FUSION_FOLD_NAME<Seq const, State const, F>(seq, state, f);
|
||||
}
|
||||
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::BOOST_FUSION_FOLD_NAME<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
BOOST_FUSION_FOLD_NAME(Seq& seq, State& state, F f)
|
||||
{
|
||||
return result_of::BOOST_FUSION_FOLD_NAME<Seq,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::BOOST_FUSION_FOLD_NAME<Seq, State, F>(seq, state, f);
|
||||
}
|
||||
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::BOOST_FUSION_FOLD_NAME<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
BOOST_FUSION_FOLD_NAME(Seq const& seq, State& state, F f)
|
||||
{
|
||||
return result_of::BOOST_FUSION_FOLD_NAME<Seq const,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::BOOST_FUSION_FOLD_NAME<Seq const, State, F>(seq, state, f);
|
||||
}
|
||||
}}
|
||||
|
||||
#undef BOOST_FUSION_FOLD_NAME
|
||||
#undef BOOST_FUSION_FOLD_IMPL_ENABLER
|
||||
#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION
|
||||
#undef BOOST_FUSION_FOLD_IMPL_NEXT_IT_FUNCTION
|
||||
#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM
|
||||
#undef BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM
|
||||
#undef BOOST_FUSION_FOLD_IMPL_INVOKE_IT_META_TRANSFORM
|
||||
#undef BOOST_FUSION_FOLD_IMPL_INVOKE_IT_TRANSFORM
|
||||
#undef FUSION_HASH
|
||||
|
@ -30,7 +30,7 @@ namespace detail
|
||||
template <typename First, typename Last, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_linear(First const& first, Last const& last, F const& f, mpl::false_)
|
||||
for_each_linear(First const& first, Last const& last, F& f, mpl::false_)
|
||||
{
|
||||
f(*first);
|
||||
detail::for_each_linear(fusion::next(first), last, f,
|
||||
@ -41,7 +41,7 @@ namespace detail
|
||||
template <typename Sequence, typename F, typename Tag>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_dispatch(Sequence& seq, F const& f, Tag)
|
||||
for_each_dispatch(Sequence& seq, F& f, Tag)
|
||||
{
|
||||
detail::for_each_linear(
|
||||
fusion::begin(seq)
|
||||
@ -57,7 +57,7 @@ namespace detail
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
static void call(I0 const& i0, F& f)
|
||||
{
|
||||
f(*i0);
|
||||
typedef typename result_of::next<I0>::type I1;
|
||||
@ -78,7 +78,7 @@ namespace detail
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
static void call(I0 const& i0, F& f)
|
||||
{
|
||||
f(*i0);
|
||||
typedef typename result_of::next<I0>::type I1;
|
||||
@ -95,7 +95,7 @@ namespace detail
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
static void call(I0 const& i0, F& f)
|
||||
{
|
||||
f(*i0);
|
||||
typedef typename result_of::next<I0>::type I1;
|
||||
@ -109,7 +109,7 @@ namespace detail
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
static void call(I0 const& i0, F& f)
|
||||
{
|
||||
f(*i0);
|
||||
}
|
||||
@ -128,7 +128,7 @@ namespace detail
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_dispatch(Sequence& seq, F const& f, random_access_traversal_tag)
|
||||
for_each_dispatch(Sequence& seq, F& f, random_access_traversal_tag)
|
||||
{
|
||||
typedef typename result_of::begin<Sequence>::type begin;
|
||||
typedef typename result_of::end<Sequence>::type end;
|
||||
@ -138,7 +138,7 @@ namespace detail
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each(Sequence& seq, F const& f, mpl::false_) // unsegmented implementation
|
||||
for_each(Sequence& seq, F& f, mpl::false_) // unsegmented implementation
|
||||
{
|
||||
detail::for_each_dispatch(seq, f, typename traits::category_of<Sequence>::type());
|
||||
}
|
||||
|
@ -8,345 +8,138 @@
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
|
||||
# else
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
|
||||
# endif
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
template<typename State, typename It, typename F>
|
||||
struct fold_lvalue_state
|
||||
: fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
typename add_reference<typename add_const<State>::type>::type,
|
||||
typename fusion::result_of::deref<It>::type)
|
||||
>
|
||||
template<int SeqSize, typename It, typename State, typename F, typename = void
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
|
||||
, bool = SeqSize == 0
|
||||
# endif
|
||||
>
|
||||
struct result_of_it_fold
|
||||
{};
|
||||
template<typename Result,int N>
|
||||
struct unrolled_fold
|
||||
template<typename It, typename State, typename F>
|
||||
struct result_of_it_fold<0,It,State,F
|
||||
, typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, true
|
||||
# endif
|
||||
>
|
||||
{
|
||||
template<typename State3, typename It3, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_3(State3 const& state3,It3 const& it3,F& f)
|
||||
{
|
||||
return unrolled_fold<
|
||||
Result
|
||||
, N-4
|
||||
>::call(
|
||||
f(state3,fusion::deref(it3)),
|
||||
fusion::next(it3),
|
||||
f);
|
||||
}
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return call_3(
|
||||
f(state2,fusion::deref(it2)),
|
||||
fusion::next(it2),
|
||||
f);
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,fusion::deref(it1)),
|
||||
fusion::next(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,fusion::deref(it0)),
|
||||
fusion::next(it0),
|
||||
f);
|
||||
}
|
||||
typedef typename State::type type;
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_fold<Result,3>
|
||||
{
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return f(state2,fusion::deref(it2));
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,fusion::deref(it1)),
|
||||
fusion::next(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,fusion::deref(it0)),
|
||||
fusion::next(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_fold<Result,2>
|
||||
{
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return f(state1,fusion::deref(it1));
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,fusion::deref(it0)),
|
||||
fusion::next(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_fold<Result,1>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return f(state,
|
||||
fusion::deref(it0));
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_fold<Result,0>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const&, F)
|
||||
{
|
||||
return static_cast<Result>(state);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int N>
|
||||
struct result_of_unrolled_fold
|
||||
{
|
||||
typedef typename
|
||||
fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::next<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
rest2;
|
||||
typedef typename
|
||||
result_of::next<it1>::type
|
||||
it2;
|
||||
typedef typename
|
||||
fold_lvalue_state<
|
||||
rest2
|
||||
, it2
|
||||
, F
|
||||
>::type
|
||||
rest3;
|
||||
typedef typename
|
||||
result_of::next<it2>::type
|
||||
it3;
|
||||
typedef typename
|
||||
result_of_unrolled_fold<
|
||||
typename fold_lvalue_state<
|
||||
rest3
|
||||
, it3
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
it3
|
||||
>::type
|
||||
, F
|
||||
, N-4
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 3
|
||||
>
|
||||
{
|
||||
typedef typename
|
||||
fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::next<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
fold_lvalue_state<
|
||||
typename fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
it1 const
|
||||
>::type const
|
||||
, F
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 2
|
||||
>
|
||||
: fold_lvalue_state<
|
||||
typename fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
It0 const
|
||||
>::type const
|
||||
template<int SeqSize, typename It, typename State, typename F>
|
||||
struct result_of_it_fold<SeqSize,It,State,F
|
||||
, typename boost::enable_if_has_type<
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, >= 1500)
|
||||
|
||||
|
||||
|
||||
typename boost::disable_if_c<SeqSize == 0, State>::type::type
|
||||
# else
|
||||
BOOST_FUSION_FOLD_IMPL_ENABLER(State)
|
||||
# endif
|
||||
>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, false
|
||||
# endif
|
||||
>
|
||||
: result_of_it_fold<
|
||||
SeqSize-1
|
||||
, typename result_of::next<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
typename fusion::result_of::deref<It const>::type
|
||||
)
|
||||
>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_fold<
|
||||
StateRef
|
||||
, It0
|
||||
template<typename It, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_it_fold<
|
||||
0
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
, 1
|
||||
>
|
||||
: fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
>::type
|
||||
it_fold(mpl::int_<0>, It const&, typename State::type state, F&)
|
||||
{
|
||||
return state;
|
||||
}
|
||||
template<typename It, typename State, typename F, int SeqSize>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename lazy_enable_if_c<
|
||||
SeqSize != 0
|
||||
, result_of_it_fold<
|
||||
SeqSize
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 0
|
||||
>
|
||||
>::type
|
||||
it_fold(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
|
||||
{
|
||||
typedef StateRef type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int SeqSize>
|
||||
struct result_of_first_unrolledfold
|
||||
{
|
||||
typedef typename
|
||||
result_of_unrolled_fold<
|
||||
typename fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
StateRef,
|
||||
typename fusion::result_of::deref< It0 const>::type
|
||||
)
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
It0 const
|
||||
>::type
|
||||
, F
|
||||
, SeqSize-1
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<int SeqSize, typename StateRef, typename Seq, typename F>
|
||||
struct fold_impl
|
||||
{
|
||||
typedef typename
|
||||
result_of_first_unrolledfold<
|
||||
StateRef
|
||||
, typename result_of::begin<Seq>::type
|
||||
, F
|
||||
, SeqSize
|
||||
>::type
|
||||
type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(StateRef state, Seq& seq, F f)
|
||||
{
|
||||
typedef
|
||||
unrolled_fold<
|
||||
type
|
||||
, SeqSize
|
||||
>
|
||||
unrolled_impl;
|
||||
return unrolled_impl::call(
|
||||
state,
|
||||
fusion::begin(seq),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename Seq, typename F>
|
||||
struct fold_impl<0,StateRef,Seq,F>
|
||||
{
|
||||
typedef StateRef type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static StateRef
|
||||
call(StateRef state, Seq&, F)
|
||||
{
|
||||
return static_cast<StateRef>(state);
|
||||
}
|
||||
};
|
||||
template<typename Seq, typename State, typename F, bool IsSegmented>
|
||||
return it_fold<
|
||||
typename result_of::next<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
typename fusion::result_of::deref<It const>::type
|
||||
)
|
||||
>
|
||||
, F
|
||||
>(
|
||||
mpl::int_<SeqSize-1>()
|
||||
, fusion::next(it)
|
||||
, f(state, fusion::deref(it))
|
||||
, f
|
||||
);
|
||||
}
|
||||
template<typename Seq, typename State, typename F
|
||||
, bool = traits::is_sequence<Seq>::value
|
||||
, bool = traits::is_segmented<Seq>::value>
|
||||
struct result_of_fold
|
||||
: fold_impl<
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct result_of_fold<Seq, State, F, true, false>
|
||||
: result_of_it_fold<
|
||||
result_of::size<Seq>::value
|
||||
, typename add_reference<
|
||||
typename add_const<State>::type
|
||||
>::type
|
||||
, Seq
|
||||
, typename result_of::begin<Seq>::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_fold<Seq, State, F>::type
|
||||
fold(Seq& seq, State& state, F& f)
|
||||
{
|
||||
return it_fold<
|
||||
typename result_of::begin<Seq>::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>(
|
||||
typename result_of::size<Seq>::type()
|
||||
, fusion::begin(seq)
|
||||
, state
|
||||
, f
|
||||
);
|
||||
}
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct fold
|
||||
: detail::result_of_fold<
|
||||
Seq
|
||||
, State
|
||||
, F
|
||||
, traits::is_segmented<Seq>::type::value
|
||||
>
|
||||
: detail::result_of_fold<Seq, State, F>
|
||||
{};
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
@ -358,10 +151,7 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
fold(Seq& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::fold<Seq,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::fold<Seq, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@ -372,37 +162,28 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
fold(Seq const& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::fold<Seq const,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::fold<Seq const, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
fold(Seq& seq, State& state, F f)
|
||||
{
|
||||
return result_of::fold<Seq,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::fold<Seq, State, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
fold(Seq const& seq, State& state, F f)
|
||||
{
|
||||
return result_of::fold<Seq const,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::fold<Seq const, State, F>(seq, state, f);
|
||||
}
|
||||
}}
|
||||
|
@ -7,345 +7,138 @@
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
|
||||
# else
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
|
||||
# endif
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
template<typename State, typename It, typename F>
|
||||
struct iter_fold_lvalue_state
|
||||
: fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
typename add_reference<typename add_const<State>::type>::type,
|
||||
It&)
|
||||
>
|
||||
template<int SeqSize, typename It, typename State, typename F, typename = void
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
|
||||
, bool = SeqSize == 0
|
||||
# endif
|
||||
>
|
||||
struct result_of_it_iter_fold
|
||||
{};
|
||||
template<typename Result,int N>
|
||||
struct unrolled_iter_fold
|
||||
template<typename It, typename State, typename F>
|
||||
struct result_of_it_iter_fold<0,It,State,F
|
||||
, typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, true
|
||||
# endif
|
||||
>
|
||||
{
|
||||
template<typename State3, typename It3, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_3(State3 const& state3,It3 const& it3,F& f)
|
||||
{
|
||||
return unrolled_iter_fold<
|
||||
Result
|
||||
, N-4
|
||||
>::call(
|
||||
f(state3,it3),
|
||||
fusion::next(it3),
|
||||
f);
|
||||
}
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return call_3(
|
||||
f(state2,it2),
|
||||
fusion::next(it2),
|
||||
f);
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,it1),
|
||||
fusion::next(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,it0),
|
||||
fusion::next(it0),
|
||||
f);
|
||||
}
|
||||
typedef typename State::type type;
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_iter_fold<Result,3>
|
||||
{
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return f(state2,it2);
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,it1),
|
||||
fusion::next(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,it0),
|
||||
fusion::next(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_iter_fold<Result,2>
|
||||
{
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return f(state1,it1);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,it0),
|
||||
fusion::next(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_iter_fold<Result,1>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return f(state,
|
||||
it0);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_iter_fold<Result,0>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const&, F)
|
||||
{
|
||||
return static_cast<Result>(state);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int N>
|
||||
struct result_of_unrolled_iter_fold
|
||||
{
|
||||
typedef typename
|
||||
iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::next<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
iter_fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
rest2;
|
||||
typedef typename
|
||||
result_of::next<it1>::type
|
||||
it2;
|
||||
typedef typename
|
||||
iter_fold_lvalue_state<
|
||||
rest2
|
||||
, it2
|
||||
, F
|
||||
>::type
|
||||
rest3;
|
||||
typedef typename
|
||||
result_of::next<it2>::type
|
||||
it3;
|
||||
typedef typename
|
||||
result_of_unrolled_iter_fold<
|
||||
typename iter_fold_lvalue_state<
|
||||
rest3
|
||||
, it3
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
it3
|
||||
>::type
|
||||
, F
|
||||
, N-4
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 3
|
||||
>
|
||||
{
|
||||
typedef typename
|
||||
iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::next<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
iter_fold_lvalue_state<
|
||||
typename iter_fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
it1 const
|
||||
>::type const
|
||||
, F
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 2
|
||||
>
|
||||
: iter_fold_lvalue_state<
|
||||
typename iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
It0 const
|
||||
>::type const
|
||||
template<int SeqSize, typename It, typename State, typename F>
|
||||
struct result_of_it_iter_fold<SeqSize,It,State,F
|
||||
, typename boost::enable_if_has_type<
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, >= 1500)
|
||||
|
||||
|
||||
|
||||
typename boost::disable_if_c<SeqSize == 0, State>::type::type
|
||||
# else
|
||||
BOOST_FUSION_FOLD_IMPL_ENABLER(State)
|
||||
# endif
|
||||
>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, false
|
||||
# endif
|
||||
>
|
||||
: result_of_it_iter_fold<
|
||||
SeqSize-1
|
||||
, typename result_of::next<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
It const&
|
||||
)
|
||||
>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
template<typename It, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_it_iter_fold<
|
||||
0
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
, 1
|
||||
>
|
||||
: iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
>::type
|
||||
it_iter_fold(mpl::int_<0>, It const&, typename State::type state, F&)
|
||||
{
|
||||
return state;
|
||||
}
|
||||
template<typename It, typename State, typename F, int SeqSize>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename lazy_enable_if_c<
|
||||
SeqSize != 0
|
||||
, result_of_it_iter_fold<
|
||||
SeqSize
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 0
|
||||
>
|
||||
>::type
|
||||
it_iter_fold(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
|
||||
{
|
||||
typedef StateRef type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int SeqSize>
|
||||
struct result_of_first_unrollediter_fold
|
||||
{
|
||||
typedef typename
|
||||
result_of_unrolled_iter_fold<
|
||||
typename fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
StateRef,
|
||||
It0 const&
|
||||
)
|
||||
>::type
|
||||
, typename result_of::next<
|
||||
It0 const
|
||||
>::type
|
||||
, F
|
||||
, SeqSize-1
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<int SeqSize, typename StateRef, typename Seq, typename F>
|
||||
struct iter_fold_impl
|
||||
{
|
||||
typedef typename
|
||||
result_of_first_unrollediter_fold<
|
||||
StateRef
|
||||
, typename result_of::begin<Seq>::type
|
||||
, F
|
||||
, SeqSize
|
||||
>::type
|
||||
type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(StateRef state, Seq& seq, F f)
|
||||
{
|
||||
typedef
|
||||
unrolled_iter_fold<
|
||||
type
|
||||
, SeqSize
|
||||
>
|
||||
unrolled_impl;
|
||||
return unrolled_impl::call(
|
||||
state,
|
||||
fusion::begin(seq),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename Seq, typename F>
|
||||
struct iter_fold_impl<0,StateRef,Seq,F>
|
||||
{
|
||||
typedef StateRef type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static StateRef
|
||||
call(StateRef state, Seq&, F)
|
||||
{
|
||||
return static_cast<StateRef>(state);
|
||||
}
|
||||
};
|
||||
template<typename Seq, typename State, typename F, bool IsSegmented>
|
||||
return it_iter_fold<
|
||||
typename result_of::next<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
It const&
|
||||
)
|
||||
>
|
||||
, F
|
||||
>(
|
||||
mpl::int_<SeqSize-1>()
|
||||
, fusion::next(it)
|
||||
, f(state, it)
|
||||
, f
|
||||
);
|
||||
}
|
||||
template<typename Seq, typename State, typename F
|
||||
, bool = traits::is_sequence<Seq>::value
|
||||
, bool = traits::is_segmented<Seq>::value>
|
||||
struct result_of_iter_fold
|
||||
: iter_fold_impl<
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct result_of_iter_fold<Seq, State, F, true, false>
|
||||
: result_of_it_iter_fold<
|
||||
result_of::size<Seq>::value
|
||||
, typename add_reference<
|
||||
typename add_const<State>::type
|
||||
>::type
|
||||
, Seq
|
||||
, typename result_of::begin<Seq>::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_iter_fold<Seq, State, F>::type
|
||||
iter_fold(Seq& seq, State& state, F& f)
|
||||
{
|
||||
return it_iter_fold<
|
||||
typename result_of::begin<Seq>::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>(
|
||||
typename result_of::size<Seq>::type()
|
||||
, fusion::begin(seq)
|
||||
, state
|
||||
, f
|
||||
);
|
||||
}
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct iter_fold
|
||||
: detail::result_of_iter_fold<
|
||||
Seq
|
||||
, State
|
||||
, F
|
||||
, traits::is_segmented<Seq>::type::value
|
||||
>
|
||||
: detail::result_of_iter_fold<Seq, State, F>
|
||||
{};
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
@ -357,10 +150,7 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
iter_fold(Seq& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::iter_fold<Seq,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::iter_fold<Seq, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@ -371,37 +161,28 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
iter_fold(Seq const& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::iter_fold<Seq const,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::iter_fold<Seq const, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::iter_fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
iter_fold(Seq& seq, State& state, F f)
|
||||
{
|
||||
return result_of::iter_fold<Seq,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::iter_fold<Seq, State, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::iter_fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
iter_fold(Seq const& seq, State& state, F f)
|
||||
{
|
||||
return result_of::iter_fold<Seq const,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::iter_fold<Seq const, State, F>(seq, state, f);
|
||||
}
|
||||
}}
|
||||
|
@ -7,345 +7,138 @@
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
|
||||
# else
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
|
||||
# endif
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
template<typename State, typename It, typename F>
|
||||
struct reverse_fold_lvalue_state
|
||||
: fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
typename add_reference<typename add_const<State>::type>::type,
|
||||
typename fusion::result_of::deref<It>::type)
|
||||
>
|
||||
template<int SeqSize, typename It, typename State, typename F, typename = void
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
|
||||
, bool = SeqSize == 0
|
||||
# endif
|
||||
>
|
||||
struct result_of_it_reverse_fold
|
||||
{};
|
||||
template<typename Result,int N>
|
||||
struct unrolled_reverse_fold
|
||||
template<typename It, typename State, typename F>
|
||||
struct result_of_it_reverse_fold<0,It,State,F
|
||||
, typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, true
|
||||
# endif
|
||||
>
|
||||
{
|
||||
template<typename State3, typename It3, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_3(State3 const& state3,It3 const& it3,F& f)
|
||||
{
|
||||
return unrolled_reverse_fold<
|
||||
Result
|
||||
, N-4
|
||||
>::call(
|
||||
f(state3,fusion::deref(it3)),
|
||||
fusion::prior(it3),
|
||||
f);
|
||||
}
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return call_3(
|
||||
f(state2,fusion::deref(it2)),
|
||||
fusion::prior(it2),
|
||||
f);
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,fusion::deref(it1)),
|
||||
fusion::prior(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,fusion::deref(it0)),
|
||||
fusion::prior(it0),
|
||||
f);
|
||||
}
|
||||
typedef typename State::type type;
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_fold<Result,3>
|
||||
{
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return f(state2,fusion::deref(it2));
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,fusion::deref(it1)),
|
||||
fusion::prior(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,fusion::deref(it0)),
|
||||
fusion::prior(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_fold<Result,2>
|
||||
{
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return f(state1,fusion::deref(it1));
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,fusion::deref(it0)),
|
||||
fusion::prior(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_fold<Result,1>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return f(state,
|
||||
fusion::deref(it0));
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_fold<Result,0>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const&, F)
|
||||
{
|
||||
return static_cast<Result>(state);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int N>
|
||||
struct result_of_unrolled_reverse_fold
|
||||
{
|
||||
typedef typename
|
||||
reverse_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::prior<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
reverse_fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
rest2;
|
||||
typedef typename
|
||||
result_of::prior<it1>::type
|
||||
it2;
|
||||
typedef typename
|
||||
reverse_fold_lvalue_state<
|
||||
rest2
|
||||
, it2
|
||||
, F
|
||||
>::type
|
||||
rest3;
|
||||
typedef typename
|
||||
result_of::prior<it2>::type
|
||||
it3;
|
||||
typedef typename
|
||||
result_of_unrolled_reverse_fold<
|
||||
typename reverse_fold_lvalue_state<
|
||||
rest3
|
||||
, it3
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
it3
|
||||
>::type
|
||||
, F
|
||||
, N-4
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 3
|
||||
>
|
||||
{
|
||||
typedef typename
|
||||
reverse_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::prior<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
reverse_fold_lvalue_state<
|
||||
typename reverse_fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
it1 const
|
||||
>::type const
|
||||
, F
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 2
|
||||
>
|
||||
: reverse_fold_lvalue_state<
|
||||
typename reverse_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
It0 const
|
||||
>::type const
|
||||
template<int SeqSize, typename It, typename State, typename F>
|
||||
struct result_of_it_reverse_fold<SeqSize,It,State,F
|
||||
, typename boost::enable_if_has_type<
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, >= 1500)
|
||||
|
||||
|
||||
|
||||
typename boost::disable_if_c<SeqSize == 0, State>::type::type
|
||||
# else
|
||||
BOOST_FUSION_FOLD_IMPL_ENABLER(State)
|
||||
# endif
|
||||
>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, false
|
||||
# endif
|
||||
>
|
||||
: result_of_it_reverse_fold<
|
||||
SeqSize-1
|
||||
, typename result_of::prior<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
typename fusion::result_of::deref<It const>::type
|
||||
)
|
||||
>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_fold<
|
||||
StateRef
|
||||
, It0
|
||||
template<typename It, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_it_reverse_fold<
|
||||
0
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
, 1
|
||||
>
|
||||
: reverse_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
>::type
|
||||
it_reverse_fold(mpl::int_<0>, It const&, typename State::type state, F&)
|
||||
{
|
||||
return state;
|
||||
}
|
||||
template<typename It, typename State, typename F, int SeqSize>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename lazy_enable_if_c<
|
||||
SeqSize != 0
|
||||
, result_of_it_reverse_fold<
|
||||
SeqSize
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 0
|
||||
>
|
||||
>::type
|
||||
it_reverse_fold(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
|
||||
{
|
||||
typedef StateRef type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int SeqSize>
|
||||
struct result_of_first_unrolledreverse_fold
|
||||
{
|
||||
typedef typename
|
||||
result_of_unrolled_reverse_fold<
|
||||
typename fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
StateRef,
|
||||
typename fusion::result_of::deref< It0 const>::type
|
||||
)
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
It0 const
|
||||
>::type
|
||||
, F
|
||||
, SeqSize-1
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<int SeqSize, typename StateRef, typename Seq, typename F>
|
||||
struct reverse_fold_impl
|
||||
{
|
||||
typedef typename
|
||||
result_of_first_unrolledreverse_fold<
|
||||
StateRef
|
||||
, typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
|
||||
, F
|
||||
, SeqSize
|
||||
>::type
|
||||
type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(StateRef state, Seq& seq, F f)
|
||||
{
|
||||
typedef
|
||||
unrolled_reverse_fold<
|
||||
type
|
||||
, SeqSize
|
||||
>
|
||||
unrolled_impl;
|
||||
return unrolled_impl::call(
|
||||
state,
|
||||
fusion::prior( fusion::end(seq)),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename Seq, typename F>
|
||||
struct reverse_fold_impl<0,StateRef,Seq,F>
|
||||
{
|
||||
typedef StateRef type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static StateRef
|
||||
call(StateRef state, Seq&, F)
|
||||
{
|
||||
return static_cast<StateRef>(state);
|
||||
}
|
||||
};
|
||||
template<typename Seq, typename State, typename F, bool IsSegmented>
|
||||
return it_reverse_fold<
|
||||
typename result_of::prior<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
typename fusion::result_of::deref<It const>::type
|
||||
)
|
||||
>
|
||||
, F
|
||||
>(
|
||||
mpl::int_<SeqSize-1>()
|
||||
, fusion::prior(it)
|
||||
, f(state, fusion::deref(it))
|
||||
, f
|
||||
);
|
||||
}
|
||||
template<typename Seq, typename State, typename F
|
||||
, bool = traits::is_sequence<Seq>::value
|
||||
, bool = traits::is_segmented<Seq>::value>
|
||||
struct result_of_reverse_fold
|
||||
: reverse_fold_impl<
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct result_of_reverse_fold<Seq, State, F, true, false>
|
||||
: result_of_it_reverse_fold<
|
||||
result_of::size<Seq>::value
|
||||
, typename add_reference<
|
||||
typename add_const<State>::type
|
||||
>::type
|
||||
, Seq
|
||||
, typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_reverse_fold<Seq, State, F>::type
|
||||
reverse_fold(Seq& seq, State& state, F& f)
|
||||
{
|
||||
return it_reverse_fold<
|
||||
typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>(
|
||||
typename result_of::size<Seq>::type()
|
||||
, fusion::prior( fusion::end(seq) )
|
||||
, state
|
||||
, f
|
||||
);
|
||||
}
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct reverse_fold
|
||||
: detail::result_of_reverse_fold<
|
||||
Seq
|
||||
, State
|
||||
, F
|
||||
, traits::is_segmented<Seq>::type::value
|
||||
>
|
||||
: detail::result_of_reverse_fold<Seq, State, F>
|
||||
{};
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
@ -357,10 +150,7 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
reverse_fold(Seq& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::reverse_fold<Seq,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_fold<Seq, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@ -371,37 +161,28 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
reverse_fold(Seq const& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::reverse_fold<Seq const,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_fold<Seq const, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_fold(Seq& seq, State& state, F f)
|
||||
{
|
||||
return result_of::reverse_fold<Seq,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_fold<Seq, State, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_fold(Seq const& seq, State& state, F f)
|
||||
{
|
||||
return result_of::reverse_fold<Seq const,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_fold<Seq const, State, F>(seq, state, f);
|
||||
}
|
||||
}}
|
||||
|
@ -7,345 +7,138 @@
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
|
||||
# else
|
||||
# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
|
||||
# endif
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
template<typename State, typename It, typename F>
|
||||
struct reverse_iter_fold_lvalue_state
|
||||
: fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
typename add_reference<typename add_const<State>::type>::type,
|
||||
It&)
|
||||
>
|
||||
template<int SeqSize, typename It, typename State, typename F, typename = void
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
|
||||
, bool = SeqSize == 0
|
||||
# endif
|
||||
>
|
||||
struct result_of_it_reverse_iter_fold
|
||||
{};
|
||||
template<typename Result,int N>
|
||||
struct unrolled_reverse_iter_fold
|
||||
template<typename It, typename State, typename F>
|
||||
struct result_of_it_reverse_iter_fold<0,It,State,F
|
||||
, typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, true
|
||||
# endif
|
||||
>
|
||||
{
|
||||
template<typename State3, typename It3, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_3(State3 const& state3,It3 const& it3,F& f)
|
||||
{
|
||||
return unrolled_reverse_iter_fold<
|
||||
Result
|
||||
, N-4
|
||||
>::call(
|
||||
f(state3,it3),
|
||||
fusion::prior(it3),
|
||||
f);
|
||||
}
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return call_3(
|
||||
f(state2,it2),
|
||||
fusion::prior(it2),
|
||||
f);
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,it1),
|
||||
fusion::prior(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,it0),
|
||||
fusion::prior(it0),
|
||||
f);
|
||||
}
|
||||
typedef typename State::type type;
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_iter_fold<Result,3>
|
||||
{
|
||||
template<typename State2, typename It2, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_2(State2 const& state2,It2 const& it2,F& f)
|
||||
{
|
||||
return f(state2,it2);
|
||||
}
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return call_2(
|
||||
f(state1,it1),
|
||||
fusion::prior(it1),
|
||||
f);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,it0),
|
||||
fusion::prior(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_iter_fold<Result,2>
|
||||
{
|
||||
template<typename State1, typename It1, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call_1(State1 const& state1,It1 const& it1,F& f)
|
||||
{
|
||||
return f(state1,it1);
|
||||
}
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return call_1(
|
||||
f(state,it0),
|
||||
fusion::prior(it0),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_iter_fold<Result,1>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const& it0,F f)
|
||||
{
|
||||
return f(state,
|
||||
it0);
|
||||
}
|
||||
};
|
||||
template<typename Result>
|
||||
struct unrolled_reverse_iter_fold<Result,0>
|
||||
{
|
||||
template<typename State, typename It0, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static Result
|
||||
call(State const& state,It0 const&, F)
|
||||
{
|
||||
return static_cast<Result>(state);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int N>
|
||||
struct result_of_unrolled_reverse_iter_fold
|
||||
{
|
||||
typedef typename
|
||||
reverse_iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::prior<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
reverse_iter_fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
rest2;
|
||||
typedef typename
|
||||
result_of::prior<it1>::type
|
||||
it2;
|
||||
typedef typename
|
||||
reverse_iter_fold_lvalue_state<
|
||||
rest2
|
||||
, it2
|
||||
, F
|
||||
>::type
|
||||
rest3;
|
||||
typedef typename
|
||||
result_of::prior<it2>::type
|
||||
it3;
|
||||
typedef typename
|
||||
result_of_unrolled_reverse_iter_fold<
|
||||
typename reverse_iter_fold_lvalue_state<
|
||||
rest3
|
||||
, it3
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
it3
|
||||
>::type
|
||||
, F
|
||||
, N-4
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 3
|
||||
>
|
||||
{
|
||||
typedef typename
|
||||
reverse_iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
rest1;
|
||||
typedef typename
|
||||
result_of::prior<
|
||||
It0 const
|
||||
>::type
|
||||
it1;
|
||||
typedef typename
|
||||
reverse_iter_fold_lvalue_state<
|
||||
typename reverse_iter_fold_lvalue_state<
|
||||
rest1
|
||||
, it1
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
it1 const
|
||||
>::type const
|
||||
, F
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 2
|
||||
>
|
||||
: reverse_iter_fold_lvalue_state<
|
||||
typename reverse_iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
, F
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
It0 const
|
||||
>::type const
|
||||
template<int SeqSize, typename It, typename State, typename F>
|
||||
struct result_of_it_reverse_iter_fold<SeqSize,It,State,F
|
||||
, typename boost::enable_if_has_type<
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, >= 1500)
|
||||
|
||||
|
||||
|
||||
typename boost::disable_if_c<SeqSize == 0, State>::type::type
|
||||
# else
|
||||
BOOST_FUSION_FOLD_IMPL_ENABLER(State)
|
||||
# endif
|
||||
>::type
|
||||
# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
|
||||
, false
|
||||
# endif
|
||||
>
|
||||
: result_of_it_reverse_iter_fold<
|
||||
SeqSize-1
|
||||
, typename result_of::prior<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
It const&
|
||||
)
|
||||
>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
template<typename It, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_it_reverse_iter_fold<
|
||||
0
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
, 1
|
||||
>
|
||||
: reverse_iter_fold_lvalue_state<
|
||||
StateRef
|
||||
, It0 const
|
||||
>::type
|
||||
it_reverse_iter_fold(mpl::int_<0>, It const&, typename State::type state, F&)
|
||||
{
|
||||
return state;
|
||||
}
|
||||
template<typename It, typename State, typename F, int SeqSize>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename lazy_enable_if_c<
|
||||
SeqSize != 0
|
||||
, result_of_it_reverse_iter_fold<
|
||||
SeqSize
|
||||
, It
|
||||
, State
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename StateRef, typename It0, typename F>
|
||||
struct result_of_unrolled_reverse_iter_fold<
|
||||
StateRef
|
||||
, It0
|
||||
, F
|
||||
, 0
|
||||
>
|
||||
>::type
|
||||
it_reverse_iter_fold(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
|
||||
{
|
||||
typedef StateRef type;
|
||||
};
|
||||
template<typename StateRef, typename It0, typename F, int SeqSize>
|
||||
struct result_of_first_unrolledreverse_iter_fold
|
||||
{
|
||||
typedef typename
|
||||
result_of_unrolled_reverse_iter_fold<
|
||||
typename fusion::detail::result_of_with_decltype<
|
||||
F(
|
||||
StateRef,
|
||||
It0 const&
|
||||
)
|
||||
>::type
|
||||
, typename result_of::prior<
|
||||
It0 const
|
||||
>::type
|
||||
, F
|
||||
, SeqSize-1
|
||||
>::type
|
||||
type;
|
||||
};
|
||||
template<int SeqSize, typename StateRef, typename Seq, typename F>
|
||||
struct reverse_iter_fold_impl
|
||||
{
|
||||
typedef typename
|
||||
result_of_first_unrolledreverse_iter_fold<
|
||||
StateRef
|
||||
, typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
|
||||
, F
|
||||
, SeqSize
|
||||
>::type
|
||||
type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(StateRef state, Seq& seq, F f)
|
||||
{
|
||||
typedef
|
||||
unrolled_reverse_iter_fold<
|
||||
type
|
||||
, SeqSize
|
||||
>
|
||||
unrolled_impl;
|
||||
return unrolled_impl::call(
|
||||
state,
|
||||
fusion::prior( fusion::end(seq)),
|
||||
f);
|
||||
}
|
||||
};
|
||||
template<typename StateRef, typename Seq, typename F>
|
||||
struct reverse_iter_fold_impl<0,StateRef,Seq,F>
|
||||
{
|
||||
typedef StateRef type;
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static StateRef
|
||||
call(StateRef state, Seq&, F)
|
||||
{
|
||||
return static_cast<StateRef>(state);
|
||||
}
|
||||
};
|
||||
template<typename Seq, typename State, typename F, bool IsSegmented>
|
||||
return it_reverse_iter_fold<
|
||||
typename result_of::prior<It>::type
|
||||
, boost::result_of<
|
||||
F(
|
||||
typename add_reference<typename State::type>::type,
|
||||
It const&
|
||||
)
|
||||
>
|
||||
, F
|
||||
>(
|
||||
mpl::int_<SeqSize-1>()
|
||||
, fusion::prior(it)
|
||||
, f(state, it)
|
||||
, f
|
||||
);
|
||||
}
|
||||
template<typename Seq, typename State, typename F
|
||||
, bool = traits::is_sequence<Seq>::value
|
||||
, bool = traits::is_segmented<Seq>::value>
|
||||
struct result_of_reverse_iter_fold
|
||||
: reverse_iter_fold_impl<
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct result_of_reverse_iter_fold<Seq, State, F, true, false>
|
||||
: result_of_it_reverse_iter_fold<
|
||||
result_of::size<Seq>::value
|
||||
, typename add_reference<
|
||||
typename add_const<State>::type
|
||||
>::type
|
||||
, Seq
|
||||
, typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>
|
||||
{};
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of_reverse_iter_fold<Seq, State, F>::type
|
||||
reverse_iter_fold(Seq& seq, State& state, F& f)
|
||||
{
|
||||
return it_reverse_iter_fold<
|
||||
typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
|
||||
, add_reference<State>
|
||||
, F
|
||||
>(
|
||||
typename result_of::size<Seq>::type()
|
||||
, fusion::prior( fusion::end(seq) )
|
||||
, state
|
||||
, f
|
||||
);
|
||||
}
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template<typename Seq, typename State, typename F>
|
||||
struct reverse_iter_fold
|
||||
: detail::result_of_reverse_iter_fold<
|
||||
Seq
|
||||
, State
|
||||
, F
|
||||
, traits::is_segmented<Seq>::type::value
|
||||
>
|
||||
: detail::result_of_reverse_iter_fold<Seq, State, F>
|
||||
{};
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
@ -357,10 +150,7 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
reverse_iter_fold(Seq& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::reverse_iter_fold<Seq,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_iter_fold<Seq, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@ -371,37 +161,28 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
reverse_iter_fold(Seq const& seq, State const& state, F f)
|
||||
{
|
||||
return result_of::reverse_iter_fold<Seq const,State const,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_iter_fold<Seq const, State const, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_iter_fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_iter_fold(Seq& seq, State& state, F f)
|
||||
{
|
||||
return result_of::reverse_iter_fold<Seq,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_iter_fold<Seq, State, F>(seq, state, f);
|
||||
}
|
||||
template<typename Seq, typename State, typename F>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_iter_fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_iter_fold(Seq const& seq, State& state, F f)
|
||||
{
|
||||
return result_of::reverse_iter_fold<Seq const,State,F>::call(
|
||||
state,
|
||||
seq,
|
||||
f);
|
||||
return detail::reverse_iter_fold<Seq const, State, F>(seq, state, f);
|
||||
}
|
||||
}}
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold_fwd.hpp>
|
||||
#include <boost/fusion/support/segmented_fold_until.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
@ -38,11 +39,11 @@ namespace boost { namespace fusion { namespace detail
|
||||
};
|
||||
|
||||
// The default implementation of this lives in detail/fold.hpp
|
||||
template <typename Sequence, typename State, typename Fun, bool IsSegmented>
|
||||
template <typename Sequence, typename State, typename Fun, bool IsSequence, bool IsSegmented>
|
||||
struct result_of_fold;
|
||||
|
||||
template <typename Sequence, typename State, typename Fun>
|
||||
struct result_of_fold<Sequence, State, Fun, true>
|
||||
struct result_of_fold<Sequence, State, Fun, true, true>
|
||||
{
|
||||
typedef
|
||||
typename result_of::segmented_fold_until<
|
||||
@ -53,7 +54,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(State& state, Sequence& seq, Fun fun)
|
||||
static type call(Sequence& seq, State& state, Fun& fun)
|
||||
{
|
||||
return fusion::segmented_fold_until(seq, state, segmented_fold_fun<Fun>(fun));
|
||||
}
|
||||
|
@ -19,11 +19,11 @@ namespace boost { namespace fusion { namespace detail
|
||||
struct segmented_for_each_fun
|
||||
{
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
explicit segmented_for_each_fun(Fun const& f)
|
||||
explicit segmented_for_each_fun(Fun& f)
|
||||
: fun(f)
|
||||
{}
|
||||
|
||||
Fun const& fun;
|
||||
Fun& fun;
|
||||
|
||||
template <typename Sequence, typename State, typename Context>
|
||||
struct apply
|
||||
@ -43,7 +43,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each(Sequence& seq, F const& f, mpl::true_) // segmented implementation
|
||||
for_each(Sequence& seq, F& f, mpl::true_) // segmented implementation
|
||||
{
|
||||
fusion::segmented_fold_until(seq, void_(), segmented_for_each_fun<F>(f));
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
Copyright (c) 2009-2010 Christopher Schmidt
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -10,24 +11,17 @@
|
||||
#define BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/result_of.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold_fwd.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/empty.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
fold(Seq& seq, State& state, F f);
|
||||
@ -47,7 +47,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
fold(Seq const& seq, State& state, F f);
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2007 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -13,7 +14,7 @@
|
||||
#include <boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -28,24 +29,16 @@ namespace boost { namespace fusion
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
>::type
|
||||
for_each(Sequence& seq, F const& f)
|
||||
inline typename enable_if<traits::is_sequence<Sequence> >::type
|
||||
for_each(Sequence& seq, F f)
|
||||
{
|
||||
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
>::type
|
||||
for_each(Sequence const& seq, F const& f)
|
||||
inline typename enable_if<traits::is_sequence<Sequence> >::type
|
||||
for_each(Sequence const& seq, F f)
|
||||
{
|
||||
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2011 Eric Niebler
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -9,7 +10,7 @@
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -21,21 +22,13 @@ namespace boost { namespace fusion
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
>::type
|
||||
for_each(Sequence& seq, F const& f);
|
||||
inline typename enable_if<traits::is_sequence<Sequence> >::type
|
||||
for_each(Sequence& seq, F f);
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
>::type
|
||||
for_each(Sequence const& seq, F const& f);
|
||||
inline typename enable_if<traits::is_sequence<Sequence> >::type
|
||||
for_each(Sequence const& seq, F f);
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2010 Christopher Schmidt
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -13,20 +14,14 @@
|
||||
#include <boost/fusion/algorithm/iteration/iter_fold_fwd.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/empty.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/support/detail/result_of.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
|
||||
#define BOOST_FUSION_ITER_FOLD
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::iter_fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
iter_fold(Seq& seq, State& state, F f);
|
||||
@ -47,7 +47,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::iter_fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
iter_fold(Seq const& seq, State& state, F f);
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2010 Christopher Schmidt
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -12,21 +13,15 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/empty.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
|
||||
#define BOOST_FUSION_REVERSE_FOLD
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_fold(Seq& seq, State& state, F f);
|
||||
@ -47,7 +47,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_fold(Seq const& seq, State& state, F f);
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2010 Christopher Schmidt
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -11,21 +12,15 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/empty.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/fusion/support/is_segmented.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/value_of.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/utility/result_of.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
|
||||
#define BOOST_FUSION_REVERSE_FOLD
|
||||
|
@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_iter_fold<
|
||||
Seq
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_iter_fold(Seq& seq, State& state, F f);
|
||||
@ -47,7 +47,7 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::reverse_iter_fold<
|
||||
Seq const
|
||||
, State const
|
||||
, State
|
||||
, F
|
||||
>::type
|
||||
reverse_iter_fold(Seq const& seq, State& state, F f);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
@ -2,6 +2,7 @@
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2007 Dan Marsden
|
||||
Copyright (c) 2009 Christopher Schmidt
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -13,7 +14,6 @@
|
||||
#include <boost/mpl/apply.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/identity.hpp>
|
||||
#include <boost/mpl/lambda.hpp>
|
||||
#include <boost/mpl/or.hpp>
|
||||
#include <boost/fusion/iterator/advance.hpp>
|
||||
#include <boost/fusion/iterator/distance.hpp>
|
||||
@ -22,10 +22,9 @@
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
struct random_access_traversal_tag;
|
||||
namespace detail
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename Iterator, typename Pred>
|
||||
struct apply_filter
|
||||
@ -178,8 +177,8 @@ namespace detail
|
||||
choose_find_if<
|
||||
First
|
||||
, Last
|
||||
, typename mpl::lambda<Pred>::type
|
||||
, is_base_of<random_access_traversal_tag, typename traits::category_of<First>::type>::value
|
||||
, Pred
|
||||
, traits::is_random_access<First>::value
|
||||
>::type
|
||||
type;
|
||||
|
||||
@ -208,31 +207,23 @@ namespace detail
|
||||
return recursive_call(iter, found());
|
||||
}
|
||||
|
||||
template <typename Iterator, typename Tag>
|
||||
template <typename Iterator>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
choose_call(Iterator const& iter, Tag)
|
||||
static typename boost::disable_if<traits::is_random_access<Iterator>, type>::type
|
||||
iter_call(Iterator const& iter)
|
||||
{
|
||||
return recursive_call(iter);
|
||||
}
|
||||
|
||||
template <typename Iterator>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
choose_call(Iterator const& iter, random_access_traversal_tag)
|
||||
static typename boost::enable_if<traits::is_random_access<Iterator>, type>::type
|
||||
iter_call(Iterator const& iter)
|
||||
{
|
||||
typedef typename result_of::distance<Iterator, type>::type N;
|
||||
return fusion::advance<N>(iter);
|
||||
}
|
||||
|
||||
template <typename Iterator>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
iter_call(Iterator const& iter)
|
||||
{
|
||||
return choose_call(iter, typename traits::category_of<Iterator>::type());
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
||||
#include <boost/fusion/container/vector/vector10.hpp>
|
||||
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
||||
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
|
||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||
|
@ -1,9 +1,9 @@
|
||||
/*//////////////////////////////////////////////////////////////////////////////
|
||||
/*==============================================================================
|
||||
Copyright (c) 2013 Jamboree
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_FUSION_ALGORITHM_FLATTEN_HPP_INCLUDED
|
||||
#define BOOST_FUSION_ALGORITHM_FLATTEN_HPP_INCLUDED
|
||||
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
||||
#include <boost/fusion/container/vector/vector10.hpp>
|
||||
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
||||
#include <boost/fusion/view/single_view/single_view.hpp>
|
||||
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/iterator/mpl/convert_iterator.hpp>
|
||||
#include <boost/fusion/container/vector/vector10.hpp>
|
||||
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
||||
#include <boost/fusion/view/iterator_range/iterator_range.hpp>
|
||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||
|
@ -1,7 +1,8 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_REMOVE_IF_07162005_0818)
|
||||
@ -10,7 +11,6 @@
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/view/filter_view/filter_view.hpp>
|
||||
#include <boost/mpl/not.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
#include <boost/preprocessor/repetition/enum.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/preprocessor/arithmetic/inc.hpp>
|
||||
|
@ -21,6 +21,8 @@
|
||||
// C++11 interface
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#include <boost/fusion/support/sequence_base.hpp>
|
||||
#include <boost/fusion/support/void.hpp>
|
||||
#include <boost/fusion/support/detail/enabler.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
|
||||
@ -59,7 +61,7 @@ namespace boost { namespace fusion
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence>>>::type* /*dummy*/ = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence>>, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
@ -149,7 +151,8 @@ namespace boost { namespace fusion
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0)
|
||||
, typename disable_if<is_convertible<Sequence, Head>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
|
||||
|
@ -23,8 +23,7 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// MSVC variadics at this point in time is not ready yet (ICE!)
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1900))
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, < 1910)
|
||||
# if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
|
||||
# undef BOOST_FUSION_HAS_VARIADIC_DEQUE
|
||||
# endif
|
||||
|
@ -111,9 +111,8 @@ namespace boost { namespace fusion {
|
||||
|
||||
Seq& seq_;
|
||||
|
||||
private:
|
||||
// silence MSVC warning C4512: assignment operator could not be generated
|
||||
deque_iterator& operator= (deque_iterator const&);
|
||||
BOOST_DELETED_FUNCTION(deque_iterator& operator= (deque_iterator const&))
|
||||
};
|
||||
|
||||
}}
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2005-2012 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
Copyright (c) 2015 Kohei Takahashi
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -12,7 +13,7 @@
|
||||
#include <boost/fusion/container/deque/convert.hpp>
|
||||
#include <boost/fusion/container/deque/deque.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
@ -41,7 +42,11 @@ namespace boost { namespace fusion
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq)
|
||||
{
|
||||
return gen::call(seq);
|
||||
return gen::call(fusion::begin(seq)
|
||||
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
|
||||
, fusion::end(seq)
|
||||
#endif
|
||||
);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
@ -26,7 +26,13 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_FUSION_BARRIER_BEGIN
|
||||
|
||||
template <int size>
|
||||
struct as_deque;
|
||||
struct as_deque
|
||||
{
|
||||
BOOST_STATIC_ASSERT_MSG(
|
||||
size <= FUSION_MAX_DEQUE_SIZE
|
||||
, "FUSION_MAX_DEQUE_SIZE limit is too low"
|
||||
);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct as_deque<0>
|
||||
|
@ -22,6 +22,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct as_deque
|
||||
: detail::as_deque<result_of::size<Sequence>::value>
|
||||
{
|
||||
typedef typename
|
||||
detail::as_deque<result_of::size<Sequence>::value>
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/type_traits/is_convertible.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
|
||||
#include <boost/fusion/container/deque/deque_fwd.hpp>
|
||||
#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
|
||||
@ -35,6 +37,7 @@
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
#include <boost/fusion/support/void.hpp>
|
||||
#include <boost/fusion/support/detail/enabler.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
@ -94,26 +97,19 @@ namespace boost { namespace fusion {
|
||||
{}
|
||||
|
||||
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
|
||||
template<typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& rhs)
|
||||
{
|
||||
base::operator=(rhs);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
@ -129,9 +125,13 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
|
||||
(defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
||||
template <typename T0_>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(T0_&& t0
|
||||
, typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
|
||||
, typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename disable_if_c<
|
||||
boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler
|
||||
)
|
||||
: base(BOOST_FUSION_FWD_ELEM(T0_, t0), detail::nil_keyed_element())
|
||||
{}
|
||||
@ -140,11 +140,12 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
: base(std::forward<deque>(rhs))
|
||||
{}
|
||||
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq
|
||||
, typename disable_if<
|
||||
is_convertible<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>, T0>
|
||||
>::type* /*dummy*/ = 0)
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler)
|
||||
: base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
|
||||
{}
|
||||
template <typename T>
|
||||
@ -155,6 +156,14 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
base::operator=(BOOST_FUSION_FWD_ELEM(T, rhs));
|
||||
return *this;
|
||||
}
|
||||
// This copy op= is required because move ctor deletes copy op=.
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque const& rhs)
|
||||
{
|
||||
base::operator=(static_cast<base const&>(rhs));
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH endif
|
||||
@ -178,7 +187,7 @@ FUSION_HASH endif
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence> > >::type* /*dummy*/ = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
|
@ -24,7 +24,6 @@
|
||||
|
||||
#include <boost/mpl/plus.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
#include <boost/mpl/print.hpp>
|
||||
|
||||
#define FUSION_VOID(z, n, _) void_
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
#error "C++03 only! This file should not have been included"
|
||||
#endif
|
||||
|
||||
#include <boost/fusion/container/vector/limits.hpp>
|
||||
#include <boost/fusion/container/vector/detail/cpp03/limits.hpp>
|
||||
|
||||
#if !defined(FUSION_MAX_DEQUE_SIZE)
|
||||
# define FUSION_MAX_DEQUE_SIZE FUSION_MAX_VECTOR_SIZE
|
||||
|
@ -195,23 +195,17 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(rhs)
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
template<typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9> const& rhs)
|
||||
{
|
||||
base::operator=(rhs);
|
||||
return *this;
|
||||
}
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
@ -222,9 +216,13 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
}
|
||||
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename T0_>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(T0_&& t0
|
||||
, typename enable_if<is_convertible<T0_, T0> >::type* = 0
|
||||
, typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename disable_if_c<
|
||||
boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler
|
||||
)
|
||||
: base(std::forward<T0_>( t0), detail::nil_keyed_element())
|
||||
{}
|
||||
@ -233,11 +231,12 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(std::forward<deque>(rhs))
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9>&& seq
|
||||
, typename disable_if<
|
||||
is_convertible<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9>, T0>
|
||||
>::type* = 0)
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler)
|
||||
: base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9>>(seq))
|
||||
{}
|
||||
template <typename T>
|
||||
@ -248,6 +247,14 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
base::operator=(std::forward<T>( rhs));
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque const& rhs)
|
||||
{
|
||||
base::operator=(static_cast<base const&>(rhs));
|
||||
return *this;
|
||||
}
|
||||
# endif
|
||||
};
|
||||
template <>
|
||||
@ -265,7 +272,7 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence> > >::type* = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque() BOOST_NOEXCEPT {}
|
||||
|
@ -375,23 +375,17 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(rhs)
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
template<typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19> const& rhs)
|
||||
{
|
||||
base::operator=(rhs);
|
||||
return *this;
|
||||
}
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
@ -402,9 +396,13 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
}
|
||||
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename T0_>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(T0_&& t0
|
||||
, typename enable_if<is_convertible<T0_, T0> >::type* = 0
|
||||
, typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename disable_if_c<
|
||||
boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler
|
||||
)
|
||||
: base(std::forward<T0_>( t0), detail::nil_keyed_element())
|
||||
{}
|
||||
@ -413,11 +411,12 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(std::forward<deque>(rhs))
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19>&& seq
|
||||
, typename disable_if<
|
||||
is_convertible<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19>, T0>
|
||||
>::type* = 0)
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler)
|
||||
: base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19>>(seq))
|
||||
{}
|
||||
template <typename T>
|
||||
@ -428,6 +427,14 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
base::operator=(std::forward<T>( rhs));
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque const& rhs)
|
||||
{
|
||||
base::operator=(static_cast<base const&>(rhs));
|
||||
return *this;
|
||||
}
|
||||
# endif
|
||||
};
|
||||
template <>
|
||||
@ -445,7 +452,7 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence> > >::type* = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque() BOOST_NOEXCEPT {}
|
||||
|
@ -555,23 +555,17 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(rhs)
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
template<typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29> const& rhs)
|
||||
{
|
||||
base::operator=(rhs);
|
||||
return *this;
|
||||
}
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
@ -582,9 +576,13 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
}
|
||||
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename T0_>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(T0_&& t0
|
||||
, typename enable_if<is_convertible<T0_, T0> >::type* = 0
|
||||
, typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename disable_if_c<
|
||||
boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler
|
||||
)
|
||||
: base(std::forward<T0_>( t0), detail::nil_keyed_element())
|
||||
{}
|
||||
@ -593,11 +591,12 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(std::forward<deque>(rhs))
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29>&& seq
|
||||
, typename disable_if<
|
||||
is_convertible<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29>, T0>
|
||||
>::type* = 0)
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler)
|
||||
: base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29>>(seq))
|
||||
{}
|
||||
template <typename T>
|
||||
@ -608,6 +607,14 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
base::operator=(std::forward<T>( rhs));
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque const& rhs)
|
||||
{
|
||||
base::operator=(static_cast<base const&>(rhs));
|
||||
return *this;
|
||||
}
|
||||
# endif
|
||||
};
|
||||
template <>
|
||||
@ -625,7 +632,7 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence> > >::type* = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque() BOOST_NOEXCEPT {}
|
||||
|
@ -735,23 +735,17 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(rhs)
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
template<typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39> const& rhs)
|
||||
{
|
||||
base::operator=(rhs);
|
||||
return *this;
|
||||
}
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
@ -762,9 +756,13 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
}
|
||||
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename T0_>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(T0_&& t0
|
||||
, typename enable_if<is_convertible<T0_, T0> >::type* = 0
|
||||
, typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename disable_if_c<
|
||||
boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler
|
||||
)
|
||||
: base(std::forward<T0_>( t0), detail::nil_keyed_element())
|
||||
{}
|
||||
@ -773,11 +771,12 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(std::forward<deque>(rhs))
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39>&& seq
|
||||
, typename disable_if<
|
||||
is_convertible<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39>, T0>
|
||||
>::type* = 0)
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler)
|
||||
: base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39>>(seq))
|
||||
{}
|
||||
template <typename T>
|
||||
@ -788,6 +787,14 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
base::operator=(std::forward<T>( rhs));
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque const& rhs)
|
||||
{
|
||||
base::operator=(static_cast<base const&>(rhs));
|
||||
return *this;
|
||||
}
|
||||
# endif
|
||||
};
|
||||
template <>
|
||||
@ -805,7 +812,7 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence> > >::type* = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque() BOOST_NOEXCEPT {}
|
||||
|
@ -915,23 +915,17 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(rhs)
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
template<typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* = 0)
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(Sequence const& seq
|
||||
, typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
|
||||
: base(base::from_iterator(fusion::begin(seq)))
|
||||
{}
|
||||
template <typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49> const& rhs)
|
||||
{
|
||||
base::operator=(rhs);
|
||||
return *this;
|
||||
}
|
||||
template <typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
@ -942,9 +936,13 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
}
|
||||
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename T0_>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
explicit deque(T0_&& t0
|
||||
, typename enable_if<is_convertible<T0_, T0> >::type* = 0
|
||||
, typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
|
||||
, typename disable_if_c<
|
||||
boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler
|
||||
)
|
||||
: base(std::forward<T0_>( t0), detail::nil_keyed_element())
|
||||
{}
|
||||
@ -953,11 +951,12 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
: base(std::forward<deque>(rhs))
|
||||
{}
|
||||
template<typename U0 , typename U1 , typename U2 , typename U3 , typename U4 , typename U5 , typename U6 , typename U7 , typename U8 , typename U9 , typename U10 , typename U11 , typename U12 , typename U13 , typename U14 , typename U15 , typename U16 , typename U17 , typename U18 , typename U19 , typename U20 , typename U21 , typename U22 , typename U23 , typename U24 , typename U25 , typename U26 , typename U27 , typename U28 , typename U29 , typename U30 , typename U31 , typename U32 , typename U33 , typename U34 , typename U35 , typename U36 , typename U37 , typename U38 , typename U39 , typename U40 , typename U41 , typename U42 , typename U43 , typename U44 , typename U45 , typename U46 , typename U47 , typename U48 , typename U49>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
deque(deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49>&& seq
|
||||
, typename disable_if<
|
||||
is_convertible<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49>, T0>
|
||||
>::type* = 0)
|
||||
, detail::enabler_
|
||||
>::type = detail::enabler)
|
||||
: base(std::forward<deque<U0 , U1 , U2 , U3 , U4 , U5 , U6 , U7 , U8 , U9 , U10 , U11 , U12 , U13 , U14 , U15 , U16 , U17 , U18 , U19 , U20 , U21 , U22 , U23 , U24 , U25 , U26 , U27 , U28 , U29 , U30 , U31 , U32 , U33 , U34 , U35 , U36 , U37 , U38 , U39 , U40 , U41 , U42 , U43 , U44 , U45 , U46 , U47 , U48 , U49>>(seq))
|
||||
{}
|
||||
template <typename T>
|
||||
@ -968,6 +967,14 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
base::operator=(std::forward<T>( rhs));
|
||||
return *this;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque&
|
||||
operator=(deque const& rhs)
|
||||
{
|
||||
base::operator=(static_cast<base const&>(rhs));
|
||||
return *this;
|
||||
}
|
||||
# endif
|
||||
};
|
||||
template <>
|
||||
@ -985,7 +992,7 @@ deque(T_0 && t0 , T_1 && t1 , T_2 && t2 , T_3 && t3 , T_4 && t4 , T_5 && t5 , T_
|
||||
typename enable_if<
|
||||
mpl::and_<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::empty<Sequence> > >::type* = 0) BOOST_NOEXCEPT
|
||||
, result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
|
||||
{}
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
deque() BOOST_NOEXCEPT {}
|
||||
|
@ -13,6 +13,11 @@
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct fusion_sequence_tag;
|
||||
@ -59,7 +64,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
keyed_element(keyed_element&& rhs)
|
||||
: Rest(BOOST_FUSION_FWD_ELEM(Rest, rhs.forward_base()))
|
||||
: Rest(rhs.forward_base())
|
||||
, value_(BOOST_FUSION_FWD_ELEM(Value, rhs.value_))
|
||||
{}
|
||||
#endif
|
||||
@ -90,7 +95,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
Rest&& forward_base() BOOST_NOEXCEPT
|
||||
{
|
||||
return BOOST_FUSION_FWD_ELEM(Rest, *static_cast<Rest*>(this));
|
||||
return std::move(*static_cast<Rest*>(this));
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -114,9 +119,14 @@ namespace boost { namespace fusion { namespace detail
|
||||
{}
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
#if BOOST_WORKAROUND(BOOST_GCC, / 100 == 404)
|
||||
template <typename Value_, typename = typename enable_if<is_same<Value_, Value> >::type>
|
||||
#else
|
||||
typedef Value Value_;
|
||||
#endif
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
keyed_element(Value&& value, Rest&& rest)
|
||||
: Rest(BOOST_FUSION_FWD_ELEM(Rest, rest))
|
||||
keyed_element(Value_&& value, Rest&& rest)
|
||||
: Rest(std::move(rest))
|
||||
, value_(BOOST_FUSION_FWD_ELEM(Value, value))
|
||||
{}
|
||||
#endif
|
||||
@ -147,8 +157,8 @@ namespace boost { namespace fusion { namespace detail
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
keyed_element& operator=(keyed_element&& rhs)
|
||||
{
|
||||
base::operator=(std::forward<keyed_element>(rhs));
|
||||
value_ = BOOST_FUSION_FWD_ELEM(Value, rhs.value_);
|
||||
base::operator=(rhs.forward_base());
|
||||
value_ = std::move(rhs.value_);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
102
include/boost/fusion/container/generation/detail/pp_list_tie.hpp
Normal file
102
include/boost/fusion/container/generation/detail/pp_list_tie.hpp
Normal file
@ -0,0 +1,102 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PP_IS_ITERATING
|
||||
#if !defined(FUSION_PP_LIST_TIE_07192005_0109)
|
||||
#define FUSION_PP_LIST_TIE_07192005_0109
|
||||
|
||||
#include <boost/preprocessor/iterate.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/fusion/container/list/list.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
#include <boost/fusion/container/generation/detail/preprocessed/list_tie.hpp>
|
||||
#else
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/list_tie" FUSION_MAX_LIST_SIZE_STR".hpp")
|
||||
#endif
|
||||
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <
|
||||
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
|
||||
FUSION_MAX_LIST_SIZE, typename T, void_)
|
||||
, typename Extra = void_
|
||||
>
|
||||
struct list_tie;
|
||||
}
|
||||
|
||||
// $$$ shouldn't we remove_reference first to allow references? $$$
|
||||
#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
|
||||
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_list_tie.hpp>
|
||||
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_LIST_SIZE)
|
||||
#include BOOST_PP_ITERATE()
|
||||
|
||||
#undef BOOST_FUSION_REF
|
||||
|
||||
}}
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
|
||||
#endif
|
||||
#else // defined(BOOST_PP_IS_ITERATING)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Preprocessor vertical repetition code
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define N BOOST_PP_ITERATION()
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
#define TEXT(z, n, text) , text
|
||||
struct list_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
|
||||
#undef TEXT
|
||||
{
|
||||
typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
|
||||
};
|
||||
}
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
|
||||
list_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & arg))
|
||||
{
|
||||
return list<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
|
||||
BOOST_PP_ENUM_PARAMS(N, arg));
|
||||
}
|
||||
|
||||
#undef N
|
||||
#endif // defined(BOOST_PP_IS_ITERATING)
|
||||
|
@ -0,0 +1,115 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PP_IS_ITERATING
|
||||
#if !defined(FUSION_PP_MAKE_LIST_07192005_1239)
|
||||
#define FUSION_PP_MAKE_LIST_07192005_1239
|
||||
|
||||
#include <boost/preprocessor/iterate.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/fusion/container/list/list.hpp>
|
||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
#include <boost/fusion/container/generation/detail/preprocessed/make_list.hpp>
|
||||
#else
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/make_list" FUSION_MAX_LIST_SIZE_STR".hpp")
|
||||
#endif
|
||||
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <
|
||||
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
|
||||
FUSION_MAX_LIST_SIZE, typename T, void_)
|
||||
, typename Extra = void_
|
||||
>
|
||||
struct make_list;
|
||||
|
||||
template <>
|
||||
struct make_list<>
|
||||
{
|
||||
typedef list<> type;
|
||||
};
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline list<>
|
||||
make_list()
|
||||
{
|
||||
return list<>();
|
||||
}
|
||||
|
||||
#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
|
||||
typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
|
||||
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_list.hpp>
|
||||
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_LIST_SIZE)
|
||||
#include BOOST_PP_ITERATE()
|
||||
|
||||
#undef BOOST_FUSION_AS_FUSION_ELEMENT
|
||||
|
||||
}}
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
|
||||
#endif
|
||||
#else // defined(BOOST_PP_IS_ITERATING)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Preprocessor vertical repetition code
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define N BOOST_PP_ITERATION()
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
#define TEXT(z, n, text) , text
|
||||
struct make_list< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_LIST_SIZE, TEXT, void_) >
|
||||
#undef TEXT
|
||||
{
|
||||
typedef list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
|
||||
};
|
||||
}
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
|
||||
make_list(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& arg))
|
||||
{
|
||||
return list<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
|
||||
BOOST_PP_ENUM_PARAMS(N, arg));
|
||||
}
|
||||
|
||||
#undef N
|
||||
#endif // defined(BOOST_PP_IS_ITERATING)
|
||||
|
134
include/boost/fusion/container/generation/detail/pp_make_set.hpp
Normal file
134
include/boost/fusion/container/generation/detail/pp_make_set.hpp
Normal file
@ -0,0 +1,134 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PP_IS_ITERATING
|
||||
#if !defined(FUSION_MAKE_SET_09162005_1125)
|
||||
#define FUSION_MAKE_SET_09162005_1125
|
||||
|
||||
#include <boost/preprocessor/iterate.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/container/set/set.hpp>
|
||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||
#include <boost/fusion/support/pair.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
#include <boost/fusion/container/generation/detail/preprocessed/make_set.hpp>
|
||||
#else
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/make_set" FUSION_MAX_SET_SIZE_STR".hpp")
|
||||
#endif
|
||||
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#define FUSION_HASH #
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <
|
||||
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
|
||||
FUSION_MAX_VECTOR_SIZE, typename T, void_)
|
||||
, typename Extra = void_
|
||||
>
|
||||
struct make_set;
|
||||
|
||||
template <>
|
||||
struct make_set<>
|
||||
{
|
||||
typedef set<> type;
|
||||
};
|
||||
}
|
||||
|
||||
// XXX:
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
FUSION_HASH if defined(BOOST_CLANG)
|
||||
BOOST_CXX14_CONSTEXPR
|
||||
FUSION_HASH else
|
||||
BOOST_CONSTEXPR
|
||||
FUSION_HASH endif
|
||||
#else
|
||||
#if defined(BOOST_CLANG)
|
||||
BOOST_CXX14_CONSTEXPR
|
||||
#else
|
||||
BOOST_CONSTEXPR
|
||||
#endif
|
||||
#endif
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline set<>
|
||||
make_set()
|
||||
{
|
||||
return set<>();
|
||||
}
|
||||
|
||||
#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
|
||||
typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
|
||||
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_set.hpp>
|
||||
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
|
||||
#include BOOST_PP_ITERATE()
|
||||
|
||||
#undef BOOST_FUSION_ELEMENT
|
||||
#undef BOOST_FUSION_AS_ELEMENT
|
||||
|
||||
}}
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#undef FUSION_HASH
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
|
||||
#endif
|
||||
#else // defined(BOOST_PP_IS_ITERATING)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Preprocessor vertical repetition code
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define N BOOST_PP_ITERATION()
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
#define TEXT(z, n, text) , text
|
||||
struct make_set< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_SET_SIZE, TEXT, void_) >
|
||||
#undef TEXT
|
||||
{
|
||||
typedef set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
|
||||
};
|
||||
}
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
|
||||
make_set(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& arg))
|
||||
{
|
||||
return set<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
|
||||
BOOST_PP_ENUM_PARAMS(N, arg));
|
||||
}
|
||||
|
||||
#undef N
|
||||
#endif // defined(BOOST_PP_IS_ITERATING)
|
||||
|
@ -0,0 +1,115 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PP_IS_ITERATING
|
||||
#if !defined(FUSION_MAKE_VECTOR_07162005_0243)
|
||||
#define FUSION_MAKE_VECTOR_07162005_0243
|
||||
|
||||
#include <boost/preprocessor/iterate.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
#include <boost/fusion/container/generation/detail/preprocessed/make_vector.hpp>
|
||||
#else
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/make_vector" FUSION_MAX_VECTOR_SIZE_STR".hpp")
|
||||
#endif
|
||||
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <
|
||||
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
|
||||
FUSION_MAX_VECTOR_SIZE, typename T, void_)
|
||||
, typename Extra = void_
|
||||
>
|
||||
struct make_vector;
|
||||
|
||||
template <>
|
||||
struct make_vector<>
|
||||
{
|
||||
typedef vector0<> type;
|
||||
};
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline vector0<>
|
||||
make_vector()
|
||||
{
|
||||
return vector0<>();
|
||||
}
|
||||
|
||||
#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
|
||||
typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
|
||||
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_vector.hpp>
|
||||
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
|
||||
#include BOOST_PP_ITERATE()
|
||||
|
||||
#undef BOOST_FUSION_AS_FUSION_ELEMENT
|
||||
|
||||
}}
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
|
||||
#endif
|
||||
#else // defined(BOOST_PP_IS_ITERATING)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Preprocessor vertical repetition code
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define N BOOST_PP_ITERATION()
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
#define TEXT(z, n, text) , text
|
||||
struct make_vector< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
|
||||
#undef TEXT
|
||||
{
|
||||
typedef BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
|
||||
};
|
||||
}
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
|
||||
make_vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& arg))
|
||||
{
|
||||
return BOOST_PP_CAT(vector, N)<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
|
||||
BOOST_PP_ENUM_PARAMS(N, arg));
|
||||
}
|
||||
|
||||
#undef N
|
||||
#endif // defined(BOOST_PP_IS_ITERATING)
|
||||
|
@ -0,0 +1,100 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PP_IS_ITERATING
|
||||
#if !defined(FUSION_VECTOR_TIE_07192005_1242)
|
||||
#define FUSION_VECTOR_TIE_07192005_1242
|
||||
|
||||
#include <boost/preprocessor/iterate.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
||||
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
||||
#include <boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp>
|
||||
#else
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/vector_tie" FUSION_MAX_VECTOR_SIZE_STR".hpp")
|
||||
#endif
|
||||
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#endif
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <
|
||||
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
|
||||
FUSION_MAX_VECTOR_SIZE, typename T, void_)
|
||||
, typename Extra = void_
|
||||
>
|
||||
struct vector_tie;
|
||||
}
|
||||
|
||||
#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
|
||||
|
||||
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_vector_tie.hpp>
|
||||
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
|
||||
#include BOOST_PP_ITERATE()
|
||||
|
||||
#undef BOOST_FUSION_REF
|
||||
}}
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
|
||||
#endif
|
||||
#else // defined(BOOST_PP_IS_ITERATING)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Preprocessor vertical repetition code
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define N BOOST_PP_ITERATION()
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
#define TEXT(z, n, text) , text
|
||||
struct vector_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_) >
|
||||
#undef TEXT
|
||||
{
|
||||
typedef vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
|
||||
};
|
||||
}
|
||||
|
||||
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
|
||||
vector_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & arg))
|
||||
{
|
||||
return vector<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
|
||||
BOOST_PP_ENUM_PARAMS(N, arg));
|
||||
}
|
||||
|
||||
#undef N
|
||||
#endif // defined(BOOST_PP_IS_ITERATING)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user