diff --git a/src/serialization/serialization.h b/src/serialization/serialization.h index 2911aecb5..d1f97e324 100644 --- a/src/serialization/serialization.h +++ b/src/serialization/serialization.h @@ -123,6 +123,17 @@ inline bool do_serialize(Archive &ar, bool &v) template class Archive> \ bool member_do_serialize(Archive &ar) { +/*! \macro BEGIN_SERIALIZE_FN + * + * \brief Begins the environment of the DSL as a free function + * + * Inside, instead of FIELD() and VARINT_FIELD(), use FIELD_F() and + * VARINT_FIELD_F(). Otherwise, this macro is similar to BEGIN_SERIALIZE(). + */ +#define BEGIN_SERIALIZE_FN(stype) \ + template class Archive> \ + bool do_serialize(Archive &ar, stype &v) { + /*! \macro BEGIN_SERIALIZE_OBJECT * * \brief begins the environment of the DSL @@ -139,6 +150,27 @@ inline bool do_serialize(Archive &ar, bool &v) template class Archive> \ bool do_serialize_object(Archive &ar){ +/*! \macro BEGIN_SERIALIZE_OBJECT_FN + * + * \brief Begins the environment of the DSL as a free function in object-style + * + * Inside, instead of FIELD() and VARINT_FIELD(), use FIELD_F() and + * VARINT_FIELD_F(). Otherwise, this macro is similar to + * BEGIN_SERIALIZE_OBJECT(), as you should list only field serializations. + */ +#define BEGIN_SERIALIZE_OBJECT_FN(stype) \ + template class Archive> \ + bool do_serialize_object(Archive &ar, stype &v); \ + template class Archive> \ + bool do_serialize(Archive &ar, stype &v) { \ + ar.begin_object(); \ + bool r = do_serialize_object(ar, v); \ + ar.end_object(); \ + return r; \ + } \ + template class Archive> \ + bool do_serialize_object(Archive &ar, stype &v) { \ + /*! \macro PREPARE_CUSTOM_VECTOR_SERIALIZATION */ #define PREPARE_CUSTOM_VECTOR_SERIALIZATION(size, vec) \ @@ -173,6 +205,12 @@ inline bool do_serialize(Archive &ar, bool &v) if (!r || !ar.good()) return false; \ } while(0); +/*! \macro FIELD_F(f) + * + * \brief tags the field with the variable name and then serializes it (for use in a free function) + */ +#define FIELD_F(f) FIELD_N(#f, v.f) + /*! \macro FIELDS(f) * * \brief does not add a tag to the serialized value @@ -204,6 +242,12 @@ inline bool do_serialize(Archive &ar, bool &v) if (!ar.good()) return false; \ } while(0); +/*! \macro VARINT_FIELD_F(f) + * + * \brief tags and serializes the varint \a f (for use in a free function) + */ +#define VARINT_FIELD_F(f) VARINT_FIELD_N(#f, v.f) + /*! \macro MAGIC_FIELD(m) */ #define MAGIC_FIELD(m) \