1 #include<libgeodecomp/config.h>
2 #ifdef LIBGEODECOMP_WITH_BOOST_SERIALIZATION
3 #ifndef LIBGEODECOMP_SERIALIZATION_H
4 #define LIBGEODECOMP_SERIALIZATION_H
5
6 #include <libgeodecomp/misc/chronometer.h>
7 #include <libgeodecomp/misc/clonable.h>
8 #include <libgeodecomp/geometry/coord.h>
9 #include <libgeodecomp/geometry/coord.h>
10 #include <libgeodecomp/geometry/coord.h>
11 #include <libgeodecomp/geometry/coordbox.h>
12 #include <libgeodecomp/storage/defaultfilter.h>
13 #include <libgeodecomp/storage/filter.h>
14 #include <libgeodecomp/storage/filterbase.h>
15 #include <libgeodecomp/storage/fixedarray.h>
16 #include <libgeodecomp/geometry/floatcoord.h>
17 #include <libgeodecomp/geometry/floatcoord.h>
18 #include <libgeodecomp/geometry/floatcoord.h>
19 #include <libgeodecomp/io/hpxwritercollector.h>
20 #include <libgeodecomp/io/initializer.h>
21 #include <libgeodecomp/loadbalancer/loadbalancer.h>
22 #include <libgeodecomp/misc/nonpodtestcell.h>
23 #include <libgeodecomp/loadbalancer/oozebalancer.h>
24 #include <libgeodecomp/io/parallelwriter.h>
25 #include <libgeodecomp/geometry/region.h>
26 #include <libgeodecomp/io/serialbovwriter.h>
27 #include <libgeodecomp/storage/simplefilter.h>
28 #include <libgeodecomp/io/simpleinitializer.h>
29 #include <libgeodecomp/io/steerer.h>
30 #include <libgeodecomp/geometry/streak.h>
31 #include <libgeodecomp/loadbalancer/tracingbalancer.h>
32 #include <libgeodecomp/io/tracingwriter.h>
33 #include <libgeodecomp/io/writer.h>
34
35 namespace LibGeoDecomp {
36 class Serialization
37 {
38 public:
39 template<typename ARCHIVE>
40 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Chronometer & object,const unsigned)41 static void serialize(ARCHIVE& archive, LibGeoDecomp::Chronometer& object, const unsigned /*version*/)
42 {
43 archive & object.totalTimes;
44 }
45
46 template<typename ARCHIVE, typename BASE, typename IMPLEMENTATION>
47 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Clonable<BASE,IMPLEMENTATION> & object,const unsigned)48 static void serialize(ARCHIVE& archive, LibGeoDecomp::Clonable<BASE, IMPLEMENTATION>& object, const unsigned /*version*/)
49 {
50 archive & boost::serialization::base_object<BASE >(object);
51 }
52
53 template<typename ARCHIVE>
54 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Coord<1> & object,const unsigned)55 static void serialize(ARCHIVE& archive, LibGeoDecomp::Coord<1 >& object, const unsigned /*version*/)
56 {
57 archive & object.c;
58 }
59
60 template<typename ARCHIVE>
61 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Coord<2> & object,const unsigned)62 static void serialize(ARCHIVE& archive, LibGeoDecomp::Coord<2 >& object, const unsigned /*version*/)
63 {
64 archive & object.c;
65 }
66
67 template<typename ARCHIVE>
68 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Coord<3> & object,const unsigned)69 static void serialize(ARCHIVE& archive, LibGeoDecomp::Coord<3 >& object, const unsigned /*version*/)
70 {
71 archive & object.c;
72 }
73
74 template<typename ARCHIVE, int DIM>
75 inline
serialize(ARCHIVE & archive,LibGeoDecomp::CoordBox<DIM> & object,const unsigned)76 static void serialize(ARCHIVE& archive, LibGeoDecomp::CoordBox<DIM>& object, const unsigned /*version*/)
77 {
78 archive & object.dimensions;
79 archive & object.origin;
80 }
81
82 template<typename ARCHIVE, typename CELL, typename MEMBER, typename EXTERNAL>
83 inline
serialize(ARCHIVE & archive,LibGeoDecomp::DefaultFilter<CELL,MEMBER,EXTERNAL> & object,const unsigned)84 static void serialize(ARCHIVE& archive, LibGeoDecomp::DefaultFilter<CELL, MEMBER, EXTERNAL>& object, const unsigned /*version*/)
85 {
86 archive & boost::serialization::base_object<LibGeoDecomp::Filter<CELL, MEMBER, EXTERNAL > >(object);
87 }
88
89 template<typename ARCHIVE, typename CELL, typename MEMBER, typename EXTERNAL, int ARITY>
90 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Filter<CELL,MEMBER,EXTERNAL,ARITY> & object,const unsigned)91 static void serialize(ARCHIVE& archive, LibGeoDecomp::Filter<CELL, MEMBER, EXTERNAL, ARITY>& object, const unsigned /*version*/)
92 {
93 archive & boost::serialization::base_object<LibGeoDecomp::FilterBase<CELL > >(object);
94 }
95
96 template<typename ARCHIVE, typename CELL>
97 inline
serialize(ARCHIVE & archive,LibGeoDecomp::FilterBase<CELL> & object,const unsigned)98 static void serialize(ARCHIVE& archive, LibGeoDecomp::FilterBase<CELL>& object, const unsigned /*version*/)
99 {
100 }
101
102 template<typename ARCHIVE, typename T, int SIZE>
103 inline
serialize(ARCHIVE & archive,LibGeoDecomp::FixedArray<T,SIZE> & object,const unsigned)104 static void serialize(ARCHIVE& archive, LibGeoDecomp::FixedArray<T, SIZE>& object, const unsigned /*version*/)
105 {
106 archive & object.elements;
107 archive & object.store;
108 }
109
110 template<typename ARCHIVE>
111 inline
serialize(ARCHIVE & archive,LibGeoDecomp::FloatCoord<1> & object,const unsigned)112 static void serialize(ARCHIVE& archive, LibGeoDecomp::FloatCoord<1 >& object, const unsigned /*version*/)
113 {
114 archive & object.c;
115 }
116
117 template<typename ARCHIVE>
118 inline
serialize(ARCHIVE & archive,LibGeoDecomp::FloatCoord<2> & object,const unsigned)119 static void serialize(ARCHIVE& archive, LibGeoDecomp::FloatCoord<2 >& object, const unsigned /*version*/)
120 {
121 archive & object.c;
122 }
123
124 template<typename ARCHIVE>
125 inline
serialize(ARCHIVE & archive,LibGeoDecomp::FloatCoord<3> & object,const unsigned)126 static void serialize(ARCHIVE& archive, LibGeoDecomp::FloatCoord<3 >& object, const unsigned /*version*/)
127 {
128 archive & object.c;
129 }
130
131 template<typename ARCHIVE, typename CELL_TYPE, typename CONVERTER>
132 inline
serialize(ARCHIVE & archive,LibGeoDecomp::HpxWriterCollector<CELL_TYPE,CONVERTER> & object,const unsigned)133 static void serialize(ARCHIVE& archive, LibGeoDecomp::HpxWriterCollector<CELL_TYPE, CONVERTER>& object, const unsigned /*version*/)
134 {
135 archive & boost::serialization::base_object<LibGeoDecomp::Clonable<ParallelWriter<CELL_TYPE >, HpxWriterCollector<CELL_TYPE, CONVERTER > > >(object);
136 archive & object.sink;
137 }
138
139 template<typename ARCHIVE, typename CELL>
140 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Initializer<CELL> & object,const unsigned)141 static void serialize(ARCHIVE& archive, LibGeoDecomp::Initializer<CELL>& object, const unsigned /*version*/)
142 {
143 }
144
145 template<typename ARCHIVE>
146 inline
serialize(ARCHIVE & archive,LibGeoDecomp::LoadBalancer & object,const unsigned)147 static void serialize(ARCHIVE& archive, LibGeoDecomp::LoadBalancer& object, const unsigned /*version*/)
148 {
149 }
150
151 template<typename ARCHIVE>
152 inline
serialize(ARCHIVE & archive,LibGeoDecomp::NonPoDTestCell & object,const unsigned)153 static void serialize(ARCHIVE& archive, LibGeoDecomp::NonPoDTestCell& object, const unsigned /*version*/)
154 {
155 archive & object.coord;
156 archive & object.cycleCounter;
157 archive & object.missingNeighbors;
158 archive & object.seenNeighbors;
159 archive & object.simSpace;
160 }
161
162 template<typename ARCHIVE>
163 inline
serialize(ARCHIVE & archive,LibGeoDecomp::OozeBalancer & object,const unsigned)164 static void serialize(ARCHIVE& archive, LibGeoDecomp::OozeBalancer& object, const unsigned /*version*/)
165 {
166 archive & boost::serialization::base_object<LibGeoDecomp::LoadBalancer >(object);
167 archive & object.newLoadWeight;
168 }
169
170 template<typename ARCHIVE, typename CELL_TYPE>
171 inline
serialize(ARCHIVE & archive,LibGeoDecomp::ParallelWriter<CELL_TYPE> & object,const unsigned)172 static void serialize(ARCHIVE& archive, LibGeoDecomp::ParallelWriter<CELL_TYPE>& object, const unsigned /*version*/)
173 {
174 archive & object.period;
175 archive & object.prefix;
176 archive & object.region;
177 }
178
179 template<typename ARCHIVE, int DIM>
180 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Region<DIM> & object,const unsigned)181 static void serialize(ARCHIVE& archive, LibGeoDecomp::Region<DIM>& object, const unsigned /*version*/)
182 {
183 archive & object.geometryCacheTainted;
184 archive & object.indices;
185 archive & object.myBoundingBox;
186 archive & object.mySize;
187 }
188
189 template<typename ARCHIVE, typename CELL_TYPE>
190 inline
serialize(ARCHIVE & archive,LibGeoDecomp::SerialBOVWriter<CELL_TYPE> & object,const unsigned)191 static void serialize(ARCHIVE& archive, LibGeoDecomp::SerialBOVWriter<CELL_TYPE>& object, const unsigned /*version*/)
192 {
193 archive & boost::serialization::base_object<LibGeoDecomp::Clonable<Writer<CELL_TYPE >, SerialBOVWriter<CELL_TYPE > > >(object);
194 archive & object.brickletDim;
195 archive & object.selector;
196 }
197
198 template<typename ARCHIVE, typename CELL, typename MEMBER, typename EXTERNAL>
199 inline
serialize(ARCHIVE & archive,LibGeoDecomp::SimpleFilter<CELL,MEMBER,EXTERNAL> & object,const unsigned)200 static void serialize(ARCHIVE& archive, LibGeoDecomp::SimpleFilter<CELL, MEMBER, EXTERNAL>& object, const unsigned /*version*/)
201 {
202 archive & boost::serialization::base_object<LibGeoDecomp::Filter<CELL, MEMBER, EXTERNAL > >(object);
203 }
204
205 template<typename ARCHIVE, typename CELL_TYPE>
206 inline
serialize(ARCHIVE & archive,LibGeoDecomp::SimpleInitializer<CELL_TYPE> & object,const unsigned)207 static void serialize(ARCHIVE& archive, LibGeoDecomp::SimpleInitializer<CELL_TYPE>& object, const unsigned /*version*/)
208 {
209 archive & boost::serialization::base_object<LibGeoDecomp::Initializer<CELL_TYPE > >(object);
210 archive & object.dimensions;
211 archive & object.steps;
212 }
213
214 template<typename ARCHIVE, typename CELL_TYPE>
215 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Steerer<CELL_TYPE> & object,const unsigned)216 static void serialize(ARCHIVE& archive, LibGeoDecomp::Steerer<CELL_TYPE>& object, const unsigned /*version*/)
217 {
218 archive & object.period;
219 archive & object.region;
220 }
221
222 template<typename ARCHIVE, int DIM>
223 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Streak<DIM> & object,const unsigned)224 static void serialize(ARCHIVE& archive, LibGeoDecomp::Streak<DIM>& object, const unsigned /*version*/)
225 {
226 archive & object.endX;
227 archive & object.origin;
228 }
229
230 template<typename ARCHIVE>
231 inline
serialize(ARCHIVE & archive,LibGeoDecomp::TracingBalancer & object,const unsigned)232 static void serialize(ARCHIVE& archive, LibGeoDecomp::TracingBalancer& object, const unsigned /*version*/)
233 {
234 archive & boost::serialization::base_object<LibGeoDecomp::LoadBalancer >(object);
235 archive & object.balancer;
236 archive & object.stream;
237 }
238
239 template<typename ARCHIVE, typename CELL_TYPE>
240 inline
serialize(ARCHIVE & archive,LibGeoDecomp::TracingWriter<CELL_TYPE> & object,const unsigned)241 static void serialize(ARCHIVE& archive, LibGeoDecomp::TracingWriter<CELL_TYPE>& object, const unsigned /*version*/)
242 {
243 archive & boost::serialization::base_object<LibGeoDecomp::Clonable<ParallelWriter<CELL_TYPE >, TracingWriter<CELL_TYPE > > >(object);
244 archive & boost::serialization::base_object<LibGeoDecomp::Clonable<Writer<CELL_TYPE >, TracingWriter<CELL_TYPE > > >(object);
245 archive & object.lastStep;
246 archive & object.maxSteps;
247 archive & object.outputRank;
248 archive & object.startTime;
249 archive & object.stream;
250 }
251
252 template<typename ARCHIVE, typename CELL_TYPE>
253 inline
serialize(ARCHIVE & archive,LibGeoDecomp::Writer<CELL_TYPE> & object,const unsigned)254 static void serialize(ARCHIVE& archive, LibGeoDecomp::Writer<CELL_TYPE>& object, const unsigned /*version*/)
255 {
256 archive & object.period;
257 archive & object.prefix;
258 }
259
260 };
261 }
262
263 namespace boost {
264 namespace serialization {
265
266 using namespace LibGeoDecomp;
267
268 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::Chronometer & object,const unsigned version)269 void serialize(ARCHIVE& archive, LibGeoDecomp::Chronometer& object, const unsigned version)
270 {
271 Serialization::serialize(archive, object, version);
272 }
273
274 template<class ARCHIVE, typename BASE, typename IMPLEMENTATION>
serialize(ARCHIVE & archive,LibGeoDecomp::Clonable<BASE,IMPLEMENTATION> & object,const unsigned version)275 void serialize(ARCHIVE& archive, LibGeoDecomp::Clonable<BASE, IMPLEMENTATION>& object, const unsigned version)
276 {
277 Serialization::serialize(archive, object, version);
278 }
279
280 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::Coord<1> & object,const unsigned version)281 void serialize(ARCHIVE& archive, LibGeoDecomp::Coord<1 >& object, const unsigned version)
282 {
283 Serialization::serialize(archive, object, version);
284 }
285
286 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::Coord<2> & object,const unsigned version)287 void serialize(ARCHIVE& archive, LibGeoDecomp::Coord<2 >& object, const unsigned version)
288 {
289 Serialization::serialize(archive, object, version);
290 }
291
292 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::Coord<3> & object,const unsigned version)293 void serialize(ARCHIVE& archive, LibGeoDecomp::Coord<3 >& object, const unsigned version)
294 {
295 Serialization::serialize(archive, object, version);
296 }
297
298 template<class ARCHIVE, int DIM>
serialize(ARCHIVE & archive,LibGeoDecomp::CoordBox<DIM> & object,const unsigned version)299 void serialize(ARCHIVE& archive, LibGeoDecomp::CoordBox<DIM>& object, const unsigned version)
300 {
301 Serialization::serialize(archive, object, version);
302 }
303
304 template<class ARCHIVE, typename CELL, typename MEMBER, typename EXTERNAL>
serialize(ARCHIVE & archive,LibGeoDecomp::DefaultFilter<CELL,MEMBER,EXTERNAL> & object,const unsigned version)305 void serialize(ARCHIVE& archive, LibGeoDecomp::DefaultFilter<CELL, MEMBER, EXTERNAL>& object, const unsigned version)
306 {
307 Serialization::serialize(archive, object, version);
308 }
309
310 template<class ARCHIVE, typename CELL, typename MEMBER, typename EXTERNAL, int ARITY>
serialize(ARCHIVE & archive,LibGeoDecomp::Filter<CELL,MEMBER,EXTERNAL,ARITY> & object,const unsigned version)311 void serialize(ARCHIVE& archive, LibGeoDecomp::Filter<CELL, MEMBER, EXTERNAL, ARITY>& object, const unsigned version)
312 {
313 Serialization::serialize(archive, object, version);
314 }
315
316 template<class ARCHIVE, typename CELL>
serialize(ARCHIVE & archive,LibGeoDecomp::FilterBase<CELL> & object,const unsigned version)317 void serialize(ARCHIVE& archive, LibGeoDecomp::FilterBase<CELL>& object, const unsigned version)
318 {
319 Serialization::serialize(archive, object, version);
320 }
321
322 template<class ARCHIVE, typename T, int SIZE>
serialize(ARCHIVE & archive,LibGeoDecomp::FixedArray<T,SIZE> & object,const unsigned version)323 void serialize(ARCHIVE& archive, LibGeoDecomp::FixedArray<T, SIZE>& object, const unsigned version)
324 {
325 Serialization::serialize(archive, object, version);
326 }
327
328 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::FloatCoord<1> & object,const unsigned version)329 void serialize(ARCHIVE& archive, LibGeoDecomp::FloatCoord<1 >& object, const unsigned version)
330 {
331 Serialization::serialize(archive, object, version);
332 }
333
334 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::FloatCoord<2> & object,const unsigned version)335 void serialize(ARCHIVE& archive, LibGeoDecomp::FloatCoord<2 >& object, const unsigned version)
336 {
337 Serialization::serialize(archive, object, version);
338 }
339
340 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::FloatCoord<3> & object,const unsigned version)341 void serialize(ARCHIVE& archive, LibGeoDecomp::FloatCoord<3 >& object, const unsigned version)
342 {
343 Serialization::serialize(archive, object, version);
344 }
345
346 template<class ARCHIVE, typename CELL_TYPE, typename CONVERTER>
serialize(ARCHIVE & archive,LibGeoDecomp::HpxWriterCollector<CELL_TYPE,CONVERTER> & object,const unsigned version)347 void serialize(ARCHIVE& archive, LibGeoDecomp::HpxWriterCollector<CELL_TYPE, CONVERTER>& object, const unsigned version)
348 {
349 Serialization::serialize(archive, object, version);
350 }
351
352 template<class ARCHIVE, typename CELL>
serialize(ARCHIVE & archive,LibGeoDecomp::Initializer<CELL> & object,const unsigned version)353 void serialize(ARCHIVE& archive, LibGeoDecomp::Initializer<CELL>& object, const unsigned version)
354 {
355 Serialization::serialize(archive, object, version);
356 }
357
358 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::LoadBalancer & object,const unsigned version)359 void serialize(ARCHIVE& archive, LibGeoDecomp::LoadBalancer& object, const unsigned version)
360 {
361 Serialization::serialize(archive, object, version);
362 }
363
364 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::NonPoDTestCell & object,const unsigned version)365 void serialize(ARCHIVE& archive, LibGeoDecomp::NonPoDTestCell& object, const unsigned version)
366 {
367 Serialization::serialize(archive, object, version);
368 }
369
370 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::OozeBalancer & object,const unsigned version)371 void serialize(ARCHIVE& archive, LibGeoDecomp::OozeBalancer& object, const unsigned version)
372 {
373 Serialization::serialize(archive, object, version);
374 }
375
376 template<class ARCHIVE, typename CELL_TYPE>
serialize(ARCHIVE & archive,LibGeoDecomp::ParallelWriter<CELL_TYPE> & object,const unsigned version)377 void serialize(ARCHIVE& archive, LibGeoDecomp::ParallelWriter<CELL_TYPE>& object, const unsigned version)
378 {
379 Serialization::serialize(archive, object, version);
380 }
381
382 template<class ARCHIVE, int DIM>
serialize(ARCHIVE & archive,LibGeoDecomp::Region<DIM> & object,const unsigned version)383 void serialize(ARCHIVE& archive, LibGeoDecomp::Region<DIM>& object, const unsigned version)
384 {
385 Serialization::serialize(archive, object, version);
386 }
387
388 template<class ARCHIVE, typename CELL_TYPE>
serialize(ARCHIVE & archive,LibGeoDecomp::SerialBOVWriter<CELL_TYPE> & object,const unsigned version)389 void serialize(ARCHIVE& archive, LibGeoDecomp::SerialBOVWriter<CELL_TYPE>& object, const unsigned version)
390 {
391 Serialization::serialize(archive, object, version);
392 }
393
394 template<class ARCHIVE, typename CELL, typename MEMBER, typename EXTERNAL>
serialize(ARCHIVE & archive,LibGeoDecomp::SimpleFilter<CELL,MEMBER,EXTERNAL> & object,const unsigned version)395 void serialize(ARCHIVE& archive, LibGeoDecomp::SimpleFilter<CELL, MEMBER, EXTERNAL>& object, const unsigned version)
396 {
397 Serialization::serialize(archive, object, version);
398 }
399
400 template<class ARCHIVE, typename CELL_TYPE>
serialize(ARCHIVE & archive,LibGeoDecomp::SimpleInitializer<CELL_TYPE> & object,const unsigned version)401 void serialize(ARCHIVE& archive, LibGeoDecomp::SimpleInitializer<CELL_TYPE>& object, const unsigned version)
402 {
403 Serialization::serialize(archive, object, version);
404 }
405
406 template<class ARCHIVE, typename CELL_TYPE>
serialize(ARCHIVE & archive,LibGeoDecomp::Steerer<CELL_TYPE> & object,const unsigned version)407 void serialize(ARCHIVE& archive, LibGeoDecomp::Steerer<CELL_TYPE>& object, const unsigned version)
408 {
409 Serialization::serialize(archive, object, version);
410 }
411
412 template<class ARCHIVE, int DIM>
serialize(ARCHIVE & archive,LibGeoDecomp::Streak<DIM> & object,const unsigned version)413 void serialize(ARCHIVE& archive, LibGeoDecomp::Streak<DIM>& object, const unsigned version)
414 {
415 Serialization::serialize(archive, object, version);
416 }
417
418 template<class ARCHIVE>
serialize(ARCHIVE & archive,LibGeoDecomp::TracingBalancer & object,const unsigned version)419 void serialize(ARCHIVE& archive, LibGeoDecomp::TracingBalancer& object, const unsigned version)
420 {
421 Serialization::serialize(archive, object, version);
422 }
423
424 template<class ARCHIVE, typename CELL_TYPE>
serialize(ARCHIVE & archive,LibGeoDecomp::TracingWriter<CELL_TYPE> & object,const unsigned version)425 void serialize(ARCHIVE& archive, LibGeoDecomp::TracingWriter<CELL_TYPE>& object, const unsigned version)
426 {
427 Serialization::serialize(archive, object, version);
428 }
429
430 template<class ARCHIVE, typename CELL_TYPE>
serialize(ARCHIVE & archive,LibGeoDecomp::Writer<CELL_TYPE> & object,const unsigned version)431 void serialize(ARCHIVE& archive, LibGeoDecomp::Writer<CELL_TYPE>& object, const unsigned version)
432 {
433 Serialization::serialize(archive, object, version);
434 }
435
436
437 }
438 }
439
440 #endif
441
442 #endif
443