zengine-old/engine/3rdparty/zlib/include/meta/tuple.inl

31 lines
911 B
Plaintext
Raw Permalink Normal View History

2024-06-16 22:52:45 +08:00
#pragma once
#include <utility>
#include "tuple.h"
namespace meta
{
namespace detail
{
template<typename T, typename ... Args, unsigned ... Indexes>
auto tuple_construct_helper(const std::tuple<Args...>& arg_tuple, std::index_sequence<Indexes...>)
{
return T{(std::get<Indexes>(arg_tuple))...};
}
}
template<typename T, typename ... Args>
constexpr auto tuple_construct(const std::tuple<Args...>& arg_tuple) noexcept
{
return detail::tuple_construct_helper<T>(arg_tuple, std::make_index_sequence < std::tuple_size_v<std::decay_t<decltype(arg_tuple)> >> {});
}
template<typename ... T1s, typename ...T2s>
struct tuple_join<std::tuple<T1s...>, std::tuple<T2s...>>
{
using type = std::tuple<T1s..., T2s...>;
};
template<typename ... Ts, template<typename ...> typename Wrap>
struct tuple_wrap<std::tuple<Ts...>, Wrap>
{
using type = std::tuple<Wrap<Ts>...>;
};
}