Empirical
serialize_macros.h
Go to the documentation of this file.
1 
12 #ifndef EMP_SERIALIZE_MACROS_H
13 #define EMP_SERIALIZE_MACROS_H
14 
15 #include "../base/macros.h"
16 
17 #define EMP_SERIALIZE_INIT_VAR(VAR) VAR(emp::serialize::SetupLoad(pod, &VAR, true))
18 
20 #define EMP_SETUP_DATAPOD_BASEINFO(CLASS_NAME, BASE_LOAD, BASE_STORE, ...) \
21  using emp_load_return_type = emp::serialize::DataPod; \
22  void EMP_Store(emp::serialize::DataPod & pod) const { \
23  BASE_STORE; \
24  emp::serialize::Store(pod, __VA_ARGS__); \
25  } \
26  explicit CLASS_NAME(emp::serialize::DataPod & pod) \
27  : BASE_LOAD EMP_WRAP_ARGS(EMP_SERIALIZE_INIT_VAR, __VA_ARGS__) { \
28  }
29 
30 
31 
33 #define EMP_SETUP_DATAPOD(CLASS_NAME, ...) \
34  EMP_SETUP_DATAPOD_BASEINFO(CLASS_NAME, , , __VA_ARGS__)
35 
37 #define EMP_SETUP_DATAPOD_D(CLASS_NAME, BASE_CLASS, ...) \
38  EMP_SETUP_DATAPOD_BASEINFO(CLASS_NAME, \
39  EMP_CALL_BASE_1(BASE_CLASS), \
40  BASE_CLASS::EMP_Store(pod), \
41  __VA_ARGS__)
42 
44 
45 #define EMP_SETUP_DATAPOD_D2(CLASS_NAME, BASE_CLASS1, BASE_CLASS2, ...) \
46  EMP_SETUP_DATAPOD_BASEINFO(CLASS_NAME, \
47  EMP_CALL_BASE_2(BASE_CLASS1, BASE_CLASS2), \
48  BASE_CLASS1::EMP_Store(pod); BASE_CLASS2::EMP_Store(pod), \
49  __VA_ARGS__)
50 
51 #define EMP_CALL_BASE_1(BASE1) BASE1(pod),
52 #define EMP_CALL_BASE_2(BASE1, BASE2) BASE1(pod), BASE2(pod),
53 
54 #endif