|
|
|
@ -60,9 +60,7 @@ class CDataStream;
@@ -60,9 +60,7 @@ class CDataStream;
|
|
|
|
|
class CAutoFile; |
|
|
|
|
static const unsigned int MAX_SIZE = 0x02000000; |
|
|
|
|
|
|
|
|
|
static const int VERSION = 59900; |
|
|
|
|
static const char* pszSubVer = ""; |
|
|
|
|
static const bool VERSION_IS_BETA = true; |
|
|
|
|
static const int PROTOCOL_VERSION = 60000; |
|
|
|
|
|
|
|
|
|
// Used to bypass the rule against non-const reference to temporary
|
|
|
|
|
// where it makes sense with wrappers such as CFlatData or CTxDB
|
|
|
|
@ -91,7 +89,7 @@ enum
@@ -91,7 +89,7 @@ enum
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#define IMPLEMENT_SERIALIZE(statements) \ |
|
|
|
|
unsigned int GetSerializeSize(int nType=0, int nVersion=VERSION) const \ |
|
|
|
|
unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const \ |
|
|
|
|
{ \ |
|
|
|
|
CSerActionGetSerializeSize ser_action; \ |
|
|
|
|
const bool fGetSize = true; \ |
|
|
|
@ -105,7 +103,7 @@ enum
@@ -105,7 +103,7 @@ enum
|
|
|
|
|
return nSerSize; \ |
|
|
|
|
} \ |
|
|
|
|
template<typename Stream> \ |
|
|
|
|
void Serialize(Stream& s, int nType=0, int nVersion=VERSION) const \ |
|
|
|
|
void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const \ |
|
|
|
|
{ \ |
|
|
|
|
CSerActionSerialize ser_action; \ |
|
|
|
|
const bool fGetSize = false; \ |
|
|
|
@ -115,7 +113,7 @@ enum
@@ -115,7 +113,7 @@ enum
|
|
|
|
|
{statements} \ |
|
|
|
|
} \ |
|
|
|
|
template<typename Stream> \ |
|
|
|
|
void Unserialize(Stream& s, int nType=0, int nVersion=VERSION) \ |
|
|
|
|
void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) \ |
|
|
|
|
{ \ |
|
|
|
|
CSerActionUnserialize ser_action; \ |
|
|
|
|
const bool fGetSize = false; \ |
|
|
|
@ -362,43 +360,43 @@ template<typename Stream, typename C> void Unserialize(Stream& is, std::basic_st
@@ -362,43 +360,43 @@ template<typename Stream, typename C> void Unserialize(Stream& is, std::basic_st
|
|
|
|
|
// vector
|
|
|
|
|
template<typename T, typename A> unsigned int GetSerializeSize_impl(const std::vector<T, A>& v, int nType, int nVersion, const boost::true_type&); |
|
|
|
|
template<typename T, typename A> unsigned int GetSerializeSize_impl(const std::vector<T, A>& v, int nType, int nVersion, const boost::false_type&); |
|
|
|
|
template<typename T, typename A> inline unsigned int GetSerializeSize(const std::vector<T, A>& v, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename T, typename A> inline unsigned int GetSerializeSize(const std::vector<T, A>& v, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename T, typename A> void Serialize_impl(Stream& os, const std::vector<T, A>& v, int nType, int nVersion, const boost::true_type&); |
|
|
|
|
template<typename Stream, typename T, typename A> void Serialize_impl(Stream& os, const std::vector<T, A>& v, int nType, int nVersion, const boost::false_type&); |
|
|
|
|
template<typename Stream, typename T, typename A> inline void Serialize(Stream& os, const std::vector<T, A>& v, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename T, typename A> inline void Serialize(Stream& os, const std::vector<T, A>& v, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename T, typename A> void Unserialize_impl(Stream& is, std::vector<T, A>& v, int nType, int nVersion, const boost::true_type&); |
|
|
|
|
template<typename Stream, typename T, typename A> void Unserialize_impl(Stream& is, std::vector<T, A>& v, int nType, int nVersion, const boost::false_type&); |
|
|
|
|
template<typename Stream, typename T, typename A> inline void Unserialize(Stream& is, std::vector<T, A>& v, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename T, typename A> inline void Unserialize(Stream& is, std::vector<T, A>& v, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
// others derived from vector
|
|
|
|
|
extern inline unsigned int GetSerializeSize(const CScript& v, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream> void Serialize(Stream& os, const CScript& v, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream> void Unserialize(Stream& is, CScript& v, int nType, int nVersion=VERSION); |
|
|
|
|
extern inline unsigned int GetSerializeSize(const CScript& v, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream> void Serialize(Stream& os, const CScript& v, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream> void Unserialize(Stream& is, CScript& v, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
// pair
|
|
|
|
|
template<typename K, typename T> unsigned int GetSerializeSize(const std::pair<K, T>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T> void Serialize(Stream& os, const std::pair<K, T>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T> void Unserialize(Stream& is, std::pair<K, T>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename K, typename T> unsigned int GetSerializeSize(const std::pair<K, T>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T> void Serialize(Stream& os, const std::pair<K, T>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T> void Unserialize(Stream& is, std::pair<K, T>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
// 3 tuple
|
|
|
|
|
template<typename T0, typename T1, typename T2> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2> void Serialize(Stream& os, const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2> void Unserialize(Stream& is, boost::tuple<T0, T1, T2>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename T0, typename T1, typename T2> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2> void Serialize(Stream& os, const boost::tuple<T0, T1, T2>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2> void Unserialize(Stream& is, boost::tuple<T0, T1, T2>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
// 4 tuple
|
|
|
|
|
template<typename T0, typename T1, typename T2, typename T3> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Serialize(Stream& os, const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Unserialize(Stream& is, boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename T0, typename T1, typename T2, typename T3> unsigned int GetSerializeSize(const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Serialize(Stream& os, const boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename T0, typename T1, typename T2, typename T3> void Unserialize(Stream& is, boost::tuple<T0, T1, T2, T3>& item, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
// map
|
|
|
|
|
template<typename K, typename T, typename Pred, typename A> unsigned int GetSerializeSize(const std::map<K, T, Pred, A>& m, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T, typename Pred, typename A> void Serialize(Stream& os, const std::map<K, T, Pred, A>& m, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T, typename Pred, typename A> void Unserialize(Stream& is, std::map<K, T, Pred, A>& m, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename K, typename T, typename Pred, typename A> unsigned int GetSerializeSize(const std::map<K, T, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T, typename Pred, typename A> void Serialize(Stream& os, const std::map<K, T, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename K, typename T, typename Pred, typename A> void Unserialize(Stream& is, std::map<K, T, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
// set
|
|
|
|
|
template<typename K, typename Pred, typename A> unsigned int GetSerializeSize(const std::set<K, Pred, A>& m, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename K, typename Pred, typename A> void Serialize(Stream& os, const std::set<K, Pred, A>& m, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename Stream, typename K, typename Pred, typename A> void Unserialize(Stream& is, std::set<K, Pred, A>& m, int nType, int nVersion=VERSION); |
|
|
|
|
template<typename K, typename Pred, typename A> unsigned int GetSerializeSize(const std::set<K, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename K, typename Pred, typename A> void Serialize(Stream& os, const std::set<K, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
template<typename Stream, typename K, typename Pred, typename A> void Unserialize(Stream& is, std::set<K, Pred, A>& m, int nType, int nVersion=PROTOCOL_VERSION); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -411,19 +409,19 @@ template<typename Stream, typename K, typename Pred, typename A> void Unserializ
@@ -411,19 +409,19 @@ template<typename Stream, typename K, typename Pred, typename A> void Unserializ
|
|
|
|
|
// Thanks to Boost serialization for this idea.
|
|
|
|
|
//
|
|
|
|
|
template<typename T> |
|
|
|
|
inline unsigned int GetSerializeSize(const T& a, long nType, int nVersion=VERSION) |
|
|
|
|
inline unsigned int GetSerializeSize(const T& a, long nType, int nVersion=PROTOCOL_VERSION) |
|
|
|
|
{ |
|
|
|
|
return a.GetSerializeSize((int)nType, nVersion); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename Stream, typename T> |
|
|
|
|
inline void Serialize(Stream& os, const T& a, long nType, int nVersion=VERSION) |
|
|
|
|
inline void Serialize(Stream& os, const T& a, long nType, int nVersion=PROTOCOL_VERSION) |
|
|
|
|
{ |
|
|
|
|
a.Serialize(os, (int)nType, nVersion); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename Stream, typename T> |
|
|
|
|
inline void Unserialize(Stream& is, T& a, long nType, int nVersion=VERSION) |
|
|
|
|
inline void Unserialize(Stream& is, T& a, long nType, int nVersion=PROTOCOL_VERSION) |
|
|
|
|
{ |
|
|
|
|
a.Unserialize(is, (int)nType, nVersion); |
|
|
|
|
} |
|
|
|
@ -857,39 +855,39 @@ public:
@@ -857,39 +855,39 @@ public:
|
|
|
|
|
typedef vector_type::const_iterator const_iterator; |
|
|
|
|
typedef vector_type::reverse_iterator reverse_iterator; |
|
|
|
|
|
|
|
|
|
explicit CDataStream(int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) |
|
|
|
|
explicit CDataStream(int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) |
|
|
|
|
{ |
|
|
|
|
Init(nTypeIn, nVersionIn); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(pbegin, pend) |
|
|
|
|
CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(pbegin, pend) |
|
|
|
|
{ |
|
|
|
|
Init(nTypeIn, nVersionIn); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if !defined(_MSC_VER) || _MSC_VER >= 1300 |
|
|
|
|
CDataStream(const char* pbegin, const char* pend, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(pbegin, pend) |
|
|
|
|
CDataStream(const char* pbegin, const char* pend, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(pbegin, pend) |
|
|
|
|
{ |
|
|
|
|
Init(nTypeIn, nVersionIn); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
CDataStream(const vector_type& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(vchIn.begin(), vchIn.end()) |
|
|
|
|
CDataStream(const vector_type& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(vchIn.begin(), vchIn.end()) |
|
|
|
|
{ |
|
|
|
|
Init(nTypeIn, nVersionIn); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CDataStream(const std::vector<char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch(vchIn.begin(), vchIn.end()) |
|
|
|
|
CDataStream(const std::vector<char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch(vchIn.begin(), vchIn.end()) |
|
|
|
|
{ |
|
|
|
|
Init(nTypeIn, nVersionIn); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CDataStream(const std::vector<unsigned char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) : vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) |
|
|
|
|
CDataStream(const std::vector<unsigned char>& vchIn, int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) : vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) |
|
|
|
|
{ |
|
|
|
|
Init(nTypeIn, nVersionIn); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Init(int nTypeIn=SER_NETWORK, int nVersionIn=VERSION) |
|
|
|
|
void Init(int nTypeIn=SER_NETWORK, int nVersionIn=PROTOCOL_VERSION) |
|
|
|
|
{ |
|
|
|
|
nReadPos = 0; |
|
|
|
|
nType = nTypeIn; |
|
|
|
@ -1103,7 +1101,7 @@ public:
@@ -1103,7 +1101,7 @@ public:
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template<typename Stream> |
|
|
|
|
void Serialize(Stream& s, int nType=0, int nVersion=VERSION) const |
|
|
|
|
void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const |
|
|
|
|
{ |
|
|
|
|
// Special case: stream << stream concatenates like stream += stream
|
|
|
|
|
if (!vch.empty()) |
|
|
|
@ -1212,7 +1210,7 @@ public:
@@ -1212,7 +1210,7 @@ public:
|
|
|
|
|
|
|
|
|
|
typedef FILE element_type; |
|
|
|
|
|
|
|
|
|
CAutoFile(FILE* filenew=NULL, int nTypeIn=SER_DISK, int nVersionIn=VERSION) |
|
|
|
|
CAutoFile(FILE* filenew=NULL, int nTypeIn=SER_DISK, int nVersionIn=PROTOCOL_VERSION) |
|
|
|
|
{ |
|
|
|
|
file = filenew; |
|
|
|
|
nType = nTypeIn; |
|
|
|
|