OpenFPM_data  0.1.0
Project that contain the implementation and interfaces for basic structure like vectors, grids, graph ... .
 All Data Structures Namespaces Functions Variables Typedefs Friends
meta_copy.hpp
1 #ifndef META_COPY_HPP
2 #define META_COPY_HPP
3 
4 #include "copy_general.hpp"
5 
27 template<typename T>
28 struct meta_copy
29 {
30  inline meta_copy(const T & src, T & dst)
31  {
32  copy_general<T>(src,dst);
33  }
34 };
35 
37 template<typename T,size_t N1>
38 struct meta_copy<T[N1]>
39 {
40  inline meta_copy(const T src[N1], T dst[N1])
41  {
42  for (size_t i1 = 0 ; i1 < N1 ; i1++)
43  {
44  copy_general<T>(src[i1],dst[i1]);
45  }
46  }
47 };
48 
50 template<typename T,size_t N1,size_t N2>
51 struct meta_copy<T[N1][N2]>
52 {
53  inline meta_copy(const T src[N1][N2], T dst[N1][N2])
54  {
55  for (size_t i1 = 0 ; i1 < N1 ; i1++)
56  {
57  for (size_t i2 = 0 ; i2 < N2 ; i2++)
58  {
59  copy_general<T>(src[i1][i2],dst[i1][i2]);
60  }
61  }
62  }
63 };
64 
66 template<typename T,size_t N1,size_t N2,size_t N3>
67 struct meta_copy<T[N1][N2][N3]>
68 {
69  inline meta_copy(const T src[N1][N2][N3], T dst[N1][N2][N3])
70  {
71  for (size_t i1 = 0 ; i1 < N1 ; i1++)
72  {
73  for (size_t i2 = 0 ; i2 < N2 ; i2++)
74  {
75  for (size_t i3 = 0 ; i3 < N3 ; i3++)
76  {
77  copy_general<T>(src[i1][i2][i3],dst[i1][i2][i3]);
78  }
79  }
80  }
81  }
82 };
83 
85 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4>
86 struct meta_copy<T[N1][N2][N3][N4]>
87 {
88  inline meta_copy(const T src[N1][N2][N3][N4], T dst[N1][N2][N3][N4])
89  {
90  for (size_t i1 = 0 ; i1 < N1 ; i1++)
91  {
92  for (size_t i2 = 0 ; i2 < N2 ; i2++)
93  {
94  for (size_t i3 = 0 ; i3 < N3 ; i3++)
95  {
96  for (size_t i4 = 0 ; i4 < N4 ; i4++)
97  {
98  copy_general<T>(src[i1][i2][i3][i4],dst[i1][i2][i3][i4]);
99  }
100  }
101  }
102  }
103  }
104 };
105 
107 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5>
108 struct meta_copy<T[N1][N2][N3][N4][N5]>
109 {
110  inline meta_copy(const T src[N1][N2][N3][N4][N5], T dst[N1][N2][N3][N4][N5])
111  {
112  for (size_t i1 = 0 ; i1 < N1 ; i1++)
113  {
114  for (size_t i2 = 0 ; i2 < N2 ; i2++)
115  {
116  for (size_t i3 = 0 ; i3 < N3 ; i3++)
117  {
118  for (size_t i4 = 0 ; i4 < N4 ; i4++)
119  {
120  for (size_t i5 = 0 ; i5 < N5 ; i5++)
121  {
122  copy_general<T>(src[i1][i2][i3][i4][i5],dst[i1][i2][i3][i4][i5]);
123  }
124  }
125  }
126  }
127  }
128  }
129 };
130 
132 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6>
133 struct meta_copy<T[N1][N2][N3][N4][N5][N6]>
134 {
135  inline meta_copy(const T src[N1][N2][N3][N4][N5][N6], T dst[N1][N2][N3][N4][N5][N6])
136  {
137  for (size_t i1 = 0 ; i1 < N1 ; i1++)
138  {
139  for (size_t i2 = 0 ; i2 < N2 ; i2++)
140  {
141  for (size_t i3 = 0 ; i3 < N3 ; i3++)
142  {
143  for (size_t i4 = 0 ; i4 < N4 ; i4++)
144  {
145  for (size_t i5 = 0 ; i5 < N5 ; i5++)
146  {
147  for (size_t i6 = 0 ; i6 < N6 ; i6++)
148  {
149  copy_general<T>(src[i1][i2][i3][i4][i5][i6],dst[i1][i2][i3][i4][i5][i6]);
150  }
151  }
152  }
153  }
154  }
155  }
156  }
157 };
158 
160 template<typename T,size_t N1,size_t N2,size_t N3,size_t N4,size_t N5, size_t N6, size_t N7>
161 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7]>
162 {
163  inline meta_copy(const T src[N1][N2][N3][N4][N5][N6][N7], T dst[N1][N2][N3][N4][N5][N6][N7])
164  {
165  for (size_t i1 = 0 ; i1 < N1 ; i1++)
166  {
167  for (size_t i2 = 0 ; i2 < N2 ; i2++)
168  {
169  for (size_t i3 = 0 ; i3 < N3 ; i3++)
170  {
171  for (size_t i4 = 0 ; i4 < N4 ; i4++)
172  {
173  for (size_t i5 = 0 ; i5 < N5 ; i5++)
174  {
175  for (size_t i6 = 0 ; i6 < N6 ; i6++)
176  {
177  for (size_t i7 = 0 ; i7 < N7 ; i7++)
178  {
179  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7],dst[i1][i2][i3][i4][i5][i6][i7]);
180  }
181  }
182  }
183  }
184  }
185  }
186  }
187  }
188 };
189 
191 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>
192 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8]>
193 {
194  inline meta_copy(const T src[N1][N2][N3][N4][N5][N6][N7][N8], T dst[N1][N2][N3][N4][N5][N6][N7][N8])
195  {
196  for (size_t i1 = 0 ; i1 < N1 ; i1++)
197  {
198  for (size_t i2 = 0 ; i2 < N2 ; i2++)
199  {
200  for (size_t i3 = 0 ; i3 < N3 ; i3++)
201  {
202  for (size_t i4 = 0 ; i4 < N4 ; i4++)
203  {
204  for (size_t i5 = 0 ; i5 < N5 ; i5++)
205  {
206  for (size_t i6 = 0 ; i6 < N6 ; i6++)
207  {
208  for (size_t i7 = 0 ; i7 < N7 ; i7++)
209  {
210  for (size_t i8 = 0 ; i8 < N8 ; i8++)
211  {
212  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8],dst[i1][i2][i3][i4][i5][i6][i7][i8]);
213  }
214  }
215  }
216  }
217  }
218  }
219  }
220  }
221  }
222 };
223 
225 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>
226 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9]>
227 {
228  inline 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])
229  {
230  for (size_t i1 = 0 ; i1 < N1 ; i1++)
231  {
232  for (size_t i2 = 0 ; i2 < N2 ; i2++)
233  {
234  for (size_t i3 = 0 ; i3 < N3 ; i3++)
235  {
236  for (size_t i4 = 0 ; i4 < N4 ; i4++)
237  {
238  for (size_t i5 = 0 ; i5 < N5 ; i5++)
239  {
240  for (size_t i6 = 0 ; i6 < N6 ; i6++)
241  {
242  for (size_t i7 = 0 ; i7 < N7 ; i7++)
243  {
244  for (size_t i8 = 0 ; i8 < N8 ; i8++)
245  {
246  for (size_t i9 = 0 ; i9 < N9 ; i9++)
247  {
248  copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8][i9],dst[i1][i2][i3][i4][i5][i6][i7][i8][i9]);
249  }
250  }
251  }
252  }
253  }
254  }
255  }
256  }
257  }
258  }
259 };
260 
262 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>
263 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10]>
264 {
265  inline 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])
266  {
267  for (size_t i1 = 0 ; i1 < N1 ; i1++)
268  {
269  for (size_t i2 = 0 ; i2 < N2 ; i2++)
270  {
271  for (size_t i3 = 0 ; i3 < N3 ; i3++)
272  {
273  for (size_t i4 = 0 ; i4 < N4 ; i4++)
274  {
275  for (size_t i5 = 0 ; i5 < N5 ; i5++)
276  {
277  for (size_t i6 = 0 ; i6 < N6 ; i6++)
278  {
279  for (size_t i7 = 0 ; i7 < N7 ; i7++)
280  {
281  for (size_t i8 = 0 ; i8 < N8 ; i8++)
282  {
283  for (size_t i9 = 0 ; i9 < N9 ; i9++)
284  {
285  for (size_t i10 = 0 ; i10 < N10 ; i10++)
286  {
287  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]);
288  }
289  }
290  }
291  }
292  }
293  }
294  }
295  }
296  }
297  }
298  }
299 };
300 
301 #endif
structure to copy aggregates
This class copy general objects.