DASH  0.3.0
IndexSequence.h
1 #ifndef DASH__UTIL__INDEX_SEQUENCE_H__INCLUDED
2 #define DASH__UTIL__INDEX_SEQUENCE_H__INCLUDED
3 
4 #include <dash/Types.h>
5 
6 
7 // Consider:
8 // http://ldionne.com/2015/11/29/efficient-parameter-pack-indexing/
9 
10 namespace dash {
11 namespace ce {
12 
13 
17 template <
18  std::size_t... Is >
20 { };
21 
38 template <
39  std::size_t N,
40  std::size_t... Is >
42  : make_index_sequence<N-1, N-1, Is...>
43 { };
44 
49 template <
50  std::size_t... Is>
51 struct make_index_sequence<0, Is...>
52  : index_sequence<Is...>
53 { };
54 
71 template <
72  std::size_t N,
73  std::size_t... Is >
75  : make_rev_index_sequence<N-1, Is..., N-1>
76 { };
77 
78 
83 template <
84  std::size_t... Is>
85 struct make_rev_index_sequence<0, Is...>
86  : index_sequence<Is...>
87 { };
88 
89 } // namespace ce
90 } // namespace dash
91 
92 #endif // DASH__UTIL__INDEX_SEQUENCE_H__INCLUDED
This class is a simple memory pool which holds allocates elements of size ValueType.
Definition: AllOf.h:8
Generates a compile-sequence integer (size_t) sequence in ascending order.
Definition: IndexSequence.h:41
Generates a compile-sequence integer (size_t) sequence in descending order.
Definition: IndexSequence.h:74
Represents a compile-time sequence container.
Definition: IndexSequence.h:19