Skip to content

Commit 842cb84

Browse files
committed
Refactored tuple functionality
1 parent 86e7135 commit 842cb84

File tree

4 files changed

+56
-77
lines changed

4 files changed

+56
-77
lines changed

include/splines/functionspace.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include <splines/bspline.hpp>
2020
#include <splines/boundary.hpp>
2121
#include <utils/container.hpp>
22-
#include <utils/type_traits.hpp>
22+
#include <utils/tuple.hpp>
2323
#include <utils/zip.hpp>
2424

2525
namespace iganet {

include/utils.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include <utils/solver.hpp>
2727
#include <utils/tensorarray.hpp>
2828
#include <utils/tuple.hpp>
29-
#include <utils/type_traits.hpp>
3029
#include <utils/uuid.hpp>
3130
#include <utils/vslice.hpp>
3231
#include <utils/zip.hpp>

include/utils/tuple.hpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,65 @@
1515
#pragma once
1616

1717
#include <tuple>
18+
#include <type_traits>
1819
#include <vector>
1920

2021
namespace iganet::utils {
2122

23+
/// @brief Type trait for std::tuple type
24+
/// @{
25+
template <class T> struct is_tuple : std::false_type {};
26+
27+
template <class... Ts> struct is_tuple<std::tuple<Ts...>> : std::true_type {};
28+
/// @}
29+
30+
template <class T> inline constexpr bool is_tuple_v = is_tuple<T>::value;
31+
32+
/// @brief Type trait for std::tuple<std::tuple> type
33+
/// @{
34+
template <class T> struct is_tuple_of_tuples : std::false_type {};
35+
36+
template <class... Ts>
37+
struct is_tuple_of_tuples<std::tuple<Ts...>>
38+
: std::common_type_t<is_tuple<Ts>...> {};
39+
/// @}
40+
41+
/// @brief Alias for is_tuple_of_tuples::type
42+
template <class T> using is_tuple_of_tuples_t = is_tuple_of_tuples<T>::type;
43+
44+
/// @brief Alias for is_tuple_of_tuples::value
45+
template <class T>
46+
inline constexpr auto is_tuple_of_tuples_v = is_tuple_of_tuples<T>::value;
47+
48+
/// @brief Type trait for concatenating std::tuples
49+
/// @{
50+
template <typename... Tuples> struct tuple_cat;
51+
52+
template <> struct tuple_cat<> {
53+
using type = std::tuple<>;
54+
};
55+
56+
template <typename... Ts, typename... Tuples>
57+
struct tuple_cat<std::tuple<Ts...>, Tuples...> {
58+
using type = decltype(std::tuple_cat(
59+
std::declval<std::tuple<Ts...>>(),
60+
std::declval<typename tuple_cat<Tuples...>::type>()));
61+
};
62+
63+
template <typename T, typename... Tuples> struct tuple_cat<T, Tuples...> {
64+
using type = decltype(std::tuple_cat(
65+
std::declval<std::tuple<T>>(),
66+
std::declval<typename tuple_cat<Tuples...>::type>()));
67+
};
68+
/// @}
69+
70+
/// @brief Alias for tuple_cat::type
71+
template <typename... Tuples> using tuple_cat_t = tuple_cat<Tuples...>::type;
72+
73+
/// @brief Alias for tuple_cat::value
74+
template <typename... Tuples>
75+
inline constexpr auto tuple_cat_v = tuple_cat<Tuples...>::value;
76+
2277
/// @brief Concatenates the entries of a std::tuple object into a
2378
/// single Torch tensor along the given dimension
2479
template <typename... Tensors>

include/utils/type_traits.hpp

Lines changed: 0 additions & 75 deletions
This file was deleted.

0 commit comments

Comments
 (0)