OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
ct_array.hpp
1 /*
2  * ct_array.hpp
3  *
4  * Created on: Aug 21, 2014
5  * Author: Pietro Incardona
6  */
7 
8 
9 
18 #ifndef CT_ARRAY_HPP_
19 #define CT_ARRAY_HPP_
20 
21 #include <boost/fusion/mpl.hpp>
22 
24 
25 template<int ...> struct index_tuple{};
26 
28 template<class T, int... args> struct ArrayHolder_indexes {
30  typedef index_tuple<args ... > type;
31 };
32 
34 template<class T,long int N, size_t orig_N, template<size_t,size_t> class F, int... args>
37  typedef typename generate_indexes_impl<T,N-1,orig_N, F, F<N,orig_N>::value, args...>::result result;
38 };
39 
41 template<class T, size_t orig_N, template<size_t,size_t> class F, int... args>
42 struct generate_indexes_impl<T,0,orig_N, F, args...> {
44  typedef typename ArrayHolder_indexes<T,F<0,orig_N>::value, args...>::type result;
45 };
46 
48 template<class T, size_t orig_N, template<size_t,size_t> class F, int... args>
49 struct generate_indexes_impl<T,-1,orig_N, F, args...> {
52 };
53 
67 template<class T, long int N, template<size_t,size_t> class F>
70  typedef typename generate_indexes_impl<T,N-1, N, F>::result result;
71 };
72 
74 
75 #ifndef COVERTY_SCAN
76 
78 template<class T, unsigned long... args> struct ArrayHolder_constexpr {
80  static constexpr T data[sizeof...(args)] = { args... };
81 };
82 
84 template<class T,size_t N, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
87  typedef typename generate_array_constexpr_impl<T,N-1,orig_N, F, F<N,orig_N>::value, args...>::result result;
88 };
89 
91 template<class T, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
92 struct generate_array_constexpr_impl<T,0,orig_N, F, args...> {
95 };
96 
117 template<class T, size_t N, template<size_t,size_t> class F>
120  typedef typename generate_array_constexpr_impl<T,N-1, N, F>::result result;
121 };
122 
123 #endif
124 
126 
128 template<class T, unsigned long... args> struct ArrayHolder {
129  static const T data[sizeof...(args)];
130 };
131 
133 template<class T, unsigned long... args>
134 const T ArrayHolder<T,args...>::data[sizeof...(args)] = { args... };
135 
137 template<class T,size_t N, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
140  typedef typename generate_array_impl<T,N-1,orig_N, F, F<N,orig_N>::value, args...>::result result;
141 };
142 
144 template<class T, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
145 struct generate_array_impl<T,0,orig_N, F, args...> {
148 };
149 
168 template<class T, size_t N, template<size_t,size_t> class F>
170  typedef typename generate_array_impl<T,N-1, N, F>::result result;
171 };
172 
174 
176 template<class T, size_t N ,class F, unsigned... args>
179  typedef typename generate_array_vector_impl<T,N-1,F, boost::mpl::at<F,boost::mpl::int_<N> >::type::value , args...>::result result;
180 };
181 
183 template<class T, class F, unsigned... args>
184 struct generate_array_vector_impl<T,1, F, args...> {
187 };
188 
205 template<class T, class F>
209 };
210 
211 #endif
the array itself
Definition: ct_array.hpp:128
Generate the array specializing ArrayHolder.
Definition: ct_array.hpp:138
recursive meta-function to generate compile-time array
Definition: ct_array.hpp:85
the array itself
Definition: ct_array.hpp:78
Main class to generate compile-time array.
Definition: ct_array.hpp:169
generate_array_constexpr_impl< T, N-1, N, F >::result result
meta-function to generate compile time array
Definition: ct_array.hpp:120
index_tuple< args... > type
convert variadic into a tuple struct containing the list
Definition: ct_array.hpp:30
generate_indexes_impl< T, N-1, N, F >::result result
generate compile time array
Definition: ct_array.hpp:70
generate compile time index array
Definition: ct_array.hpp:35
Main class to generate an array from a boost::mpl::vector of numbers.
Definition: ct_array.hpp:206
Generate the array specializing ArrayHolder.
Definition: ct_array.hpp:177
Main class to generate constexpr compile-time array.
Definition: ct_array.hpp:118
generate_indexes_impl< T, N-1, orig_N, F, F< N, orig_N >::value, args...>::result result
Metafunction to generate indexes.
Definition: ct_array.hpp:37
static const T data[sizeof...(args)]
initialize the array from variadic template
Definition: ct_array.hpp:129
ArrayHolder< T, F< 0, orig_N >::value, args...> result
compile-time array
Definition: ct_array.hpp:147
static constexpr T data[sizeof...(args)]
compile-time array
Definition: ct_array.hpp:80
generate_array_vector_impl< T, boost::mpl::size< F >::value-1, F >::result result
generate compile-time array vector
Definition: ct_array.hpp:208
These set of classes generate an array definition at compile-time.
Definition: ct_array.hpp:25
ArrayHolder< T, boost::mpl::at< F, boost::mpl::int_< 1 > >::type::value, args...> result
compile-time array generation
Definition: ct_array.hpp:186
generate_array_impl< T, N-1, orig_N, F, F< N, orig_N >::value, args...>::result result
recursive meta-function to generate compile-time array
Definition: ct_array.hpp:140
generate_array_vector_impl< T, N-1, F, boost::mpl::at< F, boost::mpl::int_< N > >::type::value, args...>::result result
recursive meta-function to generate compile-time array
Definition: ct_array.hpp:179
ArrayHolder_indexes< T, F< 0, orig_N >::value, args...>::type result
generate the compile-time array
Definition: ct_array.hpp:44
ArrayHolder_constexpr< T, F< 0, orig_N >::value, args...> result
Compile-time array.
Definition: ct_array.hpp:94
Main class to generate indexes data structure.
Definition: ct_array.hpp:68
the array itself
Definition: ct_array.hpp:28
generate_array_constexpr_impl< T, N-1, orig_N, F, F< N, orig_N >::value, args...>::result result
recursive meta-function to generate compile-time array
Definition: ct_array.hpp:87
[v_transform metafunction]