annotate DEPENDENCIES/generic/include/boost/range/detail/combine_cxx03.hpp @ 133:4acb5d8d80b6 tip

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