8 #ifndef OBJECT_SI_DI_HPP_ 9 #define OBJECT_SI_DI_HPP_ 12 #include "for_each_ref.hpp" 13 #include "util/variadic_to_vmpl.hpp" 14 #include "util/copy_compare/meta_copy.hpp" 15 #include <boost/mpl/range_c.hpp> 16 #include <boost/fusion/include/size.hpp> 33 template<
template<
typename,
typename>
class op,
typename v_src,
typename v_dst,
int... prp>
65 {std::cerr <<
"Error: " <<__FILE__ <<
":" << __LINE__ <<
" Passing a temporal object\n";};
73 typedef typename boost::remove_reference<decltype(
dst.template get<boost::mpl::at<
v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_dtype;
74 typedef typename std::remove_reference<decltype(
src.template get<boost::mpl::at<
v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_stype;
81 template<
typename v_src,
typename v_dst,
int... prp>
113 {std::cerr <<
"Error: " <<__FILE__ <<
":" << __LINE__ <<
" Passing a temporal object\n";};
121 typedef typename boost::remove_reference<decltype(
dst.template get<boost::mpl::at<
v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_dtype;
122 typedef typename std::remove_reference<decltype(
src.template get<boost::mpl::at<
v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_stype;
141 template<
template<
typename,
typename>
class op,
typename v_src,
typename v_dst,
int type_copy,
int... prp>
152 std::cerr <<
"Error object_copy: " << __FILE__ <<
" " << __LINE__ <<
"\n";
164 template<
typename v_src,
typename v_dst,
int type_copy,
int... prp>
175 std::cerr <<
"Error object_copy: " << __FILE__ <<
" " << __LINE__ <<
"\n";
194 template<
template<
typename,
typename>
class op,
typename v_src,
typename v_dst,
int... prp>
206 boost::mpl::for_each_ref< boost::mpl::range_c<
int,0,
sizeof...(prp)> >(obj);
218 boost::mpl::for_each_ref< boost::mpl::range_c<
int,0,
sizeof...(prp)> >(obj);
236 template<
typename v_src,
typename v_dst,
int... prp>
248 boost::mpl::for_each_ref< boost::mpl::range_c<
int,0,
sizeof...(prp)> >(obj);
260 boost::mpl::for_each_ref< boost::mpl::range_c<
int,0,
sizeof...(prp)> >(obj);
const v_src & src
Source object.
__device__ __host__ void operator()(T &t)
It call the functor for each member.
const v_src & src
Source object.
__device__ __host__ object_si_di(const v_src &vs, v_dst &vd)
Implementation of the copy with operation.
v_dst & dst
Destination object.
__device__ __host__ void operator()(T &t)
It call the functor for each member.
__device__ __host__ object_si_di_e_op(const v_src &src, v_dst &dst)
Constructor.
object_si_di_op(const v_src &vs, v_dst &vd)
Stub method.
__device__ __host__ object_si_di(const v_src &vs, v_dst &&vd)
Implementation of the copy with operation.
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
It copy the properties from one object to another applying an operation.
KeyT const ValueT ValueT OffsetIteratorT OffsetIteratorT int
[in] The number of segments that comprise the sorting data
It copy the properties from one object to another applying an operation.
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
this class is a functor for "for_each" algorithm
object_si_di(const v_src &vs, v_dst &vd)
Stub method.
__device__ __host__ object_si_di_e(const v_src &src, v_dst &dst)
Constructor.
__device__ __host__ object_si_di_op(const v_src &vs, v_dst &&vd)
Implementation of the copy with operation.
v_dst & dst
Destination object.
__device__ __host__ object_si_di_op(const v_src &vs, v_dst &vd)
Implementation of the copy with operation.