5#ifndef GKO_PUBLIC_CORE_SYNTHESIZER_CONTAINERS_HPP_
6#define GKO_PUBLIC_CORE_SYNTHESIZER_CONTAINERS_HPP_
28template <
typename T, T... Values>
37template <
typename... Types>
48template <
int Start,
int End,
int Step = 1>
61template <
typename List1,
typename List2>
62struct concatenate_impl;
71template <
typename T, T... Values1, T... Values2>
73 using type =
value_list<T, Values1..., Values2...>;
86template <
typename List1,
typename List2>
87using concatenate =
typename detail::concatenate_impl<List1, List2>::type;
98template <
typename T,
typename =
void>
107template <
typename T, T... Values>
108struct as_list_impl<
value_list<T, Values...>> {
117template <
typename... Types>
118struct as_list_impl<
type_list<Types...>> {
130template <
int Start,
int End,
int Step>
131struct as_list_impl<
range<Start, End, Step>,
std::enable_if_t<(Start < End)>> {
134 typename as_list_impl<range<Start + Step, End, Step>>::type>;
144template <
int Start,
int End,
int Step>
145struct as_list_impl<
range<Start, End, Step>,
std::enable_if_t<(Start >= End)>> {
160using as_list =
typename detail::as_list_impl<T>::type;
174template <
typename T, T... Value>
177 return std::array<T,
sizeof...(Value)>{Value...};
The Synthesizer namespace.
Definition containers.hpp:19
typename detail::as_list_impl< T >::type as_list
as_list<T> gives the alias type of as_list_impl<T>::type.
Definition containers.hpp:160
constexpr std::array< T, sizeof...(Value)> as_array(value_list< T, Value... > vl)
as_array<T> returns the array from value_list.
Definition containers.hpp:175
typename detail::concatenate_impl< List1, List2 >::type concatenate
concatenate combines two value_list into one value_list.
Definition containers.hpp:87
The Ginkgo namespace.
Definition abstract_factory.hpp:20
range records start, end, step in template
Definition containers.hpp:49
type_list records several types in template
Definition containers.hpp:38
value_list records several values with the same type in template.
Definition containers.hpp:29