3 #ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH 4 #define DUNE_FUNCTIONS_COMMON_UTILITY_HH 10 #include <dune/typetree/utility.hh> 17 template<
class F,
class size_type, size_type firstValue,
class... Args>
18 auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue> values,
const size_type& i, F&& f, Args&&... args)
19 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
21 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
24 template<
class F,
class size_type, size_type firstValue, size_type secondValue, size_type... otherValues,
class... Args>
25 auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values,
const size_type i, F&& f, Args&&... args)
26 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))
29 return f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);
30 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);
56 template<std::size_t end,
class F,
class size_type,
class... Args>
58 ->decltype(f(Dune::TypeTree::Indices::_0, std::forward<Args>(args)...))
60 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);
67 template<
template<
class...>
class T,
class List>
71 template<
template<
class...>
class T,
template<
class...>
class ListType,
class... Args>
90 template<
template<
class...>
class T,
class ArgTuple>
97 template<
template<
class...>
class T,
class... Tuple>
101 template<
template<
class...>
class T,
class... Args1>
104 using Type = std::tuple<T<Args1>...>;
107 template<
template<
class...>
class T,
class... Args1,
class... Args2>
110 using Type = std::tuple<T<Args1, Args2>...>;
127 template<
template<
class...>
class F,
class... Tuples>
134 template<
class F,
class... T, std::size_t... k>
136 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))
138 return std::make_tuple(f(std::get<k>(tuple))...);
141 template<
class F,
class... T1,
class...T2, std::size_t... k>
142 auto transformTupleHelper(F&& f,
const std::tuple<T1...>& tuple1,
const std::tuple<T2...>& tuple2, std::index_sequence<k...>)
143 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))
145 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);
161 template<
class F,
class... T>
181 template<
class F,
class... T1,
class... T2>
182 auto transformTuple(F&& f,
const std::tuple<T1...>& tuple1,
const std::tuple<T2...>& tuple2)
192 template<
class IntegerSequence>
196 template<
class I, I... k>
199 using Type = std::tuple<std::integral_constant<I, k>...>;
207 template<
class IntegerSequence>
220 using type =
typename std::tuple_element<
sizeof...(T)-1, std::tuple<T...>>::
type;
227 template<
class T,
class I>
230 template<
class... T, std::size_t... I>
256 #endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH Definition: utility.hh:193
Definition: utility.hh:98
typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type
Definition: utility.hh:220
T< Args... > Type
Definition: utility.hh:74
std::tuple< T< Args1 >... > Type
Definition: utility.hh:104
Rotate type list by one, such that last entry is moved to first position.
Definition: utility.hh:247
typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type
Definition: utility.hh:249
std::tuple< std::integral_constant< I, k >... > Type
Definition: utility.hh:199
Get last entry of type list.
Definition: utility.hh:218
Definition: utility.hh:68
Definition: polynomial.hh:7
auto forwardAsStaticInteger(std::integer_sequence< size_type, firstValue > values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))
Definition: utility.hh:18
auto transformTupleHelper(F &&f, const std::tuple< T... > &tuple, std::index_sequence< k... >) -> decltype(std::make_tuple(f(std::get< k >(tuple))...))
Definition: utility.hh:135
auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >
Transform tuple value using a functor.
Definition: utility.hh:162
typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple
Expand tuple arguments as template arguments.
Definition: utility.hh:91
typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple
Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>
Definition: utility.hh:208
std::tuple< T< Args1, Args2 >... > Type
Definition: utility.hh:110
auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::TypeTree::Indices::_0, std::forward< Args >(args)...))
Transform dynamic index to static index_constant.
Definition: utility.hh:57
typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple
Transform tuple types argument using type-functor.
Definition: utility.hh:128
typename std::tuple< typename LastType< T... >::type, typename std::tuple_element< I, std::tuple< T... > >::type... > type
Definition: utility.hh:233
Definition: utility.hh:228