OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
Encap.hpp
1 /*
2  * Encap.hpp
3  *
4  * Created on: Feb 2, 2015
5  * Author: i-bird
6  */
7 
8 #ifndef ENCAP_HPP_
9 #define ENCAP_HPP_
10 
11 #include "util/for_each_ref.hpp"
12 #include "util/copy_compare/meta_copy.hpp"
13 #include "boost/mpl/range_c.hpp"
14 #include <boost/fusion/container/vector.hpp>
15 #include "util/se_util.hpp"
16 #include "util/copy_compare/copy_fusion_vector.hpp"
17 #include "util/copy_compare/compare_fusion_vector.hpp"
18 #include "memory_ly/memory_conf.hpp"
19 
20 
31 template<typename e_src, typename e_dst, unsigned int ... prp>
33 {
35  e_src & src;
37  e_dst & dst;
38 
39  typedef typename to_boost_vmpl<prp...>::type vprp;
40 
47  __device__ __host__ inline copy_cpu_encap_encap_prp(e_src & src, e_dst & dst)
48  :src(src),dst(dst)
49  {
50 #if defined(SE_CLASS1) && !defined(__NVCC__)
51  // e_src and e_dst must have the same number of properties
52 
53  if (e_src::T_type::max_prop != e_dst::T_type::max_prop)
54  std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the number of properties between src and dst must match";
55 #endif
56  };
57 
58 
59 #ifdef SE_CLASS1
60 
66  inline copy_cpu_encap_encap_prp(const e_src && src, const e_dst && dst)
67  :src(src),dst(dst)
68  {std::cerr << "Error: " <<__FILE__ << ":" << __LINE__ << " Passing a temporal object";};
69 #endif
70 
72  template<typename T>
73  __device__ __host__ inline void operator()(T& t) const
74  {
75  typedef typename boost::mpl::at<vprp,T>::type prp_cp;
76 
77  // Remove the reference from the type to copy
78  typedef typename boost::remove_reference<decltype(dst.template get<prp_cp::value>())>::type copy_rtype;
79 
80  meta_copy<copy_rtype>::meta_copy_(src.template get<prp_cp::value>(),dst.template get<prp_cp::value>());
81  }
82 };
83 
84 
95 template<typename e_src, typename e_dst>
97 {
99  const e_src & src;
101  e_dst & dst;
102 
103 
110  __device__ __host__ inline copy_cpu_encap_encap(const e_src & src, e_dst & dst)
111  :src(src),dst(dst)
112  {
113 #if defined(SE_CLASS1) && !defined(__NVCC__)
114  // e_src and e_dst must have the same number of properties
115 
116  if (e_src::T_type::max_prop != e_dst::T_type::max_prop)
117  std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the number of properties between src and dst must match";
118 #endif
119  };
120 
121 
122 #ifdef SE_CLASS1
123 
129  inline copy_cpu_encap_encap(const e_src && src, const e_dst && dst)
130  :src(src),dst(dst)
131  {std::cerr << "Error: " <<__FILE__ << ":" << __LINE__ << " Passing a temporal object";};
132 #endif
133 
135  template<typename T>
136  __device__ __host__ inline void operator()(T& t) const
137  {
138  // Remove the reference from the type to copy
139  typedef typename boost::remove_reference<decltype(dst.template get<T::value>())>::type copy_rtype;
140 
141  meta_copy<copy_rtype>::meta_copy_(src.template get<T::value>(),dst.template get<T::value>());
142  }
143 };
144 
145 
156 template<typename e_src, typename e_dst>
158 {
160  const e_src & src;
162  e_dst & dst;
163 
164 
171  __device__ __host__ inline copy_cpu_encap_encap_general(const e_src & src, e_dst & dst)
172  :src(src),dst(dst)
173  {
174 #if defined(SE_CLASS1) && !defined(__NVCC__)
175  // e_src and e_dst must have the same number of properties
176 
177  if (e_src::T_type::max_prop != e_dst::T_type::max_prop)
178  std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the number of properties between src and dst must match";
179 #endif
180  };
181 
182 
183 #ifdef SE_CLASS1
184 
190  inline copy_cpu_encap_encap_general(const e_src && src, const e_dst && dst)
191  :src(src),dst(dst)
192  {std::cerr << "Error: " <<__FILE__ << ":" << __LINE__ << " Passing a temporal object";};
193 #endif
194 
196  template<typename T>
197  __device__ __host__ inline void operator()(T& t) const
198  {
199  // Remove the reference from the type to copy
200  typedef typename boost::remove_reference<decltype(dst.template get<T::value>())>::type copy_dtype;
201 
202  // Remove the reference from the type to copy
203  typedef typename boost::remove_reference<decltype(src.template get<T::value>())>::type copy_stype;
204 
205  meta_copy_d<copy_stype,copy_dtype>::meta_copy_d_(src.template get<T::value>(),dst.template get<T::value>());
206  }
207 };
208 
209 
220 template<typename e_src>
222 {
224  const e_src & src;
226  e_src & dst;
227 
228 
235  __device__ __host__ inline copy_cpu_encap_single(const e_src & src, e_src & dst)
236  :src(src),dst(dst)
237  {
238 #if defined(SE_CLASS1) && !defined(__NVCC__)
239  // e_src and e_dst must have the same number of properties
240 
241  if (e_src::T_type::max_prop != e_src::T_type::max_prop)
242  std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the number of properties between src and dst must match";
243 #endif
244  };
245 
246 
247 #ifdef SE_CLASS1
248 
254  inline copy_cpu_encap_single(const e_src && src, const e_src && dst)
255  :src(src),dst(dst)
256  {std::cerr << "Error: " <<__FILE__ << ":" << __LINE__ << " Passing a temporal object";};
257 #endif
258 
260  template<typename T>
261  __device__ __host__ inline void operator()(T& t) const
262  {
263  // Remove the reference from the type to copy
264  typedef typename boost::remove_reference<decltype(dst.template get<T::value>())>::type copy_rtype;
265 
266  meta_copy<copy_rtype>::meta_copy_(src.template get<T::value>(),dst.template get<T::value>());
267  }
268 };
269 
270 
272 
274 template<template<typename,typename> class op,typename e_src, typename e_dst, int ... prp>
276 {
278  const e_src & src;
280  e_dst & dst;
281 
282 
290  inline copy_cpu_encap_encap_op_prp(const e_src & src, e_dst & dst)
291  :src(src),dst(dst)
292  {
293 #ifdef SE_CLASS1
294  // e_src and e_dst must have the same number of properties
295 
296  if (e_src::T_type::max_prop != e_dst::T_type::max_prop)
297  std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the number of properties between src and dst must match";
298 #endif
299  };
300 
301 
302 #ifdef SE_CLASS1
303 
309  inline copy_cpu_encap_encap_op_prp(const e_src && src, const e_dst && dst)
310  :src(src),dst(dst)
311  {std::cerr << "Error: " <<__FILE__ << ":" << __LINE__ << " Passing a temporal object";};
312 #endif
313 
315  template<typename T>
316  inline void operator()(T& t) const
317  {
318  // Convert variadic to boost::vector
319  typedef typename boost::mpl::vector_c<unsigned int,prp...> prpv;
320 
321  // element id to copy applying an operation
322  typedef typename boost::mpl::at<prpv,T>::type ele_cop;
323 
324  // Remove the reference from the type to copy
325  typedef typename boost::remove_reference<decltype(src.template get< ele_cop::value >())>::type copy_rtype;
326 
327  meta_copy_op<op,copy_rtype>::meta_copy_op_(src.template get< ele_cop::value >(),dst.template get< ele_cop::value >());
328  }
329 };
330 
331 
332 
334 
346 template<typename e_src, typename e_dst>
348 {
350  const e_src & src;
352  const e_dst & dst;
353 
354 
362  inline compare_cpu_encap_encap(const e_src & src, const e_dst & dst)
363  :src(src),dst(dst)
364  {
365 #ifdef SE_CLASS1
366  // e_src and e_dst must have the same number of properties
367 
368  if (e_src::max_prop != e_dst::max_prop)
369  std::cerr << "Error " << __FILE__ << ":" << __LINE__ << " the number of properties between src and dst must match";
370 #endif
371  };
372 
373 
374 #ifdef SE_CLASS1
375 
385  inline compare_cpu_encap_encap(const e_src && src, const e_dst && dst)
386  :src(src),dst(dst)
387  {std::cerr << "Error: " <<__FILE__ << ":" << __LINE__ << " Passing a temporal object";};
388 #endif
389 
395  template<typename T>
396  inline void operator()(T& t) const
397  {
399  typedef typename boost::fusion::result_of::at_c<typename e_src::type,T::value>::type copy_type;
400 
402  typedef typename boost::remove_reference<copy_type>::type copy_rtype;
403 
404  meta_compare<copy_rtype> cp(src.template get<T::value>(),dst.template get<T::value>());
405  }
406 };
407 
415 template<unsigned int dim,typename T,typename layout>
416 class encapc
417 {
418 
419 };
420 
437 template<unsigned int dim,typename T>
438 class encapc<dim,T,typename memory_traits_lin<T>::type >
439 {
440 public:
441 
443  typedef typename T::type type;
444 
445 private:
446 
447 #ifdef SE_CLASS1
448  bool init = false;
449 #endif
450 
453 
455  typedef typename memory_traits_lin<T>::type Mem;
456 
459 
460 #ifdef SE_CLASS1
461  __device__ __host__ void check_init() const
462  {
463  if (init == false)
464  {
465  #ifdef CUDA_ON_CPU
466  std::cout << __FILE__ << ":" << __LINE__ << " Error using unallocated pointer" << std::endl;
467  #else
468  assert(init == true);
469  #endif
470  }
471  }
472 #endif
473 
474 public:
475 
476 #ifdef SE_CLASS1
477  __device__ __host__ ~encapc()
478  {init = false;}
479 #endif
480 
482  typedef int yes_i_am_encap;
483 
485  typedef T T_type;
486 
488  static const int max_prop = T::max_prop;
489 
491  __device__ __host__ inline encapc(type & data_c)
492  :data_c(data_c)
493  {
494 #ifdef SE_CLASS1
495  init = true;
496 #endif
497  }
498 
499 
505  inline type * operator&()
506  {
507 #ifdef SE_CLASS1
508  check_init();
509 #endif
510  return &data_c;
511  }
512 
518  template <unsigned int p, typename r_type=decltype(boost::fusion::at_c<p>(data_c))>
519  __device__ __host__ inline r_type get()
520  {
521 #ifdef SE_CLASS1
522  check_init();
523 #endif
524  return boost::fusion::at_c<p>(data_c);
525  }
526 
532  template <unsigned int p, typename r_type=decltype(boost::fusion::at_c<p>(data_c))>
533  __device__ __host__ inline const r_type get() const
534  {
535 #ifdef SE_CLASS1
536  check_init();
537 #endif
538  return boost::fusion::at_c<p>(data_c);
539  }
540 
548  template <unsigned int p> inline
549  __device__ __host__ void set(decltype(boost::fusion::at_c<p>(data_c)) & ele)
550  {
551 #ifdef SE_CLASS1
552  check_init();
553 #endif
554  return boost::fusion::at_c<p>(data_c) = ele;
555  }
556 
567  template<unsigned int dim2>
568  __device__ __host__ inline encapc<dim,T,Mem> & set(const encapc<dim2,T,Mem> & ec)
569  {
570 #ifdef SE_CLASS1
571  check_init();
572 #endif
574 
575  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
576 
577  return *this;
578  }
579 
587  __device__ __host__ inline encapc<dim,T,Mem> & operator=(const encapc<dim,T,Mem> & ec)
588  {
589 #ifdef SE_CLASS1
590  check_init();
591 #endif
593 
594  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
595 
596  return *this;
597  }
598 
606  __device__ __host__ inline encapc<dim,T,Mem> & operator=(const encapc<dim,T,Mem2> & ec)
607  {
608 #ifdef SE_CLASS1
609  check_init();
610 #endif
612 
613  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
614 
615  return *this;
616  }
617 
625  __device__ __host__ inline encapc<dim,T,Mem> & operator=(const T & obj)
626  {
627 #ifdef SE_CLASS1
628  check_init();
629 #endif
630  copy_fusion_vector<typename T::type> cp(obj.data,data_c);
631 
632  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
633 
634  return *this;
635  }
636 
644  inline bool operator==(const encapc<dim,T,Mem> & ec) const
645  {
646 #ifdef SE_CLASS1
647  check_init();
648 #endif
649  compare_fusion_vector<typename T::type> cp(ec.data_c,data_c);
650 
651  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
652 
653  return cp.result();
654  }
655 
663  inline bool operator!=(const encapc<dim,T,Mem> & ec) const
664  {
665 #ifdef SE_CLASS1
666  check_init();
667 #endif
668  return ! this->operator==(ec);
669  }
670 };
671 
679 template<unsigned int dim,typename Mem>
680 class encapc<dim,void,Mem>
681 {
682 public:
683 
684  // constructor require a key and a memory data
685  encapc()
686  {}
687 
689  template <unsigned int p> void get()
690  {}
691 
693  template <unsigned int p, typename S> void set(S & ele)
694  {}
695 };
696 
711 template<unsigned int dim,typename T>
712 class encapc<dim,T,typename memory_traits_inte<T>::type>
713 {
716 
719 
722 
724  size_t k;
725 
726 #ifdef SE_CLASS1
727  bool init = false;
728 #endif
729 
730 #ifdef SE_CLASS1
731  __device__ __host__ void check_init() const
732  {
733  if (init == false)
734  {
735  #ifdef CUDA_ON_CPU
736  std::cout << __FILE__ << ":" << __LINE__ << " Error using unallocated pointer" << std::endl;
737  #else
738  assert(init == true);
739  #endif
740  }
741  }
742 #endif
743 
744 public:
745 
747  typedef typename T::type type;
748 
750  typedef int yes_i_am_encap;
751 
753  typedef T T_type;
754 
756  static const int max_prop = T::max_prop;
757 
758 #ifdef SE_CLASS1
759  __device__ __host__ ~encapc()
760  {init = false;}
761 #endif
762 
764  __device__ __host__ encapc(typename memory_traits_inte<T>::type & data, size_t k)
765  :data(data),k(k)
766  {
767 #ifdef SE_CLASS1
768  init = true;
769 #endif
770  }
771 
779  template <unsigned int p>
780  __device__ __host__ auto get() -> decltype(boost::fusion::at_c<p>(data).mem_r.operator[](k))
781  {
782 #ifdef SE_CLASS1
783  check_init();
784 #endif
785  return boost::fusion::at_c<p>(data).mem_r.operator[](k);
786  }
787 
795  template <unsigned int p> __device__ __host__ auto get() const -> decltype(boost::fusion::at_c<p>(data).mem_r.operator[](k))
796  {
797 #ifdef SE_CLASS1
798  check_init();
799 #endif
800  return boost::fusion::at_c<p>(data).mem_r.operator[](k);
801  }
802 
803 // __device__ __host__ encapc(const encapc<dim,T,Mem> & ec) = delete;
804  __device__ __host__ encapc(const encapc<dim,T,Mem> & ec) : data(ec.data), k(ec.k)
805  {
806 #ifdef SE_CLASS1
807  init = true;
808 #endif
809  }
810 // __device__ __host__ inline encapc<dim,T,Mem> & operator=(const encapc<dim,T,Mem> & ec) = delete; //DEBUG
811 
819  __device__ __host__ inline encapc<dim,T,Mem> & operator=(const encapc<dim,T,Mem> & ec)
820  {
821 #ifdef SE_CLASS1
822  check_init();
823 #endif
825 
826  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
827 
828  return *this;
829  }
830 
838  __device__ __host__ inline encapc<dim,T,Mem> & operator=(const encapc<dim,T,Mem2> & ec)
839  {
840 #ifdef SE_CLASS1
841  check_init();
842 #endif
844 
845  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
846 
847  return *this;
848  }
849 
857  __device__ __host__ inline encapc<dim,T,Mem> & operator=(const T & obj)
858  {
859 #ifdef SE_CLASS1
860  check_init();
861 #endif
862  copy_fusion_vector_encap<typename T::type,decltype(*this)> cp(obj.data,*this);
863 
864  boost::mpl::for_each_ref< boost::mpl::range_c<int,0,T::max_prop> >(cp);
865 
866  return *this;
867  }
868 
869  __device__ __host__ inline void private_set_data_k(Mem & data_c, size_t k)
870  {
871 #ifdef SE_CLASS1
872  check_init();
873 #endif
874  this->data = data;
875  this->k = k;
876  }
877 
878  __device__ __host__ inline Mem & private_get_data()
879  {
880 #ifdef SE_CLASS1
881  check_init();
882 #endif
883  return data;
884  }
885 
886  __device__ __host__ inline size_t private_get_k()
887  {
888 #ifdef SE_CLASS1
889  check_init();
890 #endif
891  return k;
892  }
893 
894  __device__ __host__ inline size_t private_set_k(unsigned int k)
895  {
896 #ifdef SE_CLASS1
897  check_init();
898 #endif
899  return this->k = k;
900  }
901 };
902 
903 #include "util/common.hpp"
904 
905 template<typename T, typename Sfinae = void>
906 struct is_encap: std::false_type {};
907 
908 
918 template<typename T>
919 struct is_encap<T, typename Void< typename T::yes_i_am_encap>::type> : std::true_type
920 {};
921 
922 
924 template<unsigned int dim , typename T, typename layout, typename data_type, typename g1_type, typename key_type, unsigned int sel = 2*is_layout_mlin<layout>::value + is_layout_inte<layout>::value >
925 struct mem_geto
926 {
927  __device__ __host__ static inline encapc<dim,T,typename layout::type> get(data_type & data_, const g1_type & g1, const key_type & v1)
928  {
929  return encapc<dim,T,typename layout::type>(data_.mem_r.operator[](g1.LinId(v1)));
930  }
931 
932  static inline encapc<dim,T,typename layout::type> get_lin(data_type & data_, const size_t & v1)
933  {
934  return encapc<dim,T,typename layout::type>(data_.mem_r.operator[](v1));
935  }
936 };
937 
939 template<unsigned int dim, typename T,typename layout, typename data_type, typename g1_type, typename key_type>
940 struct mem_geto<dim,T,layout,data_type,g1_type,key_type,1>
941 {
942  __device__ __host__ static inline encapc<dim,T,typename layout::type> get(data_type & data_, const g1_type & g1, const key_type & v1)
943  {
944  return encapc<dim,T,typename layout::type>(data_,g1.LinId(v1));
945  }
946 
947  static inline encapc<dim,T,typename layout::type> get_lin(data_type & data_, const size_t & v1)
948  {
949  return encapc<dim,T,typename layout::type>(data_,v1);
950  }
951 };
952 
953 #endif /* ENCAP_HPP_ */
__device__ __host__ encapc< dim, T, Mem > & operator=(const encapc< dim, T, Mem > &ec)
Assignment.
Definition: Encap.hpp:819
int yes_i_am_encap
indicate the it is an encapsulated object
Definition: Encap.hpp:482
e_dst & dst
encapsulated destination object
Definition: Encap.hpp:101
e_src & src
encapsulated source object
Definition: Encap.hpp:35
int yes_i_am_encap
indicate it is an encapsulated object
Definition: Encap.hpp:750
Transform the boost::fusion::vector into memory specification (memory_traits)
__device__ static __host__ void meta_copy_(const T &src, T &dst)
copy and object from src to dst
Definition: meta_copy.hpp:60
__device__ __host__ encapc< dim, T, Mem > & operator=(const encapc< dim, T, Mem2 > &ec)
Assignment.
Definition: Encap.hpp:838
__device__ __host__ encapc< dim, T, Mem > & operator=(const encapc< dim, T, Mem > &ec)
Assignment.
Definition: Encap.hpp:587
__device__ __host__ copy_cpu_encap_encap_general(const e_src &src, e_dst &dst)
constructor
Definition: Encap.hpp:171
const e_src & src
encapsulated source object
Definition: Encap.hpp:160
__device__ __host__ auto get() const -> decltype(boost::fusion::at_c< p >(data).mem_r.operator[](k))
Access the data.
Definition: Encap.hpp:795
__device__ __host__ void set(decltype(boost::fusion::at_c< p >(data_c)) &ele)
Set one property of the encapsulated object.
Definition: Encap.hpp:549
__device__ __host__ encapc< dim, T, Mem > & operator=(const T &obj)
Assignment.
Definition: Encap.hpp:857
static void meta_copy_op_(const T &src, T &dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:710
this class is a functor for "for_each" algorithm
Definition: Encap.hpp:347
__device__ __host__ copy_cpu_encap_encap(const e_src &src, e_dst &dst)
constructor
Definition: Encap.hpp:110
void get()
access the data
Definition: Encap.hpp:689
e_src & dst
encapsulated destination object
Definition: Encap.hpp:226
this class is a functor for "for_each" algorithm
__device__ __host__ copy_cpu_encap_encap_prp(e_src &src, e_dst &dst)
constructor
Definition: Encap.hpp:47
memory_traits_inte< T >::type Mem2
layout of the encapsulated object
Definition: Encap.hpp:458
__device__ __host__ void operator()(T &t) const
It call the copy function for each property.
Definition: Encap.hpp:136
bool operator!=(const encapc< dim, T, Mem > &ec) const
Compare.
Definition: Encap.hpp:663
e_dst & dst
encapsulated destination object
Definition: Encap.hpp:37
__device__ __host__ encapc< dim, T, Mem > & operator=(const encapc< dim, T, Mem2 > &ec)
Assignment.
Definition: Encap.hpp:606
Mem & data
reference to the encapsulated object
Definition: Encap.hpp:721
memory_traits_lin< T >::type Mem
layout of the encapsulated object
Definition: Encap.hpp:455
__device__ __host__ encapc< dim, T, Mem > & set(const encapc< dim2, T, Mem > &ec)
Set one property of the encapsulated object.
Definition: Encap.hpp:568
__device__ __host__ void operator()(T &t) const
It call the copy function for each property.
Definition: Encap.hpp:261
Transform the boost::fusion::vector into memory specification (memory_traits)
Definition: memory_conf.hpp:83
this class is a functor for "for_each" algorithm
Definition: Encap.hpp:221
__device__ __host__ void operator()(T &t) const
It call the copy function for each property.
Definition: Encap.hpp:197
memory_traits_lin< T >::type Mem2
layout of the encapsulated object
Definition: Encap.hpp:718
void set(S &ele)
set the data
Definition: Encap.hpp:693
Case memory_traits_lin.
Definition: Encap.hpp:925
const e_src & src
object 1 we have to compare
Definition: Encap.hpp:350
void operator()(T &t) const
It call the copy function for each property.
Definition: Encap.hpp:316
type & data_c
reference to the encapsulated object
Definition: Encap.hpp:452
inter_memc< typename T::type >::type type
for each element in the vector interleave memory_c
Definition: memory_conf.hpp:86
__device__ __host__ encapc(type &data_c)
constructor from a reference object
Definition: Encap.hpp:491
memory_traits_inte< T >::type Mem
type of layout
Definition: Encap.hpp:715
this class is a functor for "for_each" algorithm
Definition: Encap.hpp:32
__device__ static __host__ void meta_copy_d_(const Tsrc &src, Tdst &dst)
copy and object from src to dst
Definition: meta_copy.hpp:92
__device__ __host__ r_type get()
access the data
Definition: Encap.hpp:519
KeyT const ValueT ValueT OffsetIteratorT OffsetIteratorT int
[in] The number of segments that comprise the sorting data
void operator()(T &t) const
It call the copy function for each property.
Definition: Encap.hpp:396
this class is a functor for "for_each" algorithm
bool result()
Returh the result of the comparison.
__device__ __host__ const r_type get() const
access the data but return a constant reference
Definition: Encap.hpp:533
Void structure.
Definition: common.hpp:73
__device__ __host__ encapc(typename memory_traits_inte< T >::type &data, size_t k)
constructor require a key and a memory data
Definition: Encap.hpp:764
const e_src & src
encapsulated source object
Definition: Encap.hpp:224
This class compare general objects.
compare_cpu_encap_encap(const e_src &src, const e_dst &dst)
constructor
Definition: Encap.hpp:362
this class is a functor for "for_each" algorithm
Definition: Encap.hpp:96
__device__ __host__ void operator()(T &t) const
It call the copy function for each property.
Definition: Encap.hpp:73
It copy two encap object.
Definition: Encap.hpp:275
e_dst & dst
encapsulated object destination
Definition: Encap.hpp:280
copy_cpu_encap_encap_op_prp(const e_src &src, e_dst &dst)
constructor
Definition: Encap.hpp:290
const e_dst & dst
object 2 we have to compare
Definition: Encap.hpp:352
__device__ __host__ auto get() -> decltype(boost::fusion::at_c< p >(data).mem_r.operator[](k))
Access the data.
Definition: Encap.hpp:780
__device__ __host__ encapc< dim, T, Mem > & operator=(const T &obj)
Assignment.
Definition: Encap.hpp:625
const e_src & src
encapsulated object source
Definition: Encap.hpp:278
bool operator==(const encapc< dim, T, Mem > &ec) const
Compare.
Definition: Encap.hpp:644
OutputIteratorT OffsetT ReductionOpT OuputT init
< [in] The initial value of the reduction
this class is a functor for "for_each" algorithm
Definition: aggregate.hpp:21
this class is a functor for "for_each" algorithm
Definition: Encap.hpp:157
__device__ __host__ copy_cpu_encap_single(const e_src &src, e_src &dst)
constructor
Definition: Encap.hpp:235
e_dst & dst
encapsulated destination object
Definition: Encap.hpp:162
const e_src & src
encapsulated source object
Definition: Encap.hpp:99
T::type type
object type the encap object encapsulate
Definition: Encap.hpp:443