31 template<
typename T, T...>
37 template<
typename T,
typename StaticList, T... List>
40 template<
typename T, T... ListItems, T Head, T... Tail>
48 template<
typename T, T... ListItems>
53 template<
size_t Index,
size_t ListIndex,
typename List>
55 static const int value = -1;
58 template<
size_t Index,
typename T,
size_t ListIndex, T Head, T... Tail>
62 static const T value = (Index == ListIndex) ? Head :
67 template<
typename T,
typename ReverseList,
typename StaticList>
70 template<
typename T, T... ReverseItems, T Head, T... Tail>
78 template<
typename T, T... ReverseItems>
85 template<
typename T,
size_t Index,
size_t ListIndex,
typename NewList,
86 typename OldList, T Value>
89 template<
typename T,
size_t Index,
size_t ListIndex, T... NewItems,
90 T Head, T... Tail, T Value>
99 template<
typename T,
size_t Index, T... NewItems, T Head, T... Tail,
102 NewItems...>,
static_list<T, Head, Tail...>, Value> {
107 template<
size_t Index,
size_t ListIndex,
typename FirstList,
typename 108 SecondList,
typename List,
bool Split>
111 template<
size_t Index,
size_t ListIndex,
typename T, T... FirstItems,
119 ListIndex + 1 >= Index> next_type;
121 typedef typename next_type::first
first;
122 typedef typename next_type::second
second;
125 template<
size_t Index,
size_t ListIndex,
typename T, T... FirstItems,
126 T... SecondItems, T Head, T... Tail>
133 Tail...>, ListIndex + 1 >= Index> next_type;
135 typedef typename next_type::first
first;
136 typedef typename next_type::second
second;
139 template<
size_t Index,
size_t ListIndex,
typename T, T... FirstItems,
140 T... SecondItems,
bool Split>
153 template<
typename T, T... ListItems>
161 template<
typename List,
size_t Index>
164 template<
typename T, T... ListItems,
size_t Index>
166 static_assert(Index <
sizeof...(ListItems),
"Index out of range!");
174 template<
typename List>
177 template<
typename T, T... ListItems>
186 template<
typename T,
typename List,
size_t Index, T Value>
189 template<
typename T,
size_t Index, T Value>
194 template<
typename T, T... ListItems,
size_t Index, T Value>
198 static_assert(Index <
sizeof...(ListItems),
"Index out of range!");
206 template<
typename T,
typename List, T Value>
209 template<
typename T, T... ListItems, T Value>
216 template<
typename T,
typename List, T Value>
219 template<
typename T, T... ListItems, T Value>
226 template<
typename List>
229 template<
typename T, T... ListItems>
231 static const size_t value =
sizeof...(ListItems);
236 template<
typename List0,
typename List1>
239 template<
typename T, T... ListItems0, T... ListItems1>
248 template<
typename List,
size_t Index>
251 template<
typename T,
size_t Index>
257 template<
typename T, T... ListItems,
size_t Index>
264 static_list<T>, static_list<T>,
static_list<T, ListItems...>,
270 template<
size_t Index,
size_t End,
typename List>
273 template<
size_t Index,
size_t End,
typename T, T... ListItems>
277 template<
typename F,
typename...Args>
284 template<
size_t End,
typename T, T... ListItems>
287 template<
typename F,
typename...Args>
296 template<
typename List>
299 template<
typename T, T... ListItems>
303 template<
typename F,
typename...Args>
detail::static_list_helper< T, static_list< T >, ListItems... >::type type
Split a static list at a certain index.
static_list< T, ReverseItems... > type
static_list< T, Value, ListItems... > type
static_list_helper< T, static_list< T, ListItems..., Head >, Tail... >::type type
static_list< T, FirstItems... > first
detail::reverse_static_list_helper< T, static_list< T >, static_list< T, ListItems... > >::type type
Access an item in a static list by index.
reverse_static_list_helper< T, static_list< T, Head, ReverseItems... >, static_list< T, Tail... > >::type type
Get the size of a static list.
static_list< T, ListItems..., Value > type
Prepend an item to a static list.
void operator()(F f, Args &&... args)
Append an item to a static list.
static_list< T, SecondItems... > second
detail::split_static_list_helper< Index, 0, static_list< T >, static_list< T >, static_list< T, ListItems... >, Index==0 >::first first
Merge two static lists into one.
detail::split_static_list_helper< Index, 0, static_list< T >, static_list< T >, static_list< T, ListItems... >, Index==0 >::second second
static_list< T, ListItems... > type
detail::replace_static_list_item_helper< T, Index, 0, static_list< T >, static_list< T, ListItems... >, Value >::type type
Convert a parameter pack into a static list.
A static list of variable type.
Replace a value at a certain position of a static list by a different one.
static_list< T, NewItems..., Value, Tail... > type
void operator()(F f, Args &&... args)
void operator()(F f, Args &&... args)
The stator library namespace.
replace_static_list_item_helper< T, Index, ListIndex+1, static_list< T, NewItems..., Head >, static_list< T, Tail... >, Value >::type type
static_list< T, ListItems0..., ListItems1... > type
Call functor for each element in a static list.