Chrysalis - Pattern
Loading...
Searching...
No Matches
serialization.h File Reference
#include <boost/preprocessor.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/optional.hpp>
#include <boost/serialization/unique_ptr.hpp>
#include <boost/serialization/unordered_map.hpp>
Include dependency graph for serialization.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define LOAD_FIELD(r, data, field)
#define ACCESS_FIELD(r, data, field)
#define ACCESS_MEMBER(r, data, field)
#define ACCESS_FIELD_PTR(r, data, field)
#define DECLARE_FIELD(r, data, field)
#define LOAD_BASE(r, data, base)
#define FORWARD_MEMBER(r, data, field)
#define PROVIDE_CONSTRUCTION_ACCESS(Class)
#define PROVIDE_SERIALIZATION_ACCESS(Class)
#define PROVIDE_SERIALIZATION_ACCESS_T(Class)
#define PROVIDE_DEFAULT_SERIALIZATION_ACCESS(Class)
#define SERIALIZE_BASE_T(Class, ...)
#define SERIALIZED
#define SERIALIZE(...)
#define SERIALIZE_DERIVED_FROM(Base, ...)
#define SERIALIZATION_CONSTRUCTOR(Class, ...)
#define SERIALIZATION_CONSTRUCTOR_T(Class, ...)
#define SERIALIZE_CONSTRUCTION(Class, ...)
#define SERIALIZE_DERIVED_CONSTRUCTION(Class, Base, ...)
#define SERIALIZE_DERIVED_CONSTRUCTION_T(Class, Base, ...)

Macro Definition Documentation

◆ ACCESS_FIELD

#define ACCESS_FIELD ( r,
data,
field )
Value:
archive & obj.field;

◆ ACCESS_FIELD_PTR

#define ACCESS_FIELD_PTR ( r,
data,
field )
Value:
archive & obj->field;

◆ ACCESS_MEMBER

#define ACCESS_MEMBER ( r,
data,
field )
Value:
archive & this->field;

◆ DECLARE_FIELD

#define DECLARE_FIELD ( r,
data,
field )
Value:
decltype(obj->field) field;

◆ FORWARD_MEMBER

#define FORWARD_MEMBER ( r,
data,
field )
Value:
std::forward<decltype((obj)->field)>(field)

◆ LOAD_BASE

#define LOAD_BASE ( r,
data,
base )
Value:
archive & boost::serialization::base_object<base>(obj);

◆ LOAD_FIELD

#define LOAD_FIELD ( r,
data,
field )
Value:
archive >> field;

◆ PROVIDE_CONSTRUCTION_ACCESS

#define PROVIDE_CONSTRUCTION_ACCESS ( Class)
Value:
template<class Archive> \
friend void save_construct_data(Archive&, const Class*, const unsigned int); \
template<class Archive> \
friend void load_construct_data(Archive&, Class*, const unsigned int);

◆ PROVIDE_DEFAULT_SERIALIZATION_ACCESS

#define PROVIDE_DEFAULT_SERIALIZATION_ACCESS ( Class)
Value:
explicit Class() = default;

◆ PROVIDE_SERIALIZATION_ACCESS

#define PROVIDE_SERIALIZATION_ACCESS ( Class)
Value:
template<class Archive> \
friend void serialize(Archive& archive, Class& project, const unsigned int version); \
template<class Archive> \
friend void save_construct_data(Archive&, const Class*, const unsigned int); \
template<class Archive> \
friend void load_construct_data(Archive&, Class*, const unsigned int);

◆ PROVIDE_SERIALIZATION_ACCESS_T

#define PROVIDE_SERIALIZATION_ACCESS_T ( Class)
Value:
template<class Archive, typename Type> \
friend void serialize(Archive& archive, Class<Type>& project, const unsigned int version); \
template<class Archive, typename Type> \
friend void save_construct_data(Archive&, const Class<Type>*, const unsigned int); \
template<class Archive, typename Type> \
friend void load_construct_data(Archive&, Class<Type>*, const unsigned int);

◆ SERIALIZATION_CONSTRUCTOR

#define SERIALIZATION_CONSTRUCTOR ( Class,
... )
Value:
template<class Archive> \
void save_construct_data(Archive& archive, const Class* obj, const unsigned int) { \
__VA_OPT__( \
BOOST_PP_LIST_FOR_EACH(ACCESS_FIELD_PTR, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
) \
} \
template<class Archive> \
void load_construct_data(Archive& archive, Class* obj, const unsigned int) { \
__VA_OPT__( \
BOOST_PP_LIST_FOR_EACH(DECLARE_FIELD, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
BOOST_PP_LIST_FOR_EACH(LOAD_FIELD, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
) \
::new(obj) Class( \
BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(FORWARD_MEMBER, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))) \
); \
}
#define DECLARE_FIELD(r, data, field)
Definition serialization.h:17
#define ACCESS_FIELD_PTR(r, data, field)
Definition serialization.h:16
#define FORWARD_MEMBER(r, data, field)
Definition serialization.h:19
#define LOAD_FIELD(r, data, field)
Definition serialization.h:13

◆ SERIALIZATION_CONSTRUCTOR_T

#define SERIALIZATION_CONSTRUCTOR_T ( Class,
... )
Value:
template<class Archive, typename T> \
void save_construct_data(Archive& archive, const Class<T>* obj, const unsigned int) { \
__VA_OPT__( \
BOOST_PP_LIST_FOR_EACH(ACCESS_FIELD_PTR, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
) \
} \
template<class Archive, typename T> \
void load_construct_data(Archive& archive, Class<T>* obj, const unsigned int) { \
__VA_OPT__( \
BOOST_PP_LIST_FOR_EACH(DECLARE_FIELD, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
BOOST_PP_LIST_FOR_EACH(LOAD_FIELD, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
) \
::new(obj) Class<T>(__VA_ARGS__); \
}

◆ SERIALIZE

#define SERIALIZE ( ...)
Value:
friend boost::serialization::access; \
template<class Archive> \
void serialize(Archive& archive, const unsigned int) { \
__VA_OPT__( \
BOOST_PP_SEQ_FOR_EACH(ACCESS_MEMBER, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) \
) \
}
#define ACCESS_MEMBER(r, data, field)
Definition serialization.h:15

◆ SERIALIZE_BASE_T

#define SERIALIZE_BASE_T ( Class,
... )
Value:
template <class Archive, typename T> \
void serialize_base(Archive& archive, Class<T>& obj) { \
__VA_OPT__( \
BOOST_PP_SEQ_FOR_EACH(LOAD_BASE, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) \
) \
}
#define LOAD_BASE(r, data, base)
Definition serialization.h:18

◆ SERIALIZE_CONSTRUCTION

#define SERIALIZE_CONSTRUCTION ( Class,
... )
Value:
template<class Archive> \
void serialize(Archive& archive, Class& obj, const unsigned int version) {} \
SERIALIZATION_CONSTRUCTOR(Class, __VA_ARGS__)

◆ SERIALIZE_DERIVED_CONSTRUCTION

#define SERIALIZE_DERIVED_CONSTRUCTION ( Class,
Base,
... )
Value:
template<class Archive> \
void serialize(Archive& archive, Class& obj, const unsigned int version) { \
archive & boost::serialization::base_object<Base>(obj); \
} \
SERIALIZATION_CONSTRUCTOR(Class, __VA_ARGS__)

◆ SERIALIZE_DERIVED_CONSTRUCTION_T

#define SERIALIZE_DERIVED_CONSTRUCTION_T ( Class,
Base,
... )
Value:
template<class Archive, typename T> \
void serialize(Archive& archive, Class<T>& obj, const unsigned int version) { \
archive & boost::serialization::base_object<Base<T>>(obj); \
} \
SERIALIZATION_CONSTRUCTOR_T(Class, __VA_ARGS__)

◆ SERIALIZE_DERIVED_FROM

#define SERIALIZE_DERIVED_FROM ( Base,
... )
Value:
friend boost::serialization::access; \
template<class Archive> \
void serialize(Archive& archive, const unsigned int) { \
archive & boost::serialization::base_object<Base>(*this); \
__VA_OPT__( \
BOOST_PP_LIST_FOR_EACH(ACCESS_MEMBER, _, BOOST_PP_VARIADIC_TO_LIST(__VA_ARGS__)) \
) \
}

◆ SERIALIZED

#define SERIALIZED
Value:
friend boost::serialization::access; \
template<class Archive> \
static void serialize(Archive&, const unsigned int) {}