OpenFPM  5.2.0
Project that contain the implementation of distributed structures
meta_copy.hpp
1 #ifndef META_COPY_HPP
2 #define META_COPY_HPP
3 
4 #include "copy_general.hpp"
5 #include "util/cuda_util.hpp"
6 #include "util/multi_array_openfpm/multi_array_ref_openfpm.hpp"
7 
8 
9 template<typename ArrTypeView>
11 {
12  int pos;
13  ArrTypeView arr;
14 
15  std_array_vector_view(int pos,ArrTypeView arr)
16  :pos(pos),arr(arr)
17  {}
18 
19  decltype(arr[0][0]) operator[](int comp)
20  {
21  return arr[comp][pos];
22  }
23 
24  decltype(std::declval<const ArrTypeView>()[0][0]) operator[](int comp) const
25  {
26  return arr[comp][pos];
27  }
28 };
29 
51 template<typename T>
52 struct meta_copy
53 {
60  __device__ __host__ static inline void meta_copy_(const T & src, T & dst)
61  {
62  copy_general<T>(src,dst);
63  }
64 
71  __device__ __host__ static inline void meta_copy_(const T & src, T && dst)
72  {
73  copy_general<T>(src,dst);
74  }
75 };
76 
83 template<typename Tsrc,typename Tdst>
84 struct meta_copy_d
85 {
92  __device__ __host__ static inline void meta_copy_d_(const Tsrc & src, Tdst & dst)
93  {
94  //copy_general<Tsrc>(src,dst);
95  dst = src;
96  }
97 
104  __device__ __host__ static inline void meta_copy_d_(const Tsrc & src, Tdst && dst)
105  {
106  //copy_general<Tsrc>(src,dst);
107  dst = src;
108  }
109 };
110 
112 template<typename T,size_t N1>
113 struct meta_copy<T[N1]>
114 {
121  __device__ __host__ static inline void meta_copy_(const T src[N1], T dst[N1])
122  {
123  for (size_t i1 = 0 ; i1 < N1 ; i1++)
124  {
125  copy_general<T>(src[i1],dst[i1]);
126  }
127  }
128 
135  template<typename T2>
136  __device__ __host__ static inline void meta_copy_(const T src[N1], std_array_vector_view<T2> dst)
137  {
138  for (size_t i1 = 0 ; i1 < N1 ; i1++)
139  {
140  copy_general<T>(src[i1],dst[i1]);
141  }
142  }
143 
150  template<typename v_mpl>
151  __device__ __host__ static inline void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm<T,1,v_mpl> src,
153  {
154  for (size_t i1 = 0 ; i1 < N1 ; i1++)
155  {
156  copy_general<T>(src[i1],dst[i1]);
157  }
158  }
159 
166  template<typename v_mpl>
167  __device__ __host__ static inline void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm<T,1,v_mpl> src,
168  T * dst)
169  {
170  for (size_t i1 = 0 ; i1 < N1 ; i1++)
171  {
172  copy_general<T>(src[i1],dst[i1]);
173  }
174  }
175 };
176 
178 template<typename Tsrc, typename Tdst, size_t N1>
179 struct meta_copy_d<Tsrc[N1],Tdst>
180 {
187  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1], Tdst && dst)
188  {
189  for (size_t i1 = 0 ; i1 < N1 ; i1++)
190  {
191  copy_general<Tsrc>(src[i1],static_cast<Tsrc&>(dst[i1]));
192  }
193  }
194 
201  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1], Tdst & dst)
202  {
203  for (size_t i1 = 0 ; i1 < N1 ; i1++)
204  {
205  copy_general<Tsrc>(src[i1],static_cast<Tsrc&>(dst[i1]));
206  }
207  }
208 };
209 
211 template<typename Tsrc, typename Tdst, size_t N1>
212 struct meta_copy_d<Tsrc,Tdst[N1]>
213 {
220  __device__ __host__ static inline void meta_copy_d_(const Tsrc & src, Tdst dst[N1])
221  {
222  for (size_t i1 = 0 ; i1 < N1 ; i1++)
223  {
224  copy_general<Tdst>(static_cast<const Tdst&>(src[i1]),dst[i1]);
225  }
226  }
227 };
228 
230 template<typename Tsrc, typename Tdst, size_t N1>
231 struct meta_copy_d<Tsrc[N1],Tdst[N1]>
232 {
239  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1], Tdst dst[N1])
240  {
241  for (size_t i1 = 0 ; i1 < N1 ; i1++)
242  {
243  copy_general<Tsrc>(src[i1],dst[i1]);
244  }
245  }
246 };
247 
249 template<typename T,size_t N1,size_t N2>
250 struct meta_copy<T[N1][N2]>
251 {
258  __device__ __host__ static inline void meta_copy_(const T src[N1][N2], T dst[N1][N2])
259  {
260  for (size_t i1 = 0 ; i1 < N1 ; i1++)
261  {
262  for (size_t i2 = 0 ; i2 < N2 ; i2++)
263  {
264  copy_general<T>(src[i1][i2],dst[i1][i2]);
265  }
266  }
267  }
268 
275  template<typename v_mpl>
276  __device__ __host__ static inline void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm<T,2,v_mpl> src,
278  {
279  for (size_t i1 = 0 ; i1 < N1 ; i1++)
280  {
281  for (size_t i2 = 0 ; i2 < N2 ; i2++)
282  {
283  copy_general<T>(src[i1][i2],dst[i1][i2]);
284  }
285  }
286  }
287 
294  template<typename v_mpl>
295  __device__ __host__ static inline void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm<T,2,v_mpl> src,
296  T dst[N1][N2])
297  {
298  for (size_t i1 = 0 ; i1 < N1 ; i1++)
299  {
300  for (size_t i2 = 0 ; i2 < N2 ; i2++)
301  {
302  copy_general<T>(src[i1][i2],dst[i1][i2]);
303  }
304  }
305  }
306 };
307 
309 template<typename Tsrc, typename Tdst,size_t N1,size_t N2>
310 struct meta_copy_d<Tsrc[N1][N2],Tdst>
311 {
312  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1][N2], Tdst && dst)
313  {
320  for (size_t i1 = 0 ; i1 < N1 ; i1++)
321  {
322  for (size_t i2 = 0 ; i2 < N2 ; i2++)
323  {
324  copy_general<Tsrc>(src[i1][i2],static_cast<Tsrc&>(dst[i1][i2]));
325  }
326  }
327  }
328 
329  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1][N2], Tdst & dst)
330  {
337  for (size_t i1 = 0 ; i1 < N1 ; i1++)
338  {
339  for (size_t i2 = 0 ; i2 < N2 ; i2++)
340  {
341  copy_general<Tsrc>(src[i1][i2],static_cast<Tsrc&>(dst[i1][i2]));
342  }
343  }
344  }
345 };
346 
348 template<typename Tsrc, typename Tdst, size_t N1, size_t N2>
349 struct meta_copy_d<Tsrc,Tdst[N1][N2]>
350 {
357  __device__ __host__ static inline void meta_copy_d_(const Tsrc & src, Tdst dst[N1][N2])
358  {
359  for (size_t i1 = 0 ; i1 < N1 ; i1++)
360  {
361  for (size_t i2 = 0 ; i2 < N2 ; i2++)
362  {
363  copy_general<Tdst>(static_cast<const Tdst&>(src[i1][i2]),dst[i1][i2]);
364  }
365  }
366  }
367 };
368 
369 
370 
372 template<typename Tsrc, typename Tdst, size_t N1, size_t N2>
373 struct meta_copy_d<Tsrc[N1][N2],Tdst[N1][N2]>
374 {
381  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1][N2], Tdst dst[N1][N2])
382  {
383  for (size_t i1 = 0 ; i1 < N1 ; i1++)
384  {
385  for (size_t i2 = 0 ; i2 < N2 ; i2++)
386  {
387  copy_general<Tsrc>(src[i1][i2],dst[i1][i2]);
388  }
389  }
390  }
391 };
392 
393 // Added by foggia on 08.03.2024
395 template<typename Tsrc, typename Tdst, size_t N1, size_t N2, size_t N3>
396 struct meta_copy_d<Tsrc[N1][N2][N3],Tdst>
397 {
398  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1][N2][N3], Tdst && dst)
399  {
406  for (size_t i1 = 0 ; i1 < N1 ; i1++)
407  {
408  for (size_t i2 = 0 ; i2 < N2 ; i2++)
409  {
410  for (size_t i3 = 0 ; i3 < N3 ; i3++)
411  {
412  copy_general<Tsrc>(src[i1][i2][i3],static_cast<Tsrc&>(dst[i1][i2][i3]));
413  }
414  }
415  }
416  }
417 
418  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1][N2][N3], Tdst & dst)
419  {
426  for (size_t i1 = 0 ; i1 < N1 ; i1++)
427  {
428  for (size_t i2 = 0 ; i2 < N2 ; i2++)
429  {
430  for (size_t i3 = 0 ; i3 < N3 ; i3++)
431  {
432  copy_general<Tsrc>(src[i1][i2][i3],static_cast<Tsrc&>(dst[i1][i2][i3]));
433  }
434  }
435  }
436  }
437 };
438 
439 // Added by foggia on 08.03.2024
441 template<typename Tsrc, typename Tdst, size_t N1, size_t N2, size_t N3>
442 struct meta_copy_d<Tsrc,Tdst[N1][N2][N3]>
443 {
450  __device__ __host__ static inline void meta_copy_d_(const Tsrc & src, Tdst dst[N1][N2][N3])
451  {
452  for (size_t i1 = 0 ; i1 < N1 ; i1++)
453  {
454  for (size_t i2 = 0 ; i2 < N2 ; i2++)
455  {
456  for (size_t i3 = 0 ; i3 < N3 ; i3++)
457  {
458  copy_general<Tdst>(static_cast<const Tdst&>(src[i1][i2][i3]),dst[i1][i2][i3]);
459  }
460  }
461  }
462  }
463 };
464 
465 // Added by foggia on 08.03.2024
467 template<typename Tsrc, typename Tdst, size_t N1, size_t N2, size_t N3>
468 struct meta_copy_d<Tsrc[N1][N2][N3],Tdst[N1][N2][N3]>
469 {
476  __device__ __host__ static inline void meta_copy_d_(const Tsrc src[N1][N2][N3], Tdst dst[N1][N2][N3])
477  {
478  for (size_t i1 = 0 ; i1 < N1 ; i1++)
479  {
480  for (size_t i2 = 0 ; i2 < N2 ; i2++)
481  {
482  for (size_t i3 = 0 ; i3 < N3 ; i3++)
483  {
484  copy_general<Tsrc>(src[i1][i2][i3],dst[i1][i2][i3]);
485  }
486  }
487  }
488  }
489 };
490 
492 template<typename T,size_t N1,size_t N2,size_t N3>
493 struct meta_copy<T[N1][N2][N3]>
494 {
501  static inline void meta_copy_(const T src[N1][N2][N3], T dst[N1][N2][N3])
502  {
503  for (size_t i1 = 0 ; i1 < N1 ; i1++)
504  {
505  for (size_t i2 = 0 ; i2 < N2 ; i2++)
506  {
507  for (size_t i3 = 0 ; i3 < N3 ; i3++)
508  {
509  copy_general<T>(src[i1][i2][i3],dst[i1][i2][i3]);
510  }
511  }
512  }
513  }
514 };
515 
517 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4>
518 struct meta_copy<T[N1][N2][N3][N4]>
519 {
526  static inline void meta_copy_(const T src[N1][N2][N3][N4], T dst[N1][N2][N3][N4])
527  {
528  for (size_t i1 = 0 ; i1 < N1 ; i1++)
529  {
530  for (size_t i2 = 0 ; i2 < N2 ; i2++)
531  {
532  for (size_t i3 = 0 ; i3 < N3 ; i3++)
533  {
534  for (size_t i4 = 0 ; i4 < N4 ; i4++)
535  {
536  copy_general<T>(src[i1][i2][i3][i4],dst[i1][i2][i3][i4]);
537  }
538  }
539  }
540  }
541  }
542 };
543 
545 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5>
546 struct meta_copy<T[N1][N2][N3][N4][N5]>
547 {
554  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5], T dst[N1][N2][N3][N4][N5])
555  {
556  for (size_t i1 = 0 ; i1 < N1 ; i1++)
557  {
558  for (size_t i2 = 0 ; i2 < N2 ; i2++)
559  {
560  for (size_t i3 = 0 ; i3 < N3 ; i3++)
561  {
562  for (size_t i4 = 0 ; i4 < N4 ; i4++)
563  {
564  for (size_t i5 = 0 ; i5 < N5 ; i5++)
565  {
566  copy_general<T>(src[i1][i2][i3][i4][i5],dst[i1][i2][i3][i4][i5]);
567  }
568  }
569  }
570  }
571  }
572  }
573 };
574 
576 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6>
577 struct meta_copy<T[N1][N2][N3][N4][N5][N6]>
578 {
585  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6], T dst[N1][N2][N3][N4][N5][N6])
586  {
587  for (size_t i1 = 0 ; i1 < N1 ; i1++)
588  {
589  for (size_t i2 = 0 ; i2 < N2 ; i2++)
590  {
591  for (size_t i3 = 0 ; i3 < N3 ; i3++)
592  {
593  for (size_t i4 = 0 ; i4 < N4 ; i4++)
594  {
595  for (size_t i5 = 0 ; i5 < N5 ; i5++)
596  {
597  for (size_t i6 = 0 ; i6 < N6 ; i6++)
598  {
599  copy_general<T>(src[i1][i2][i3][i4][i5][i6],dst[i1][i2][i3][i4][i5][i6]);
600  }
601  }
602  }
603  }
604  }
605  }
606  }
607 };
608 
610 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6, size_t N7>
611 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7]>
612 {
619  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7], T dst[N1][N2][N3][N4][N5][N6][N7])
620  {
621  for (size_t i1 = 0 ; i1 < N1 ; i1++)
622  {
623  for (size_t i2 = 0 ; i2 < N2 ; i2++)
624  {
625  for (size_t i3 = 0 ; i3 < N3 ; i3++)
626  {
627  for (size_t i4 = 0 ; i4 < N4 ; i4++)
628  {
629  for (size_t i5 = 0 ; i5 < N5 ; i5++)
630  {
631  for (size_t i6 = 0 ; i6 < N6 ; i6++)
632  {
633  for (size_t i7 = 0 ; i7 < N7 ; i7++)
634  {
635  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7],dst[i1][i2][i3][i4][i5][i6][i7]);
636  }
637  }
638  }
639  }
640  }
641  }
642  }
643  }
644 };
645 
647 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6, size_t N7, size_t N8>
648 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8]>
649 {
656  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7][N8], T dst[N1][N2][N3][N4][N5][N6][N7][N8])
657  {
658  for (size_t i1 = 0 ; i1 < N1 ; i1++)
659  {
660  for (size_t i2 = 0 ; i2 < N2 ; i2++)
661  {
662  for (size_t i3 = 0 ; i3 < N3 ; i3++)
663  {
664  for (size_t i4 = 0 ; i4 < N4 ; i4++)
665  {
666  for (size_t i5 = 0 ; i5 < N5 ; i5++)
667  {
668  for (size_t i6 = 0 ; i6 < N6 ; i6++)
669  {
670  for (size_t i7 = 0 ; i7 < N7 ; i7++)
671  {
672  for (size_t i8 = 0 ; i8 < N8 ; i8++)
673  {
674  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8],dst[i1][i2][i3][i4][i5][i6][i7][i8]);
675  }
676  }
677  }
678  }
679  }
680  }
681  }
682  }
683  }
684 };
685 
687 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6, size_t N7, size_t N8, size_t N9>
688 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9]>
689 {
696  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7][N8][N9], T dst[N1][N2][N3][N4][N5][N6][N7][N8][N9])
697  {
698  for (size_t i1 = 0 ; i1 < N1 ; i1++)
699  {
700  for (size_t i2 = 0 ; i2 < N2 ; i2++)
701  {
702  for (size_t i3 = 0 ; i3 < N3 ; i3++)
703  {
704  for (size_t i4 = 0 ; i4 < N4 ; i4++)
705  {
706  for (size_t i5 = 0 ; i5 < N5 ; i5++)
707  {
708  for (size_t i6 = 0 ; i6 < N6 ; i6++)
709  {
710  for (size_t i7 = 0 ; i7 < N7 ; i7++)
711  {
712  for (size_t i8 = 0 ; i8 < N8 ; i8++)
713  {
714  for (size_t i9 = 0 ; i9 < N9 ; i9++)
715  {
716  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8][i9],dst[i1][i2][i3][i4][i5][i6][i7][i8][i9]);
717  }
718  }
719  }
720  }
721  }
722  }
723  }
724  }
725  }
726  }
727 };
728 
730 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6, size_t N7, size_t N8, size_t N9, size_t N10>
731 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10]>
732 {
739  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10], T dst[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10])
740  {
741  for (size_t i1 = 0 ; i1 < N1 ; i1++)
742  {
743  for (size_t i2 = 0 ; i2 < N2 ; i2++)
744  {
745  for (size_t i3 = 0 ; i3 < N3 ; i3++)
746  {
747  for (size_t i4 = 0 ; i4 < N4 ; i4++)
748  {
749  for (size_t i5 = 0 ; i5 < N5 ; i5++)
750  {
751  for (size_t i6 = 0 ; i6 < N6 ; i6++)
752  {
753  for (size_t i7 = 0 ; i7 < N7 ; i7++)
754  {
755  for (size_t i8 = 0 ; i8 < N8 ; i8++)
756  {
757  for (size_t i9 = 0 ; i9 < N9 ; i9++)
758  {
759  for (size_t i10 = 0 ; i10 < N10 ; i10++)
760  {
761  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8][i9][i10],dst[i1][i2][i3][i4][i5][i6][i7][i8][i9][i10]);
762  }
763  }
764  }
765  }
766  }
767  }
768  }
769  }
770  }
771  }
772  }
773 };
774 
776 
777 
799 template<template<typename,typename> class op, typename T>
800 struct meta_copy_op
801 {
808  static inline void meta_copy_op_(const T & src, T & dst)
809  {
810  copy_general_op<op,T>(src,dst);
811  }
812 
819  static inline void meta_copy_op_(const T & src, T && dst)
820  {
821  copy_general_op<op,T>(src,dst);
822  }
823 };
824 
826 template<template<typename,typename> class op, typename T, typename vmpl>
827 struct meta_copy_op<op,openfpm::detail::multi_array::sub_array_openfpm<T,1,vmpl>>
828 {
836  {
837  for (size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
838  {
839  copy_general_op<op,T>(src[i1],dst[i1]);
840  }
841  }
842 };
843 
845 template<template<typename,typename> class op, typename T,size_t N1>
846 struct meta_copy_op<op,T[N1]>
847 {
854  static inline void meta_copy_op_(const T src[N1], T dst[N1])
855  {
856  for (size_t i1 = 0 ; i1 < N1 ; i1++)
857  {
858  copy_general_op<op,T>(src[i1],dst[i1]);
859  }
860  }
861 };
862 
864 template<template<typename,typename> class op, typename T, typename vmpl>
865 struct meta_copy_op<op,openfpm::detail::multi_array::sub_array_openfpm<T,2,vmpl>>
866 {
874  {
875  for (size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
876  {
877  for (size_t i2 = 0 ; i2 < boost::mpl::at<vmpl,boost::mpl::int_<1>>::type::value ; i2++)
878  {
879  copy_general_op<op,T>(src[i1][i2],dst[i1][i2]);
880  }
881  }
882  }
883 };
884 
886 template<template<typename,typename> class op, typename T,size_t N1,size_t N2>
887 struct meta_copy_op<op,T[N1][N2]>
888 {
895  static inline void meta_copy_op_(const T src[N1][N2], T dst[N1][N2])
896  {
897  for (size_t i1 = 0 ; i1 < N1 ; i1++)
898  {
899  for (size_t i2 = 0 ; i2 < N2 ; i2++)
900  {
901  copy_general_op<op,T>(src[i1][i2],dst[i1][i2]);
902  }
903  }
904  }
905 };
906 
907 
909 template<template<typename,typename> class op, typename T,size_t N1,size_t N2,size_t N3>
910 struct meta_copy_op<op,T[N1][N2][N3]>
911 {
918  static inline void meta_copy_op_(const T src[N1][N2][N3], T dst[N1][N2][N3])
919  {
920  for (size_t i1 = 0 ; i1 < N1 ; i1++)
921  {
922  for (size_t i2 = 0 ; i2 < N2 ; i2++)
923  {
924  for (size_t i3 = 0 ; i3 < N3 ; i3++)
925  {
926  copy_general_op<op,T>(src[i1][i2][i3],dst[i1][i2][i3]);
927  }
928  }
929  }
930  }
931 };
932 
933 
934 template<template<typename,typename> class op, typename Tsrc, typename Tdst>
936 {
943  __device__ __host__ static inline void meta_copy_op_d_(const Tsrc & src, Tdst & dst)
944  {
945  copy_general_op<op,Tsrc>(src,dst);
946  }
947 
954  __device__ __host__ static inline void meta_copy_op_d_(const Tsrc & src, Tdst && dst)
955  {
956  copy_general_op<op,Tsrc>(src,dst);
957  }
958 };
959 
961 template<template<typename,typename> class op,typename Tsrc, typename Tdst, size_t N1>
962 struct meta_copy_op_d<op,Tsrc[N1],Tdst>
963 {
970  __device__ __host__ static inline void meta_copy_op_d_(const Tsrc src[N1], Tdst && dst)
971  {
972  for (size_t i1 = 0 ; i1 < N1 ; i1++)
973  {
974  copy_general_op<op,Tsrc>(src[i1],static_cast<Tsrc&>(dst[i1]));
975  }
976  }
977 };
978 
980 template<template<typename,typename> class op, typename Tsrc, typename Tdst, size_t N1>
981 struct meta_copy_op_d<op,Tsrc,Tdst[N1]>
982 {
989  __device__ __host__ static inline void meta_copy_op_d_(const Tsrc & src, Tdst dst[N1])
990  {
991  for (size_t i1 = 0 ; i1 < N1 ; i1++)
992  {
993  copy_general_op<op,Tdst>(static_cast<const Tdst&>(src[i1]),dst[i1]);
994  }
995  }
996 };
997 
999 template<template<typename,typename> class op, typename Tsrc, typename Tdst, typename vmpl>
1000 struct meta_copy_op_d<op,openfpm::detail::multi_array::sub_array_openfpm<Tsrc,1,vmpl>,openfpm::detail::multi_array::sub_array_openfpm<Tdst,1,vmpl>>
1001 {
1009  {
1010  for (size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
1011  {
1012  copy_general_op<op,Tdst>(src[i1],dst[i1]);
1013  }
1014  }
1015 };
1016 
1018 template<template<typename,typename> class op, typename Tsrc, typename Tdst, size_t N1>
1019 struct meta_copy_op_d<op,Tsrc[N1],Tdst[N1]>
1020 {
1027  __device__ __host__ static inline void meta_copy_op_d_(const Tsrc src[N1], Tdst dst[N1])
1028  {
1029  for (size_t i1 = 0 ; i1 < N1 ; i1++)
1030  {
1031  copy_general_op<op,Tdst>(src[i1],dst[i1]);
1032  }
1033  }
1034 };
1035 
1037 template<template<typename,typename> class op, typename Tsrc, typename Tdst, size_t N1, size_t N2>
1038 struct meta_copy_op_d<op,Tsrc[N1][N2],Tdst[N1][N2]>
1039 {
1046  __device__ __host__ static inline void meta_copy_op_d_(const Tsrc src[N1][N2], Tdst dst[N1][N2])
1047  {
1048  for (size_t i1 = 0 ; i1 < N1 ; i1++)
1049  {
1050  for (size_t i2 = 0 ; i2 < N2 ; i2++)
1051  {
1052  copy_general_op<op,Tdst>(src[i1][i2],dst[i1][i2]);
1053  }
1054  }
1055  }
1056 };
1057 
1059 template<template<typename,typename> class op, typename Tsrc, typename Tdst, typename vmpl>
1060 struct meta_copy_op_d<op,openfpm::detail::multi_array::sub_array_openfpm<Tsrc,2,vmpl>,openfpm::detail::multi_array::sub_array_openfpm<Tdst,2,vmpl>>
1061 {
1069  {
1070  for (size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
1071  {
1072  for (size_t i2 = 0 ; i2 < boost::mpl::at<vmpl,boost::mpl::int_<1>>::type::value ; i2++)
1073  {
1074  copy_general_op<op,Tdst>(src[i1][i2],dst[i1][i2]);
1075  }
1076  }
1077  }
1078 };
1079 
1080 #endif
std_array_vector_view
Definition: meta_copy.hpp:10
meta_copy_op_d< op, Tsrc[N1], Tdst[N1]>::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const Tsrc src[N1], Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:1027
meta_copy_op_d< op, openfpm::detail::multi_array::sub_array_openfpm< Tsrc, 1, vmpl >, openfpm::detail::multi_array::sub_array_openfpm< Tdst, 1, vmpl > >::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const openfpm::detail::multi_array::sub_array_openfpm< Tsrc, 1, vmpl > src, openfpm::detail::multi_array::sub_array_openfpm< Tdst, 1, vmpl > dst)
copy and object from src to dst
Definition: meta_copy.hpp:1008
meta_copy_d< Tsrc, Tdst[N1][N2]>::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc &src, Tdst dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:357
meta_copy_d< Tsrc[N1][N2][N3], Tdst >::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1][N2][N3], Tdst &dst)
Definition: meta_copy.hpp:418
meta_copy< T[N1]>::meta_copy_
__device__ static __host__ void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm< T, 1, v_mpl > src, T *dst)
copy and object from src to dst
Definition: meta_copy.hpp:167
meta_copy_d< Tsrc[N1][N2], Tdst >::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1][N2], Tdst &dst)
Definition: meta_copy.hpp:329
meta_copy_op_d< op, Tsrc, Tdst[N1]>::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const Tsrc &src, Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:989
meta_copy_d< Tsrc[N1], Tdst >::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1], Tdst &dst)
copy and object from src to dst
Definition: meta_copy.hpp:201
meta_copy< T[N1][N2][N3][N4][N5][N6][N7][N8]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7][N8], T dst[N1][N2][N3][N4][N5][N6][N7][N8])
copy and object from src to dst
Definition: meta_copy.hpp:656
meta_copy::meta_copy_
__device__ static __host__ void meta_copy_(const T &src, T &dst)
copy and object from src to dst
Definition: meta_copy.hpp:60
meta_copy_d< Tsrc[N1][N2][N3], Tdst[N1][N2][N3]>::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1][N2][N3], Tdst dst[N1][N2][N3])
copy and object from src to dst
Definition: meta_copy.hpp:476
meta_copy_op< op, T[N1]>::meta_copy_op_
static void meta_copy_op_(const T src[N1], T dst[N1])
Meta-copy applying an operation.
Definition: meta_copy.hpp:854
meta_copy_op
This class copy general objects applying an operation.
Definition: copy_compare_aggregates.hpp:16
meta_copy_op::meta_copy_op_
static void meta_copy_op_(const T &src, T &dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:808
meta_copy_op< op, openfpm::detail::multi_array::sub_array_openfpm< T, 1, vmpl > >::meta_copy_op_
static void meta_copy_op_(const openfpm::detail::multi_array::sub_array_openfpm< T, 1, vmpl > src, openfpm::detail::multi_array::sub_array_openfpm< T, 1, vmpl > dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:835
meta_copy< T[N1][N2][N3][N4][N5]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4][N5], T dst[N1][N2][N3][N4][N5])
copy and object from src to dst
Definition: meta_copy.hpp:554
meta_copy_d::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc &src, Tdst &dst)
copy and object from src to dst
Definition: meta_copy.hpp:92
meta_copy< T[N1][N2][N3][N4][N5][N6][N7]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7], T dst[N1][N2][N3][N4][N5][N6][N7])
copy and object from src to dst
Definition: meta_copy.hpp:619
meta_copy< T[N1][N2][N3][N4][N5][N6][N7][N8][N9]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7][N8][N9], T dst[N1][N2][N3][N4][N5][N6][N7][N8][N9])
copy and object from src to dst
Definition: meta_copy.hpp:696
meta_copy_op::meta_copy_op_
static void meta_copy_op_(const T &src, T &&dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:819
openfpm
convert a type into constant type
Definition: aggregate.hpp:301
meta_copy_op< op, T[N1][N2][N3]>::meta_copy_op_
static void meta_copy_op_(const T src[N1][N2][N3], T dst[N1][N2][N3])
Meta-copy applying an operation.
Definition: meta_copy.hpp:918
meta_copy< T[N1][N2][N3][N4][N5][N6]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4][N5][N6], T dst[N1][N2][N3][N4][N5][N6])
copy and object from src to dst
Definition: meta_copy.hpp:585
meta_copy< T[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10], T dst[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10])
copy and object from src to dst
Definition: meta_copy.hpp:739
meta_copy< T[N1]>::meta_copy_
__device__ static __host__ void meta_copy_(const T src[N1], std_array_vector_view< T2 > dst)
copy and object from src to dst
Definition: meta_copy.hpp:136
meta_copy_d< Tsrc[N1], Tdst[N1]>::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1], Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:239
meta_copy< T[N1]>::meta_copy_
__device__ static __host__ void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm< T, 1, v_mpl > src, openfpm::detail::multi_array::sub_array_openfpm< T, 1, v_mpl > dst)
copy and object from src to dst
Definition: meta_copy.hpp:151
meta_copy_op< op, openfpm::detail::multi_array::sub_array_openfpm< T, 2, vmpl > >::meta_copy_op_
static void meta_copy_op_(const openfpm::detail::multi_array::sub_array_openfpm< T, 2, vmpl > src, openfpm::detail::multi_array::sub_array_openfpm< T, 2, vmpl > dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:873
meta_copy_d< Tsrc[N1][N2], Tdst >::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1][N2], Tdst &&dst)
Definition: meta_copy.hpp:312
meta_copy< T[N1]>::meta_copy_
__device__ static __host__ void meta_copy_(const T src[N1], T dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:121
meta_copy_op_d< op, Tsrc[N1], Tdst >::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const Tsrc src[N1], Tdst &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:970
meta_copy< T[N1][N2]>::meta_copy_
__device__ static __host__ void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm< T, 2, v_mpl > src, T dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:295
meta_copy
This class copy general objects.
Definition: copy_compare_aggregates.hpp:15
copy_general_op
structure to copy aggregates applying an operation
Definition: copy_general.hpp:236
meta_copy< T[N1][N2][N3]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3], T dst[N1][N2][N3])
copy and object from src to dst
Definition: meta_copy.hpp:501
meta_copy_d::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc &src, Tdst &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:104
meta_copy< T[N1][N2]>::meta_copy_
__device__ static __host__ void meta_copy_(const openfpm::detail::multi_array::sub_array_openfpm< T, 2, v_mpl > src, openfpm::detail::multi_array::sub_array_openfpm< T, 2, v_mpl > dst)
copy and object from src to dst
Definition: meta_copy.hpp:276
meta_copy_op< op, T[N1][N2]>::meta_copy_op_
static void meta_copy_op_(const T src[N1][N2], T dst[N1][N2])
Meta-copy applying an operation.
Definition: meta_copy.hpp:895
meta_copy_d< Tsrc, Tdst[N1][N2][N3]>::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc &src, Tdst dst[N1][N2][N3])
copy and object from src to dst
Definition: meta_copy.hpp:450
meta_copy_op_d
Definition: meta_copy.hpp:935
meta_copy_d< Tsrc[N1][N2][N3], Tdst >::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1][N2][N3], Tdst &&dst)
Definition: meta_copy.hpp:398
meta_copy_d
copy for a source object to a destination
Definition: copy_compare_aggregates.hpp:18
meta_copy< T[N1][N2][N3][N4]>::meta_copy_
static void meta_copy_(const T src[N1][N2][N3][N4], T dst[N1][N2][N3][N4])
copy and object from src to dst
Definition: meta_copy.hpp:526
meta_copy_op_d::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const Tsrc &src, Tdst &dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:943
meta_copy_d< Tsrc, Tdst[N1]>::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc &src, Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:220
meta_copy_op_d< op, Tsrc[N1][N2], Tdst[N1][N2]>::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const Tsrc src[N1][N2], Tdst dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:1046
copy_general
structure to copy aggregates
Definition: copy_general.hpp:162
meta_copy_op_d< op, openfpm::detail::multi_array::sub_array_openfpm< Tsrc, 2, vmpl >, openfpm::detail::multi_array::sub_array_openfpm< Tdst, 2, vmpl > >::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const openfpm::detail::multi_array::sub_array_openfpm< Tsrc, 2, vmpl > src, openfpm::detail::multi_array::sub_array_openfpm< Tdst, 2, vmpl > dst)
copy and object from src to dst
Definition: meta_copy.hpp:1068
meta_copy< T[N1][N2]>::meta_copy_
__device__ static __host__ void meta_copy_(const T src[N1][N2], T dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:258
meta_copy_d< Tsrc[N1][N2], Tdst[N1][N2]>::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1][N2], Tdst dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:381
openfpm::detail::multi_array::sub_array_openfpm
Definition: multi_array_ref_base_openfpm.hpp:48
meta_copy_d< Tsrc[N1], Tdst >::meta_copy_d_
__device__ static __host__ void meta_copy_d_(const Tsrc src[N1], Tdst &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:187
meta_copy_op_d::meta_copy_op_d_
__device__ static __host__ void meta_copy_op_d_(const Tsrc &src, Tdst &&dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:954
meta_copy::meta_copy_
__device__ static __host__ void meta_copy_(const T &src, T &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:71