Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/range/detail/combine_cxx03.hpp @ 102:f46d142149f5
Whoops, finish that update
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:13:41 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
101:c530137014c0 | 102:f46d142149f5 |
---|---|
1 // Boost.Range library | |
2 // | |
3 // Copyright Neil Groves 2014. Use, modification and | |
4 // distribution is subject to the Boost Software License, Version | |
5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
6 // http://www.boost.org/LICENSE_1_0.txt) | |
7 // | |
8 // For more information, see http://www.boost.org/libs/range/ | |
9 // | |
10 #ifndef BOOST_RANGE_DETAIL_COMBINE_CXX03_HPP | |
11 #define BOOST_RANGE_DETAIL_COMBINE_CXX03_HPP | |
12 | |
13 #ifndef BOOST_RANGE_MIN_COMBINE_ARGS | |
14 #define BOOST_RANGE_MIN_COMBINE_ARGS 2 | |
15 #endif | |
16 | |
17 #ifndef BOOST_RANGE_MAX_COMBINE_ARGS | |
18 #define BOOST_RANGE_MAX_COMBINE_ARGS 5 | |
19 #endif | |
20 | |
21 #include <boost/config.hpp> | |
22 #include <boost/iterator/zip_iterator.hpp> | |
23 #include <boost/preprocessor/arithmetic/dec.hpp> | |
24 #include <boost/preprocessor/arithmetic/div.hpp> | |
25 #include <boost/preprocessor/arithmetic/mul.hpp> | |
26 #include <boost/preprocessor/control.hpp> | |
27 #include <boost/preprocessor/control/while.hpp> | |
28 #include <boost/preprocessor/facilities/empty.hpp> | |
29 #include <boost/preprocessor/facilities/identity.hpp> | |
30 #include <boost/preprocessor/iteration/local.hpp> | |
31 #include <boost/preprocessor/punctuation/comma.hpp> | |
32 #include <boost/preprocessor/repetition.hpp> | |
33 #include <boost/preprocessor/tuple/elem.hpp> | |
34 #include <boost/range/iterator_range_core.hpp> | |
35 #include <boost/type_traits/remove_reference.hpp> | |
36 #include <boost/mpl/transform.hpp> | |
37 #include <boost/utility/result_of.hpp> | |
38 | |
39 #include <vector> | |
40 #include <list> | |
41 | |
42 namespace boost | |
43 { | |
44 namespace range_detail | |
45 { | |
46 | |
47 template<typename F, typename T, int SIZE> | |
48 struct combined_result_impl; | |
49 | |
50 template<typename F, typename T> | |
51 struct combined_result | |
52 : combined_result_impl<F, T, tuples::length<T>::value> | |
53 { | |
54 }; | |
55 | |
56 #define BOOST_RANGE_combined_element(z, n, data) \ | |
57 typename tuples::element<n, T>::type | |
58 | |
59 #define BOOST_RANGE_combined_result(z, n, data) \ | |
60 template<typename F, typename T> \ | |
61 struct combined_result_impl <F,T,n> \ | |
62 : result_of<F(BOOST_PP_ENUM(n, BOOST_RANGE_combined_element, ~))> \ | |
63 { \ | |
64 }; | |
65 | |
66 #define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combined_result(~,n,~) | |
67 | |
68 #define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \ | |
69 BOOST_RANGE_MAX_COMBINE_ARGS) | |
70 #include BOOST_PP_LOCAL_ITERATE() | |
71 | |
72 #define BOOST_RANGE_combined_get(z, n, data) get<n>(tuple) | |
73 | |
74 #define BOOST_RANGE_combined_unpack(z, n, data) \ | |
75 template<typename F, typename T> inline \ | |
76 typename combined_result<F,T>::type \ | |
77 unpack_(mpl::int_<n>, F f, const T& tuple) \ | |
78 { \ | |
79 return f(BOOST_PP_ENUM(n, BOOST_RANGE_combined_get, ~)); \ | |
80 } | |
81 | |
82 #define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combined_unpack(~,n,~) | |
83 #define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \ | |
84 BOOST_RANGE_MAX_COMBINE_ARGS) | |
85 #include BOOST_PP_LOCAL_ITERATE() | |
86 | |
87 } // namespace range_detail | |
88 | |
89 namespace range | |
90 { | |
91 | |
92 #define BOOST_RANGE_combined_seq(z, n, data) boost::data(BOOST_PP_CAT(r,n)) | |
93 | |
94 #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES | |
95 | |
96 #include <boost/range/detail/combine_no_rvalue.hpp> | |
97 | |
98 #else // by using rvalue references we avoid requiring 2^n overloads. | |
99 | |
100 #include <boost/range/detail/combine_rvalue.hpp> | |
101 | |
102 #endif | |
103 | |
104 #define BOOST_PP_LOCAL_MACRO(n) BOOST_RANGE_combine(~,n,~) | |
105 #define BOOST_PP_LOCAL_LIMITS (BOOST_RANGE_MIN_COMBINE_ARGS, \ | |
106 BOOST_RANGE_MAX_COMBINE_ARGS) | |
107 #include BOOST_PP_LOCAL_ITERATE() | |
108 | |
109 } // namespace range | |
110 | |
111 using boost::range::combine; | |
112 | |
113 } // namespace boost | |
114 | |
115 #endif // include guard | |
116 | |
117 #undef BOOST_RANGE_combined_element | |
118 #undef BOOST_RANGE_combined_result | |
119 #undef BOOST_RANGE_combined_get | |
120 #undef BOOST_RANGE_combined_unpack | |
121 #undef BOOST_RANGE_combined_seq | |
122 #undef BOOST_RANGE_combined_exp_pred | |
123 #undef BOOST_RANGE_combined_exp_op | |
124 #undef BOOST_RANGE_combined_exp | |
125 #undef BOOST_RANGE_combined_bitset_pred | |
126 #undef BOOST_RANGE_combined_bitset_op | |
127 #undef BOOST_RANGE_combined_bitset | |
128 #undef BOOST_RANGE_combined_range_iterator | |
129 #undef BOOST_RANGE_combined_args | |
130 #undef BOOST_RANGE_combine_impl | |
131 #undef BOOST_RANGE_combine |