8#ifndef OBJECT_WRITE_HPP_ 
    9#define OBJECT_WRITE_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> 
   21    template<
unsigned int T_value, 
typename v_prp, 
typename copy_rtype, 
typename Tsrc, 
typename Tdst>
 
   22    static inline void copy(
const Tsrc & src, Tdst & dst, 
int sub_id)
 
   28template<
unsigned int N1, 
typename T>
 
   31    template<
unsigned int T_value, 
typename v_prp, 
typename copy_rtype, 
typename Tsrc, 
typename Tdst>
 
   32    static inline void copy(
const Tsrc & src, Tdst & dst, 
int sub_id)
 
   34        for (
int i = 0 ; i < N1 ; i++)
 
   53template<
typename v_src,
typename v_dst, 
int... prp>
 
   84        typedef typename boost::remove_reference<
decltype(
dst.template get<boost::mpl::at<v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_rtype;
 
  105template<
typename v_src,
typename v_dst, 
int... prp>
 
  137    {std::cerr << 
"Error: " <<__FILE__ << 
":" << __LINE__ << 
" Passing a temporal object\n";};
 
  145        typedef typename boost::remove_reference<
decltype(
dst.template get<boost::mpl::at<v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_dtype;
 
  146        typedef typename std::remove_reference<
decltype(
src.template get<T::value>())>::type copy_stype;
 
  166template<
template<
typename,
typename> 
class op, 
typename v_src,
typename v_dst, 
int... prp>
 
  198    {std::cerr << 
"Error: " <<__FILE__ << 
":" << __LINE__ << 
" Passing a temporal object\n";};
 
  206        typedef typename boost::remove_reference<
decltype(
dst.template get<boost::mpl::at<v_prp,boost::mpl::int_<T::value>>::type::value>())>::type copy_dtype;
 
  207        typedef typename std::remove_reference<
decltype(
src.template get<T::value>())>::type copy_stype;
 
  226template<
template<
typename,
typename> 
class op, 
typename v_src,
typename v_dst, 
int... prp>
 
  261    {std::cerr << 
"Error: " <<__FILE__ << 
":" << __LINE__ << 
" Passing a temporal object\n";};
 
  269        typedef typename boost::remove_reference<
decltype(
dst.template get<boost::mpl::at<v_prp,boost::mpl::int_<T::value>>::type::value>()[
sub_id])>::type copy_rtype;
 
  286template<
typename v_src,
typename v_dst, 
int... prp>
 
  318    {std::cerr << 
"Error: " <<__FILE__ << 
":" << __LINE__ << 
" Passing a temporal object\n";};
 
  325        typedef typename boost::mpl::at<typename v_dst::type,typename boost::mpl::int_<boost::mpl::at<v_prp,boost::mpl::int_<T::value>>::type::value>>::type ctype;
 
  344template<
template<
typename,
typename> 
class op, 
typename v_src,
typename v_dst, 
int... prp>
 
  376    {std::cerr << 
"Error: " <<__FILE__ << 
":" << __LINE__ << 
" Passing a temporal object\n";};
 
  383        typedef typename boost::mpl::at<typename v_dst::type,typename boost::mpl::int_<boost::mpl::at<v_prp,boost::mpl::int_<T::value>>::type::value>>::type ctype;
 
  391#define OBJ_ENCAP_CHUNKING 3 
  401template<
typename v_src, 
typename v_dst,
int type_copy, 
int... prp>
 
  412        std::cerr << 
"Error object_copy: " << __FILE__ << 
" " << __LINE__ << 
"\n";
 
  423template<
typename v_src, 
typename v_dst, 
int... prp>
 
  435        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  447        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  465template<
typename v_src, 
typename v_dst, 
int... prp>
 
  474    __host__ __device__ 
inline object_s_di(
const v_src & vs, v_dst && vd)
 
  477        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,(int)
sizeof...(prp)> >(obj);
 
  486    __host__ __device__ 
inline object_s_di(
const v_src & vs, v_dst & vd)
 
  489        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  495template<
typename v_src, 
typename v_dst, 
int... prp>
 
  507        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  519        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  533template<
template<
typename,
typename> 
class op, 
typename v_src, 
typename v_dst,
int type_copy, 
int... prp>
 
  544        std::cerr << 
"Error object_copy: " << __FILE__ << 
" " << __LINE__ << 
"\n";
 
  556template<
template<
typename,
typename> 
class op, 
typename v_src, 
typename v_dst, 
int... prp>
 
  568        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  580        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  599template<
template<
typename,
typename> 
class op, 
typename v_src, 
typename v_dst, 
int... prp>
 
  611        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  623        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  641template<
template<
typename,
typename> 
class op, 
typename v_src, 
typename v_dst, 
int... prp>
 
  653        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
  665        boost::mpl::for_each_ref< boost::mpl::range_c<int,0,
sizeof...(prp)> >(obj);
 
__host__ __device__ object_s_di(const v_src &vs, v_dst &vd)
Implementation of the copy.
__host__ __device__ object_s_di(const v_src &vs, v_dst &&vd)
Implementation of the copy.
object_s_di(const v_src &vs, v_dst &vd, size_t sub_id)
Implementation of the copy.
object_s_di(const v_src &vs, v_dst &&vd, size_t sub_id)
Implementation of the copy.
object_s_di(const v_src &vs, v_dst &vd)
Implementation of the copy.
object_s_di(const v_src &&vs, v_dst &&vd)
Implementation of the copy.
this class is a functor for "for_each" algorithm
const v_src & src
Source object.
void operator()(T &t)
It call the functor for each member.
v_dst & dst
Destination object.
object_s_di_e_cnk(const v_src &src, v_dst &dst, size_t sub_id)
Constructor.
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_s_di_e_op_cnk(const v_src &src, v_dst &dst, size_t sub_id)
Constructor.
void operator()(T &t)
It call the functor for each member.
v_dst & dst
Destination object.
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
const v_src & src
Source object.
this class is a functor for "for_each" algorithm
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
__device__ __host__ void operator()(T &t)
It call the functor for each member.
const v_src & src
Source object.
__device__ __host__ object_s_di_e_op(const v_src &src, v_dst &dst)
Constructor.
v_dst & dst
Destination object.
this class is a functor for "for_each" algorithm
__device__ __host__ void operator()(T &t)
It call the functor for each member.
const v_src & src
Source object.
v_dst & dst
Destination object.
__device__ __host__ object_s_di_e(const v_src &src, v_dst &dst)
Constructor.
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
this class is a functor for "for_each" algorithm
void operator()(T &t)
It call the functor for each member.
object_s_di_f_op(const v_src &src, v_dst &dst)
Constructor.
const v_src & src
Source object.
v_dst & dst
Destination object.
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
this class is a functor for "for_each" algorithm
const v_src & src
Source object.
to_boost_vmpl< prp... >::type v_prp
Convert the packed properties into an MPL vector.
object_s_di_f(const v_src &src, v_dst &dst)
Constructor.
v_dst & dst
Destination object.
void operator()(T &t)
It call the functor for each member.
__device__ __host__ object_s_di_op(const v_src &vs, v_dst &vd)
Implementation of the copy with operation.
__device__ __host__ object_s_di_op(const v_src &vs, v_dst &&vd)
Implementation of the copy with operation.
object_s_di_op(const v_src &vs, v_dst &&vd)
Implementation of the copy with operation.
object_s_di_op(const v_src &vs, v_dst &vd, size_t sub_id)
Implementation of the copy with operation.
object_s_di_op(const v_src &&vs, v_dst &&vd)
Implementation of the copy with operation.
object_s_di_op(const v_src &vs, v_dst &vd)
Implementation of the copy with operation.
It copy the properties from one object to another applying an operation.
object_s_di_op(const v_src &vs, v_dst &vd)
Stub method.
It copy the properties from one object to another.
object_s_di(const v_src &vs, v_dst &vd)
Stub method.