8 #ifndef INCLUDE_MOLASSEMBLER_TEMPLE_CONSTEXPR_TUPLE_TYPE_H
9 #define INCLUDE_MOLASSEMBLER_TEMPLE_CONSTEXPR_TUPLE_TYPE_H
16 namespace Molassembler {
25 constexpr
auto handleValueVariants(
27 std::is_function<decltype(T::value)>::value,
36 constexpr
auto handleValueVariants(
38 !std::is_function<decltype(T::value)>::value,
52 template<
typename ...>
class TemplateFunction,
54 > constexpr
auto unpackHelper(std::index_sequence<I...> ) {
59 return handleValueVariants<
61 std::tuple_element_t<I, Tuple>...
73 template<
typename>
class TemplateFunction,
75 > constexpr
auto mapHelper(std::index_sequence<Inds...> ) {
79 std::tuple_element_t<Inds, TupleType>
93 > constexpr
unsigned countTypeHelper(
94 std::index_sequence<Inds...>
96 constexpr std::array<unsigned,
sizeof...(Inds)> trues {{
97 static_cast<unsigned>(
99 std::tuple_element_t<Inds, TupleType>,
107 for(
unsigned long i = 0; i <
sizeof...(Inds); ++i) {
115 struct RepeatTypeHelper {
116 using BaseType = std::tuple<T>;
118 template<std::size_t ... Inds>
119 static constexpr
auto value(std::index_sequence<Inds...> )
120 -> std::tuple<std::tuple_element_t<Inds * 0, BaseType>...> {}
132 template<
typename ...>
class TemplateFunction
134 return Detail::unpackHelper<Tuple, TemplateFunction>(
135 std::make_index_sequence<
136 std::tuple_size<Tuple>::value
148 template<
typename>
class TemplateFunction
150 return Detail::mapHelper<TupleType, TemplateFunction>(
151 std::make_index_sequence<
152 std::tuple_size<TupleType>::value
162 return Detail::countTypeHelper<TupleType, T>(
163 std::make_index_sequence<
164 std::tuple_size<TupleType>::value
178 template<
typename>
class UnaryPredicate
180 constexpr
size_t N = std::tuple_size<TupleType>::value;
181 constexpr
auto mapped = map<TupleType, UnaryPredicate>();
182 for(
unsigned i = 0; i < N; ++i) {
191 template<
typename T,
unsigned repeats>
193 using type = decltype(
194 Detail::RepeatTypeHelper<T>::value(
195 std::make_index_sequence<repeats>()
constexpr auto unpackToFunction()
Definition: TupleType.h:133
constexpr auto map()
Definition: TupleType.h:149
Definition: TupleType.h:192
constexpr bool allOf()
all_of with tuple types and template metafunctions
Definition: TupleType.h:179
constexpr unsigned countType()
Counts how often a type is contained in a tuple type.
Definition: TupleType.h:161
constexpr T sum(const ArrayType< T, size > &array)
Sum up all elements of an array-like class.
Definition: Containers.h:111