29 template <std::size_t... Is,
typename... Ts>
30 [[nodiscard]] constexpr
auto Take(std::index_sequence<Is...>,
31 const std::tuple<Ts...>& t) {
32 return std::tuple{std::get<Is>(t)...};
35 template <std::size_t N,
typename... Ts>
36 [[nodiscard]] constexpr
auto Take(
const std::tuple<Ts...>& t) {
37 return Take(std::make_index_sequence<N>(), t);
40 template <std::size_t N, std::size_t... Is,
typename... Ts>
41 [[nodiscard]] constexpr
auto Drop(std::index_sequence<Is...>,
42 const std::tuple<Ts...>& t) {
43 return std::tuple{std::get<N + Is>(t)...};
46 template <std::size_t N,
typename... Ts>
47 [[nodiscard]] constexpr
auto Drop(
const std::tuple<Ts...>& t) {
48 constexpr std::size_t size =
sizeof...(Ts);
49 return Drop<N>(std::make_index_sequence<size - N>(), t);
52 template <
typename Tuple,
typename Function>
53 [[nodiscard]] constexpr
auto Transform(Tuple&& tuple, Function f) {
54 return std::apply([&](
auto&&... xs) {
return std::tuple{f(xs)...}; }, tuple);
57 template <std::size_t... Is,
typename T,
typename... Ts>
58 [[nodiscard]] constexpr
auto AsArray(std::index_sequence<Is...>,
59 const std::tuple<T, Ts...>& t) {
60 return std::array<T,
sizeof...(Is)>{std::get<Is>(t)...};
63 template <
typename T,
typename... Ts>
64 [[nodiscard]] constexpr
auto AsArray(
const std::tuple<T, Ts...>& t) {
68 template <
typename TupleLike>
69 [[nodiscard]] constexpr
auto AsTuple(
const TupleLike& t) {
70 return std::apply([](
const auto&... xs) {
return std::tuple{xs...}; }, t);
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
constexpr auto Transform(Tuple &&tuple, Function f)
Definition: tuple.hpp:53
constexpr auto Drop(std::index_sequence< Is... >, const std::tuple< Ts... > &t)
Definition: tuple.hpp:41
constexpr std::array< std::ptrdiff_t, Extents::rank()> AsArray(Extents e) noexcept
Definition: PatchDataView.hpp:154
make_integer_sequence< std::size_t, N > make_index_sequence
Definition: type_traits.hpp:173
constexpr auto Take(std::index_sequence< Is... >, const std::tuple< Ts... > &t)
Definition: tuple.hpp:30
constexpr auto AsTuple(const TupleLike &t)
Definition: tuple.hpp:69