diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2014-09-01 21:00:32 +0200 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2014-09-01 21:23:01 +0200 |
commit | 2e731f24b5a5c894e013a6d752f1cd409303e916 (patch) | |
tree | 94ba6f1e3ab9ecb5ac1696b48b1aabc859aa8365 /src/protocol.h | |
parent | f6a81050372810d8eebc15523bde28e91d045314 (diff) | |
parent | 31e9a8384a77947f6777d035992f4734618ed206 (diff) |
Merge pull request #4737
31e9a83 Use CSizeComputer to avoid counting sizes in SerializationOp (Pieter Wuille)
84881f8 rework overhauled serialization methods to non-static (Kamil Domanski)
5d96b4a remove fields of ser_streamplaceholder (Kamil Domanski)
3d796f8 overhaul serialization code (Kamil Domanski)
Diffstat (limited to 'src/protocol.h')
-rw-r--r-- | src/protocol.h | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/src/protocol.h b/src/protocol.h index d7565584af..e4b0991774 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -35,13 +35,15 @@ class CMessageHeader std::string GetCommand() const; bool IsValid() const; - IMPLEMENT_SERIALIZE - ( - READWRITE(FLATDATA(pchMessageStart)); - READWRITE(FLATDATA(pchCommand)); - READWRITE(nMessageSize); - READWRITE(nChecksum); - ) + IMPLEMENT_SERIALIZE; + + template <typename Stream, typename Operation> + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { + READWRITE(FLATDATA(pchMessageStart)); + READWRITE(FLATDATA(pchCommand)); + READWRITE(nMessageSize); + READWRITE(nChecksum); + } // TODO: make private (improves encapsulation) public: @@ -83,20 +85,23 @@ class CAddress : public CService void Init(); - IMPLEMENT_SERIALIZE - ( - CAddress* pthis = const_cast<CAddress*>(this); - CService* pip = (CService*)pthis; - if (fRead) - pthis->Init(); - if (nType & SER_DISK) - READWRITE(nVersion); - if ((nType & SER_DISK) || - (nVersion >= CADDR_TIME_VERSION && !(nType & SER_GETHASH))) - READWRITE(nTime); - READWRITE(nServices); - READWRITE(*pip); - ) + IMPLEMENT_SERIALIZE; + + template <typename Stream, typename Operation> + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { + bool fRead = ser_action.ForRead(); + + CAddress* pthis = const_cast<CAddress*>(this); + if (fRead) + pthis->Init(); + if (nType & SER_DISK) + READWRITE(nVersion); + if ((nType & SER_DISK) || + (nVersion >= CADDR_TIME_VERSION && !(nType & SER_GETHASH))) + READWRITE(nTime); + READWRITE(nServices); + READWRITE(*(CService*)this); + } // TODO: make private (improves encapsulation) public: @@ -117,11 +122,13 @@ class CInv CInv(int typeIn, const uint256& hashIn); CInv(const std::string& strType, const uint256& hashIn); - IMPLEMENT_SERIALIZE - ( + IMPLEMENT_SERIALIZE; + + template <typename Stream, typename Operation> + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { READWRITE(type); READWRITE(hash); - ) + } friend bool operator<(const CInv& a, const CInv& b); |