8#ifndef SRC_PACKER_UNPACKER_HAS_PACK_AGG_HPP_
9#define SRC_PACKER_UNPACKER_HAS_PACK_AGG_HPP_
11#include "prp_all_zero.hpp"
12#include "Vector/vect_isel.hpp"
13#include "Vector/util.hpp"
23#include <boost/fusion/mpl.hpp>
28template<
class T,
size_t N ,
typename result_p ,
class vprp>
31 typedef typename boost::mpl::at<vprp,
typename boost::mpl::int_<N-1>>::type vprp_N;
32 typedef typename boost::mpl::at<typename T::type,vprp_N>::type stype;
38 typedef typename boost::mpl::bool_< crh_cond::value | result_p::value> result_n;
43template<
class T,
typename result_p,
class vprp>
46 typedef boost::mpl::bool_<result_p::value> result;
53template<
class T,
size_t N ,
typename result_p ,
class vprp>
56 typedef typename boost::mpl::at<vprp,
typename boost::mpl::int_<N-1>>::type vprp_N;
57 typedef typename boost::mpl::at<typename T::type,vprp_N>::type stype;
58 typedef typename boost::mpl::bool_<has_pack<stype>::value | result_p::value> result_n;
63template<
class T,
typename result_p,
class vprp>
66 typedef boost::mpl::bool_<result_p::value> result;
70template<
typename T,
int np>
90template<
class T,
int ... prp>
93 typedef typename prp_all_zero<T,
sizeof...(prp) == 0,prp...>::type vprp;
100template<
class T,
int ... prp>
103 typedef typename prp_all_zero<T,
sizeof...(prp) == 0,prp...>::type vprp;
110template<class T, unsigned int sel = openfpm::vect_isel<T>::value == OPENFPM_NATIVE>
Generate the array specializing ArrayHolder.
return if true the aggregate type T has a property that has a complex packing(serialization) method
has_pack_agg_impl< T, number_prop< T, sizeof...(prp)>::value, boost::mpl::bool_< false >, vprp >::result result
typedef typename to_boost_vmpl<prp...>::type vprp;
It return true if the object T require complex serialization.
has_Pack check if a type has defined a method called Pack
These set of classes generate an array definition at compile-time.
return if true the aggregate type T has a property that has a complex packing(serialization) method
is_complex_agg_impl< T, number_prop< T, sizeof...(prp)>::value, boost::mpl::bool_< false >, vprp >::result result
typedef typename to_boost_vmpl<prp...>::type vprp;
Check this is a gpu or cpu type cell-list.
Structure to convert a variadic template into boost::mpl::vector.