1 /*============================================================================= 2 Copyright (c) 2001-2011 Joel de Guzman 3 Copyright (c) 2006 Dan Marsden 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 #ifndef BOOST_PP_IS_ITERATING 9 #if !defined(FUSION_ZIP_HPP_20060125_2058) 10 #define FUSION_ZIP_HPP_20060125_2058 11 12 #include <boost/fusion/view/zip_view.hpp> 13 #include <boost/fusion/adapted/mpl.hpp> 14 #include <boost/fusion/container/vector.hpp> 15 #include <boost/fusion/container/vector/convert.hpp> 16 #include <boost/fusion/support/detail/pp_round.hpp> 17 #include <boost/type_traits/add_reference.hpp> 18 #include <boost/preprocessor/repetition/enum.hpp> 19 #include <boost/preprocessor/repetition/enum_params.hpp> 20 #include <boost/preprocessor/repetition/enum_binary_params.hpp> 21 #include <boost/preprocessor/repetition/repeat_from_to.hpp> 22 #include <boost/preprocessor/arithmetic/inc.hpp> 23 #include <boost/preprocessor/iteration/iterate.hpp> 24 #include <boost/mpl/vector.hpp> 25 #include <boost/mpl/transform.hpp> 26 #include <boost/mpl/placeholders.hpp> 27 28 #if !defined(FUSION_MAX_ZIP_SEQUENCES) 29 #define FUSION_MAX_ZIP_SEQUENCES 10 30 #endif 31 32 #define FUSION_MAX_ZIP_SEQUENCES_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_ZIP_SEQUENCES)) 33 34 #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) 35 #include <boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp> 36 #else 37 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) 38 #pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/zip" FUSION_MAX_ZIP_SEQUENCES_STR ".hpp") 39 #endif 40 41 /*============================================================================= 42 Copyright (c) 2001-2011 Joel de Guzman 43 Copyright (c) 2006 Dan Marsden 44 45 Distributed under the Boost Software License, Version 1.0. (See accompanying 46 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 47 48 This is an auto-generated file. Do not edit! 49 ==============================================================================*/ 50 51 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) 52 #pragma wave option(preserve: 1) 53 #endif 54 55 namespace boost { namespace fusion 56 { 57 struct void_; 58 59 namespace result_of 60 { 61 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PP_INC(FUSION_MAX_ZIP_SEQUENCES), typename T, fusion::void_)> 62 struct zip; 63 } 64 65 #define FUSION_TEXT(z, n, text) , text 66 67 #define BOOST_PP_FILENAME_1 \ 68 <boost/fusion/algorithm/transformation/zip.hpp> 69 #define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_ZIP_SEQUENCES) 70 #include BOOST_PP_ITERATE() 71 72 #undef FUSION_TEXT 73 74 }} 75 76 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) 77 #pragma wave option(output: null) 78 #endif 79 80 #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES 81 82 #endif 83 84 #else 85 86 #define ZIP_ITERATION BOOST_PP_ITERATION() 87 88 namespace result_of 89 { 90 template< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T) > 91 struct zip< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) 92 BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(ZIP_ITERATION), FUSION_MAX_ZIP_SEQUENCES, FUSION_TEXT, void_) 93 > 94 { 95 typedef mpl::vector< BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, T) > sequences; 96 typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params; 97 typedef zip_view<typename result_of::as_vector<ref_params>::type> type; 98 }; 99 } 100 101 #define FUSION_REF_PARAM(z, n, data) const T ## n& 102 103 template<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T)> 104 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED 105 inline typename result_of::zip<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, const T)>::type zip(BOOST_PP_ENUM_BINARY_PARAMS (ZIP_ITERATION,T,const & t))106 zip(BOOST_PP_ENUM_BINARY_PARAMS(ZIP_ITERATION, T, const& t)) 107 { 108 fusion::vector<BOOST_PP_ENUM(ZIP_ITERATION, FUSION_REF_PARAM, _)> seqs( 109 BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, t)); 110 return typename result_of::zip<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, const T)>::type( 111 seqs); 112 } 113 114 #undef FUSION_REF_PARAM 115 #undef ZIP_ITERATION 116 117 #endif 118