|
|
|
@ -13,6 +13,7 @@
@@ -13,6 +13,7 @@
|
|
|
|
|
#include <ios> |
|
|
|
|
#include <limits> |
|
|
|
|
#include <map> |
|
|
|
|
#include <memory> |
|
|
|
|
#include <set> |
|
|
|
|
#include <stdint.h> |
|
|
|
|
#include <string> |
|
|
|
@ -24,6 +25,20 @@
@@ -24,6 +25,20 @@
|
|
|
|
|
|
|
|
|
|
static const unsigned int MAX_SIZE = 0x02000000; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Dummy data type to identify deserializing constructors. |
|
|
|
|
* |
|
|
|
|
* By convention, a constructor of a type T with signature |
|
|
|
|
* |
|
|
|
|
* template <typename Stream> T::T(deserialize_type, Stream& s) |
|
|
|
|
* |
|
|
|
|
* is a deserializing constructor, which builds the type by |
|
|
|
|
* deserializing it from s. If T contains const fields, this |
|
|
|
|
* is likely the only way to do so. |
|
|
|
|
*/ |
|
|
|
|
struct deserialize_type {}; |
|
|
|
|
constexpr deserialize_type deserialize {}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Used to bypass the rule against non-const reference to temporary |
|
|
|
|
* where it makes sense with wrappers such as CFlatData or CTxDB |
|
|
|
@ -521,7 +536,17 @@ template<typename Stream, typename K, typename T, typename Pred, typename A> voi
@@ -521,7 +536,17 @@ template<typename Stream, typename K, typename T, typename Pred, typename A> voi
|
|
|
|
|
template<typename Stream, typename K, typename Pred, typename A> void Serialize(Stream& os, const std::set<K, Pred, A>& m); |
|
|
|
|
template<typename Stream, typename K, typename Pred, typename A> void Unserialize(Stream& is, std::set<K, Pred, A>& m); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* shared_ptr |
|
|
|
|
*/ |
|
|
|
|
template<typename Stream, typename T> void Serialize(Stream& os, const std::shared_ptr<const T>& p); |
|
|
|
|
template<typename Stream, typename T> void Unserialize(Stream& os, std::shared_ptr<const T>& p); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* unique_ptr |
|
|
|
|
*/ |
|
|
|
|
template<typename Stream, typename T> void Serialize(Stream& os, const std::unique_ptr<const T>& p); |
|
|
|
|
template<typename Stream, typename T> void Unserialize(Stream& os, std::unique_ptr<const T>& p); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -775,6 +800,40 @@ void Unserialize(Stream& is, std::set<K, Pred, A>& m)
@@ -775,6 +800,40 @@ void Unserialize(Stream& is, std::set<K, Pred, A>& m)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* unique_ptr |
|
|
|
|
*/ |
|
|
|
|
template<typename Stream, typename T> void |
|
|
|
|
Serialize(Stream& os, const std::unique_ptr<const T>& p) |
|
|
|
|
{ |
|
|
|
|
Serialize(os, *p); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename Stream, typename T> |
|
|
|
|
void Unserialize(Stream& is, std::unique_ptr<const T>& p) |
|
|
|
|
{ |
|
|
|
|
p.reset(new T(deserialize, is)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* shared_ptr |
|
|
|
|
*/ |
|
|
|
|
template<typename Stream, typename T> void |
|
|
|
|
Serialize(Stream& os, const std::shared_ptr<const T>& p) |
|
|
|
|
{ |
|
|
|
|
Serialize(os, *p); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename Stream, typename T> |
|
|
|
|
void Unserialize(Stream& is, std::shared_ptr<const T>& p) |
|
|
|
|
{ |
|
|
|
|
p = std::make_shared<const T>(deserialize, is); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Support for ADD_SERIALIZE_METHODS and READWRITE macro |
|
|
|
|
*/ |
|
|
|
|