diff options
| author | Pieter Wuille <[email protected]> | 2015-11-06 01:32:04 +0100 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2016-06-22 15:42:59 +0200 |
| commit | 7030d9eb47254499bba14f1c00abc6bf493efd91 (patch) | |
| tree | 95055978907c7418c1b96728ff09413781b9c0b7 /src/streams.h | |
| parent | --- [SEGWIT] begin: P2P/node/consensus --- (diff) | |
| download | discoin-7030d9eb47254499bba14f1c00abc6bf493efd91.tar.xz discoin-7030d9eb47254499bba14f1c00abc6bf493efd91.zip | |
BIP144: Serialization, hashes, relay (sender side)
Contains refactorings by Eric Lombrozo.
Contains fixup by Nicolas Dorier.
Contains cleanup of CInv::GetCommand by Alex Morcos
Diffstat (limited to 'src/streams.h')
| -rw-r--r-- | src/streams.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/streams.h b/src/streams.h index ed14f3f41..7132364eb 100644 --- a/src/streams.h +++ b/src/streams.h @@ -22,6 +22,39 @@ #include <utility> #include <vector> +template<typename Stream> +class OverrideStream +{ + Stream* stream; +public: + const int nType; + const int nVersion; + + OverrideStream(Stream* stream_, int nType_, int nVersion_) : stream(stream_), nType(nType_), nVersion(nVersion_) {} + + template<typename T> + OverrideStream<Stream>& operator<<(const T& obj) + { + // Serialize to this stream + ::Serialize(*this->stream, obj, nType, nVersion); + return (*this); + } + + template<typename T> + OverrideStream<Stream>& operator>>(T& obj) + { + // Unserialize from this stream + ::Unserialize(*this->stream, obj, nType, nVersion); + return (*this); + } +}; + +template<typename S> +OverrideStream<S> WithOrVersion(S* s, int nVersionFlag) +{ + return OverrideStream<S>(s, s->GetType(), s->GetVersion() | nVersionFlag); +} + /** Double ended buffer combining vector and stream-like interfaces. * * >> and << read and write unformatted data using the above serialization templates. |