diff options
| author | Cory Fields <[email protected]> | 2016-09-12 14:38:01 -0400 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2016-11-03 13:32:09 -0700 |
| commit | b98c14c4e362a8e59d7a3b021651a19ea61b29dd (patch) | |
| tree | 372648cea84dd1cfca0d86caab27ac0b18ecc6e2 /src/serialize.h | |
| parent | Merge #9073: Trivial: Add common failure cases for rpc server connection failure (diff) | |
| download | discoin-b98c14c4e362a8e59d7a3b021651a19ea61b29dd.tar.xz discoin-b98c14c4e362a8e59d7a3b021651a19ea61b29dd.zip | |
serialization: teach serializers variadics
Also add a variadic CDataStream ctor for ease-of-use.
Diffstat (limited to 'src/serialize.h')
| -rw-r--r-- | src/serialize.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/serialize.h b/src/serialize.h index 1f51da82f..82870c45b 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -160,6 +160,7 @@ enum }; #define READWRITE(obj) (::SerReadWrite(s, (obj), nType, nVersion, ser_action)) +#define READWRITEMANY(...) (::SerReadWriteMany(s, nType, nVersion, ser_action, __VA_ARGS__)) /** * Implement three methods for serializable objects. These are actually wrappers over @@ -960,4 +961,52 @@ public: } }; +template<typename Stream> +void SerializeMany(Stream& s, int nType, int nVersion) +{ +} + +template<typename Stream, typename Arg> +void SerializeMany(Stream& s, int nType, int nVersion, Arg&& arg) +{ + ::Serialize(s, std::forward<Arg>(arg), nType, nVersion); +} + +template<typename Stream, typename Arg, typename... Args> +void SerializeMany(Stream& s, int nType, int nVersion, Arg&& arg, Args&&... args) +{ + ::Serialize(s, std::forward<Arg>(arg), nType, nVersion); + ::SerializeMany(s, nType, nVersion, std::forward<Args>(args)...); +} + +template<typename Stream> +inline void UnserializeMany(Stream& s, int nType, int nVersion) +{ +} + +template<typename Stream, typename Arg> +inline void UnserializeMany(Stream& s, int nType, int nVersion, Arg& arg) +{ + ::Unserialize(s, arg, nType, nVersion); +} + +template<typename Stream, typename Arg, typename... Args> +inline void UnserializeMany(Stream& s, int nType, int nVersion, Arg& arg, Args&... args) +{ + ::Unserialize(s, arg, nType, nVersion); + ::UnserializeMany(s, nType, nVersion, args...); +} + +template<typename Stream, typename... Args> +inline void SerReadWriteMany(Stream& s, int nType, int nVersion, CSerActionSerialize ser_action, Args&&... args) +{ + ::SerializeMany(s, nType, nVersion, std::forward<Args>(args)...); +} + +template<typename Stream, typename... Args> +inline void SerReadWriteMany(Stream& s, int nType, int nVersion, CSerActionUnserialize ser_action, Args&... args) +{ + ::UnserializeMany(s, nType, nVersion, args...); +} + #endif // BITCOIN_SERIALIZE_H |