aboutsummaryrefslogtreecommitdiff
path: root/src/streams.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2015-11-06 01:32:04 +0100
committerPieter Wuille <pieter.wuille@gmail.com>2016-06-22 15:42:59 +0200
commit7030d9eb47254499bba14f1c00abc6bf493efd91 (patch)
tree95055978907c7418c1b96728ff09413781b9c0b7 /src/streams.h
parentecacfd98e657c5819a1bcb1da93b25d3ad4e5045 (diff)
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.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/streams.h b/src/streams.h
index ed14f3f412..7132364eb1 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.