8 #ifndef SIG_UTIL_ZIP_HPP
9 #define SIG_UTIL_ZIP_HPP
39 #if (SIG_MSVC_ENV && !(SIG_MSVC_VER <= 140)) || (SIG_GCC_ENV) || (SIG_CLANG_ENV)
40 ,
typename std::enable_if< And(impl::container_traits<typename impl::remove_const_reference<Cs>::type>::exist...) >::type*& =
enabler
43 auto zip(Cs&&... lists)
52 return std::make_tuple(vs...);
55 std::forward<Cs>(lists)...
81 template <uint Index,
class CT,
82 class T =
typename std::tuple_element<Index, typename impl::container_traits<typename impl::remove_const_reference<CT>::type>::value_type>::type,
83 class R = std::vector<T>
91 for (
auto&& t : std::forward<CT>(list_tuple)){
99 template<
class CT, uint I = 0,
100 class CTR =
typename impl::remove_const_reference<CT>::type,
101 typename std::enable_if<I + 1 == std::tuple_size<typename impl::container_traits<CTR>::value_type>::value,
void>::type*& =
enabler
105 return std::make_tuple(unzip<I>(std::forward<CT>(c_tuple)));
107 template<
class CT, uint I = 0,
109 typename std::enable_if<I + 1 < std::tuple_size<typename impl::container_traits<CTR>::value_type>::value,
void>::type*& =
enabler
113 return std::tuple_cat(std::make_tuple(unzip<I>(std::forward<CT>(c_tuple))), impl::unzipImpl_<CT, I + 1>(std::forward<CT>(c_tuple)));
145 #if SIG_ENABLE_TUPLE_ZIP
148 template <
class TC,
size_t... Is>
149 auto zipImpl_(TC&& t_lists, std::index_sequence<Is...>)
151 return zip(std::get<Is>(std::forward<TC>(t_lists))...);
167 template <
class... Cs>
168 auto zip(std::tuple<Cs...>
const& t_lists)
170 using Indices = std::make_index_sequence<
sizeof...(Cs)>;
171 return impl::zipImpl_(t_lists, Indices());
174 template <
class... Cs>
175 auto zip(std::tuple<Cs...>&& t_lists)
177 using Indices = std::make_index_sequence<
sizeof...(Cs)>;
178 return impl::zipImpl_(std::move(t_lists), Indices());
auto unzipImpl_(CT &&c_tuple)
typename std::remove_const< typename std::remove_reference< T >::type >::type type
#define SIG_ENABLE_MOVEITERATOR
auto variadicZipWith(F &&func, C1 &&list1, Cs &&...lists)
n引数高階関数
auto zip(Cs &&...lists)
複数のコンテナから、タプルのコンテナを作る
auto unzip(CT &&list_tuple) -> R
タプルのコンテナから、指定したindexのコンテナを取り出す