AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
tuples.h
1#ifndef UTILS_TUPLES_H
2#define UTILS_TUPLES_H
3
4#include <tuple>
5
6namespace utils {
7template <class... Ts, std::size_t... Is>
8auto flatten_tuple_elements(std::tuple<Ts...>&& t, std::index_sequence<Is...>);
9
10template <class T>
11auto flatten_tuple(T&& t)
12{
13 return std::make_tuple(std::move(t));
14}
15
16template <class... Ts>
17auto flatten_tuple(std::tuple<Ts...>&& t)
18{
19 constexpr std::size_t tuple_size =
20 std::tuple_size<std::tuple<Ts...>>::value;
21 return flatten_tuple_elements(
22 std::move(t),
23 std::make_index_sequence<tuple_size>());
24}
25
26template <class... Ts, std::size_t... Is>
27auto flatten_tuple_elements(std::tuple<Ts...>&& t, std::index_sequence<Is...>)
28{
29 return std::tuple_cat(flatten_tuple(std::get<Is>(std::move(t)))...);
30}
31} // namespace utils
32
33#endif