OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
meta_copy.hpp
1 #ifndef META_COPY_HPP
2 #define META_COPY_HPP
3 
4 #include "copy_general.hpp"
5 
6 
28 template<typename T>
29 struct meta_copy
30 {
37  static inline void meta_copy_(const T & src, T & dst)
38  {
39  copy_general<T>(src,dst);
40  }
41 
48  static inline void meta_copy_(const T & src, T && dst)
49  {
50  copy_general<T>(src,dst);
51  }
52 };
53 
60 template<typename Tsrc,typename Tdst>
62 {
69  static inline void meta_copy_d_(const Tsrc & src, Tdst & dst)
70  {
71  copy_general<Tsrc>(src,dst);
72  }
73 
80  static inline void meta_copy_d_(const Tsrc & src, Tdst && dst)
81  {
82  copy_general<Tsrc>(src,dst);
83  }
84 };
85 
87 template<typename T,size_t N1>
88 struct meta_copy<T[N1]>
89 {
96  static inline void meta_copy_(const T src[N1], T dst[N1])
97  {
98  for (size_t i1 = 0 ; i1 < N1 ; i1++)
99  {
100  copy_general<T>(src[i1],dst[i1]);
101  }
102  }
103 };
104 
106 template<typename Tsrc, typename Tdst, size_t N1>
107 struct meta_copy_d<Tsrc[N1],Tdst>
108 {
115  static inline void meta_copy_d_(const Tsrc src[N1], Tdst && dst)
116  {
117  for (size_t i1 = 0 ; i1 < N1 ; i1++)
118  {
119  copy_general<Tsrc>(src[i1],static_cast<Tsrc&>(dst[i1]));
120  }
121  }
122 };
123 
125 template<typename Tsrc, typename Tdst, size_t N1>
126 struct meta_copy_d<Tsrc,Tdst[N1]>
127 {
134  static inline void meta_copy_d_(const Tsrc & src, Tdst dst[N1])
135  {
136  for (size_t i1 = 0 ; i1 < N1 ; i1++)
137  {
138  copy_general<Tdst>(static_cast<const Tdst&>(src[i1]),dst[i1]);
139  }
140  }
141 };
142 
144 template<typename Tsrc, typename Tdst, size_t N1>
145 struct meta_copy_d<Tsrc[N1],Tdst[N1]>
146 {
153  static inline void meta_copy_d_(const Tsrc src[N1], Tdst dst[N1])
154  {
155  for (size_t i1 = 0 ; i1 < N1 ; i1++)
156  {
157  copy_general<Tsrc>(src[i1],dst[i1]);
158  }
159  }
160 };
161 
163 template<typename T,size_t N1,size_t N2>
164 struct meta_copy<T[N1][N2]>
165 {
172  static inline void meta_copy_(const T src[N1][N2], T dst[N1][N2])
173  {
174  for (size_t i1 = 0 ; i1 < N1 ; i1++)
175  {
176  for (size_t i2 = 0 ; i2 < N2 ; i2++)
177  {
178  copy_general<T>(src[i1][i2],dst[i1][i2]);
179  }
180  }
181  }
182 };
183 
185 template<typename Tsrc, typename Tdst,size_t N1,size_t N2>
186 struct meta_copy_d<Tsrc[N1][N2],Tdst>
187 {
188  static inline void meta_copy_d_(const Tsrc src[N1][N2], Tdst && dst)
189  {
196  for (size_t i1 = 0 ; i1 < N1 ; i1++)
197  {
198  for (size_t i2 = 0 ; i2 < N2 ; i2++)
199  {
200  copy_general<Tsrc>(src[i1][i2],static_cast<Tsrc&>(dst[i1][i2]));
201  }
202  }
203  }
204 };
205 
207 template<typename Tsrc, typename Tdst, size_t N1, size_t N2>
208 struct meta_copy_d<Tsrc,Tdst[N1][N2]>
209 {
216  static inline void meta_copy_d_(const Tsrc & src, Tdst dst[N1][N2])
217  {
218  for (size_t i1 = 0 ; i1 < N1 ; i1++)
219  {
220  for (size_t i2 = 0 ; i2 < N2 ; i2++)
221  {
222  copy_general<Tdst>(static_cast<const Tdst&>(src[i1][i2]),dst[i1][i2]);
223  }
224  }
225  }
226 };
227 
228 
229 
231 template<typename Tsrc, typename Tdst, size_t N1, size_t N2>
232 struct meta_copy_d<Tsrc[N1][N2],Tdst[N1][N2]>
233 {
240  static inline void meta_copy_d_(const Tsrc src[N1][N2], Tdst dst[N1][N2])
241  {
242  for (size_t i1 = 0 ; i1 < N1 ; i1++)
243  {
244  for (size_t i2 = 0 ; i2 < N2 ; i2++)
245  {
246  copy_general<Tsrc>(src[i1][i2],dst[i1][i2]);
247  }
248  }
249  }
250 };
251 
253 template<typename T,size_t N1,size_t N2,size_t N3>
254 struct meta_copy<T[N1][N2][N3]>
255 {
262  static inline void meta_copy_(const T src[N1][N2][N3], T dst[N1][N2][N3])
263  {
264  for (size_t i1 = 0 ; i1 < N1 ; i1++)
265  {
266  for (size_t i2 = 0 ; i2 < N2 ; i2++)
267  {
268  for (size_t i3 = 0 ; i3 < N3 ; i3++)
269  {
270  copy_general<T>(src[i1][i2][i3],dst[i1][i2][i3]);
271  }
272  }
273  }
274  }
275 };
276 
278 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4>
279 struct meta_copy<T[N1][N2][N3][N4]>
280 {
287  static inline void meta_copy_(const T src[N1][N2][N3][N4], T dst[N1][N2][N3][N4])
288  {
289  for (size_t i1 = 0 ; i1 < N1 ; i1++)
290  {
291  for (size_t i2 = 0 ; i2 < N2 ; i2++)
292  {
293  for (size_t i3 = 0 ; i3 < N3 ; i3++)
294  {
295  for (size_t i4 = 0 ; i4 < N4 ; i4++)
296  {
297  copy_general<T>(src[i1][i2][i3][i4],dst[i1][i2][i3][i4]);
298  }
299  }
300  }
301  }
302  }
303 };
304 
306 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5>
307 struct meta_copy<T[N1][N2][N3][N4][N5]>
308 {
315  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5], T dst[N1][N2][N3][N4][N5])
316  {
317  for (size_t i1 = 0 ; i1 < N1 ; i1++)
318  {
319  for (size_t i2 = 0 ; i2 < N2 ; i2++)
320  {
321  for (size_t i3 = 0 ; i3 < N3 ; i3++)
322  {
323  for (size_t i4 = 0 ; i4 < N4 ; i4++)
324  {
325  for (size_t i5 = 0 ; i5 < N5 ; i5++)
326  {
327  copy_general<T>(src[i1][i2][i3][i4][i5],dst[i1][i2][i3][i4][i5]);
328  }
329  }
330  }
331  }
332  }
333  }
334 };
335 
337 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6>
338 struct meta_copy<T[N1][N2][N3][N4][N5][N6]>
339 {
346  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6], T dst[N1][N2][N3][N4][N5][N6])
347  {
348  for (size_t i1 = 0 ; i1 < N1 ; i1++)
349  {
350  for (size_t i2 = 0 ; i2 < N2 ; i2++)
351  {
352  for (size_t i3 = 0 ; i3 < N3 ; i3++)
353  {
354  for (size_t i4 = 0 ; i4 < N4 ; i4++)
355  {
356  for (size_t i5 = 0 ; i5 < N5 ; i5++)
357  {
358  for (size_t i6 = 0 ; i6 < N6 ; i6++)
359  {
360  copy_general<T>(src[i1][i2][i3][i4][i5][i6],dst[i1][i2][i3][i4][i5][i6]);
361  }
362  }
363  }
364  }
365  }
366  }
367  }
368 };
369 
371 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6, size_t N7>
372 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7]>
373 {
380  static inline void meta_copy_(const T src[N1][N2][N3][N4][N5][N6][N7], T dst[N1][N2][N3][N4][N5][N6][N7])
381  {
382  for (size_t i1 = 0 ; i1 < N1 ; i1++)
383  {
384  for (size_t i2 = 0 ; i2 < N2 ; i2++)
385  {
386  for (size_t i3 = 0 ; i3 < N3 ; i3++)
387  {
388  for (size_t i4 = 0 ; i4 < N4 ; i4++)
389  {
390  for (size_t i5 = 0 ; i5 < N5 ; i5++)
391  {
392  for (size_t i6 = 0 ; i6 < N6 ; i6++)
393  {
394  for (size_t i7 = 0 ; i7 < N7 ; i7++)
395  {
396  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7],dst[i1][i2][i3][i4][i5][i6][i7]);
397  }
398  }
399  }
400  }
401  }
402  }
403  }
404  }
405 };
406 
408 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>
409 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8]>
410 {
417  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])
418  {
419  for (size_t i1 = 0 ; i1 < N1 ; i1++)
420  {
421  for (size_t i2 = 0 ; i2 < N2 ; i2++)
422  {
423  for (size_t i3 = 0 ; i3 < N3 ; i3++)
424  {
425  for (size_t i4 = 0 ; i4 < N4 ; i4++)
426  {
427  for (size_t i5 = 0 ; i5 < N5 ; i5++)
428  {
429  for (size_t i6 = 0 ; i6 < N6 ; i6++)
430  {
431  for (size_t i7 = 0 ; i7 < N7 ; i7++)
432  {
433  for (size_t i8 = 0 ; i8 < N8 ; i8++)
434  {
435  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8],dst[i1][i2][i3][i4][i5][i6][i7][i8]);
436  }
437  }
438  }
439  }
440  }
441  }
442  }
443  }
444  }
445 };
446 
448 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>
449 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9]>
450 {
457  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])
458  {
459  for (size_t i1 = 0 ; i1 < N1 ; i1++)
460  {
461  for (size_t i2 = 0 ; i2 < N2 ; i2++)
462  {
463  for (size_t i3 = 0 ; i3 < N3 ; i3++)
464  {
465  for (size_t i4 = 0 ; i4 < N4 ; i4++)
466  {
467  for (size_t i5 = 0 ; i5 < N5 ; i5++)
468  {
469  for (size_t i6 = 0 ; i6 < N6 ; i6++)
470  {
471  for (size_t i7 = 0 ; i7 < N7 ; i7++)
472  {
473  for (size_t i8 = 0 ; i8 < N8 ; i8++)
474  {
475  for (size_t i9 = 0 ; i9 < N9 ; i9++)
476  {
477  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8][i9],dst[i1][i2][i3][i4][i5][i6][i7][i8][i9]);
478  }
479  }
480  }
481  }
482  }
483  }
484  }
485  }
486  }
487  }
488 };
489 
491 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>
492 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10]>
493 {
500  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])
501  {
502  for (size_t i1 = 0 ; i1 < N1 ; i1++)
503  {
504  for (size_t i2 = 0 ; i2 < N2 ; i2++)
505  {
506  for (size_t i3 = 0 ; i3 < N3 ; i3++)
507  {
508  for (size_t i4 = 0 ; i4 < N4 ; i4++)
509  {
510  for (size_t i5 = 0 ; i5 < N5 ; i5++)
511  {
512  for (size_t i6 = 0 ; i6 < N6 ; i6++)
513  {
514  for (size_t i7 = 0 ; i7 < N7 ; i7++)
515  {
516  for (size_t i8 = 0 ; i8 < N8 ; i8++)
517  {
518  for (size_t i9 = 0 ; i9 < N9 ; i9++)
519  {
520  for (size_t i10 = 0 ; i10 < N10 ; i10++)
521  {
522  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]);
523  }
524  }
525  }
526  }
527  }
528  }
529  }
530  }
531  }
532  }
533  }
534 };
535 
537 
538 
560 template<template<typename,typename> class op, typename T>
561 struct meta_copy_op
562 {
569  static inline void meta_copy_op_(const T & src, T & dst)
570  {
571  copy_general_op<op,T>(src,dst);
572  }
573 
580  static inline void meta_copy_op_(const T & src, T && dst)
581  {
582  copy_general_op<op,T>(src,dst);
583  }
584 };
585 
586 
588 template<template<typename,typename> class op, typename T,size_t N1>
589 struct meta_copy_op<op,T[N1]>
590 {
597  static inline void meta_copy_op_(const T src[N1], T dst[N1])
598  {
599  for (size_t i1 = 0 ; i1 < N1 ; i1++)
600  {
601  copy_general_op<op,T>(src[i1],dst[i1]);
602  }
603  }
604 };
605 
607 template<template<typename,typename> class op, typename T,size_t N1,size_t N2>
608 struct meta_copy_op<op,T[N1][N2]>
609 {
616  static inline void meta_copy_op_(const T src[N1][N2], T dst[N1][N2])
617  {
618  for (size_t i1 = 0 ; i1 < N1 ; i1++)
619  {
620  for (size_t i2 = 0 ; i2 < N2 ; i2++)
621  {
622  copy_general_op<op,T>(src[i1][i2],dst[i1][i2]);
623  }
624  }
625  }
626 };
627 
628 
630 template<template<typename,typename> class op, typename T,size_t N1,size_t N2,size_t N3>
631 struct meta_copy_op<op,T[N1][N2][N3]>
632 {
639  static inline void meta_copy_op_(const T src[N1][N2][N3], T dst[N1][N2][N3])
640  {
641  for (size_t i1 = 0 ; i1 < N1 ; i1++)
642  {
643  for (size_t i2 = 0 ; i2 < N2 ; i2++)
644  {
645  for (size_t i3 = 0 ; i3 < N3 ; i3++)
646  {
647  copy_general_op<op,T>(src[i1][i2][i3],dst[i1][i2][i3]);
648  }
649  }
650  }
651  }
652 };
653 
654 
655 template<template<typename,typename> class op, typename Tsrc, typename Tdst>
657 {
664  static inline void meta_copy_op_d_(const Tsrc & src, Tdst & dst)
665  {
666  copy_general_op<op,Tsrc>(src,dst);
667  }
668 
675  static inline void meta_copy_op_d_(const Tsrc & src, Tdst && dst)
676  {
677  copy_general_op<op,Tsrc>(src,dst);
678  }
679 };
680 
682 template<template<typename,typename> class op,typename Tsrc, typename Tdst, size_t N1>
683 struct meta_copy_op_d<op,Tsrc[N1],Tdst>
684 {
691  static inline void meta_copy_op_d_(const Tsrc src[N1], Tdst && dst)
692  {
693  for (size_t i1 = 0 ; i1 < N1 ; i1++)
694  {
695  copy_general_op<op,Tsrc>(src[i1],static_cast<Tsrc&>(dst[i1]));
696  }
697  }
698 };
699 
701 template<template<typename,typename> class op, typename Tsrc, typename Tdst, size_t N1>
702 struct meta_copy_op_d<op,Tsrc,Tdst[N1]>
703 {
710  static inline void meta_copy_op_d_(const Tsrc & src, Tdst dst[N1])
711  {
712  for (size_t i1 = 0 ; i1 < N1 ; i1++)
713  {
714  copy_general_op<op,Tdst>(static_cast<const Tdst&>(src[i1]),dst[i1]);
715  }
716  }
717 };
718 
720 template<template<typename,typename> class op, typename Tsrc, typename Tdst, size_t N1>
721 struct meta_copy_op_d<op,Tsrc[N1],Tdst[N1]>
722 {
729  static inline void meta_copy_op_d_(const Tsrc src[N1], Tdst dst[N1])
730  {
731  for (size_t i1 = 0 ; i1 < N1 ; i1++)
732  {
733  copy_general_op<op,Tdst>(src[i1],dst[i1]);
734  }
735  }
736 };
737 
738 #endif
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:380
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:287
static void meta_copy_(const T &src, T &dst)
copy and object from src to dst
Definition: meta_copy.hpp:37
structure to copy aggregates applying an operation
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:457
static void meta_copy_op_(const T &src, T &dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:569
static void meta_copy_d_(const Tsrc src[N1], Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:153
static void meta_copy_(const T src[N1][N2], T dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:172
This class copy general objects applying an operation.
structure to copy aggregates
static void meta_copy_d_(const Tsrc &src, Tdst dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:216
static void meta_copy_op_(const T &src, T &&dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:580
static void meta_copy_op_(const T src[N1][N2], T dst[N1][N2])
Meta-copy applying an operation.
Definition: meta_copy.hpp:616
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:417
static void meta_copy_d_(const Tsrc src[N1], Tdst &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:115
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:346
static void meta_copy_d_(const Tsrc &src, Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:134
This class copy general objects.
static void meta_copy_op_d_(const Tsrc &src, Tdst &&dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:675
static void meta_copy_(const T &src, T &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:48
static void meta_copy_d_(const Tsrc &src, Tdst &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:80
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:639
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:315
static void meta_copy_op_d_(const Tsrc src[N1], Tdst &&dst)
copy and object from src to dst
Definition: meta_copy.hpp:691
static void meta_copy_op_(const T src[N1], T dst[N1])
Meta-copy applying an operation.
Definition: meta_copy.hpp:597
static void meta_copy_d_(const Tsrc src[N1][N2], Tdst dst[N1][N2])
copy and object from src to dst
Definition: meta_copy.hpp:240
static void meta_copy_op_d_(const Tsrc &src, Tdst &dst)
Meta-copy applying an operation.
Definition: meta_copy.hpp:664
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:500
copy for a source object to a destination
Definition: meta_copy.hpp:61
static void meta_copy_(const T src[N1], T dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:96
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:262
static void meta_copy_op_d_(const Tsrc src[N1], Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:729
static void meta_copy_d_(const Tsrc src[N1][N2], Tdst &&dst)
Definition: meta_copy.hpp:188
static void meta_copy_d_(const Tsrc &src, Tdst &dst)
copy and object from src to dst
Definition: meta_copy.hpp:69
static void meta_copy_op_d_(const Tsrc &src, Tdst dst[N1])
copy and object from src to dst
Definition: meta_copy.hpp:710