OpenFPM_data  0.1.0
Project that contain the implementation and interfaces for basic structure like vectors, grids, graph ... .
 All Data Structures Namespaces Functions Variables Typedefs Friends
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 #ifndef COVERTY_SCAN
26 
28 template<class T, unsigned long... args> struct ArrayHolder_constexpr {
29  static constexpr T data[sizeof...(args)] = { args... };
30 };
31 
32 
33 template<class T,size_t N, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
35  typedef typename generate_array_constexpr_impl<T,N-1,orig_N, F, F<N,orig_N>::value, args...>::result result;
36 };
37 
39 template<class T, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
40 struct generate_array_constexpr_impl<T,0,orig_N, F, args...> {
42 };
43 
64 template<class T, size_t N, template<size_t,size_t> class F>
66  typedef typename generate_array_constexpr_impl<T,N-1, N, F>::result result;
67 };
68 
69 #endif
70 
72 
74 template<class T, unsigned long... args> struct ArrayHolder {
75  static const T data[sizeof...(args)];
76 };
77 
79 template<class T, unsigned long... args>
80 const T ArrayHolder<T,args...>::data[sizeof...(args)] = { args... };
81 
83 template<class T,size_t N, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
85  typedef typename generate_array_impl<T,N-1,orig_N, F, F<N,orig_N>::value, args...>::result result;
86 };
87 
89 template<class T, size_t orig_N, template<size_t,size_t> class F, unsigned... args>
90 struct generate_array_impl<T,0,orig_N, F, args...> {
91  typedef ArrayHolder<T,F<0,orig_N>::value, args...> result;
92 };
93 
112 template<class T, size_t N, template<size_t,size_t> class F>
114  typedef typename generate_array_impl<T,N-1, N, F>::result result;
115 };
116 
118 
120 template<class T, size_t N ,class F, unsigned... args>
122  typedef typename generate_array_vector_impl<T,N-1,F, boost::mpl::at<F,boost::mpl::int_<N> >::type::value , args...>::result result;
123 };
124 
126 template<class T, class F, unsigned... args>
127 struct generate_array_vector_impl<T,1, F, args...> {
128  typedef ArrayHolder<T,boost::mpl::at<F,boost::mpl::int_<1> >::type::value, args...> result;
129 };
130 
147 template<class T, class F>
149  typedef typename generate_array_vector_impl<T,boost::mpl::size<F>::value-1 , F>::result result;
150 };
151 
152 #endif
the array itself
Definition: ct_array.hpp:74
Generate the array specializing ArrayHolder.
Definition: ct_array.hpp:84
These set of classes generate an array definition at compile-time.
Definition: ct_array.hpp:28
Main class to generate compile-time array.
Definition: ct_array.hpp:113
Main class to generate an array from a boost::mpl::vector of numbers.
Definition: ct_array.hpp:148
Generate the array specializing ArrayHolder.
Definition: ct_array.hpp:121
Main class to generate constexpr compile-time array.
Definition: ct_array.hpp:65
static const T data[sizeof...(args)]
initialize the array from variadic template
Definition: ct_array.hpp:75
[v_transform metafunction]