Dash Core  0.12.2.1
P2P Digital Currency
serialize.h File Reference
#include "compat/endian.h"
#include <algorithm>
#include <assert.h>
#include <ios>
#include <limits>
#include <list>
#include <map>
#include <set>
#include <stdint.h>
#include <string>
#include <string.h>
#include <utility>
#include <vector>
#include "prevector.h"

Go to the source code of this file.

Classes

class  CFlatData
 
class  CVarInt< I >
 
class  LimitedString< Limit >
 
struct  CSerActionSerialize
 
struct  CSerActionUnserialize
 
class  CSizeComputer
 

Macros

#define READWRITE(obj)   (::SerReadWrite(s, (obj), nType, nVersion, ser_action))
 
#define READWRITEMANY(...)   (::SerReadWriteMany(s, nType, nVersion, ser_action, __VA_ARGS__))
 
#define ADD_SERIALIZE_METHODS
 
#define FLATDATA(obj)   REF(CFlatData((char*)&(obj), (char*)&(obj) + sizeof(obj)))
 
#define VARINT(obj)   REF(WrapVarInt(REF(obj)))
 
#define LIMITED_STRING(obj, n)   REF(LimitedString< n >(REF(obj)))
 

Enumerations

enum  { SER_NETWORK = (1 << 0), SER_DISK = (1 << 1), SER_GETHASH = (1 << 2) }
 

Functions

template<typename T >
T & REF (const T &val)
 
template<typename T >
T * NCONST_PTR (const T *val)
 
template<typename V >
V::value_type * begin_ptr (V &v)
 
template<typename V >
const V::value_type * begin_ptr (const V &v)
 
template<typename V >
V::value_type * end_ptr (V &v)
 
template<typename V >
const V::value_type * end_ptr (const V &v)
 
template<typename Stream >
void ser_writedata8 (Stream &s, uint8_t obj)
 
template<typename Stream >
void ser_writedata16 (Stream &s, uint16_t obj)
 
template<typename Stream >
void ser_writedata32 (Stream &s, uint32_t obj)
 
template<typename Stream >
void ser_writedata32be (Stream &s, uint32_t obj)
 
template<typename Stream >
void ser_writedata64 (Stream &s, uint64_t obj)
 
template<typename Stream >
uint8_t ser_readdata8 (Stream &s)
 
template<typename Stream >
uint16_t ser_readdata16 (Stream &s)
 
template<typename Stream >
uint32_t ser_readdata32 (Stream &s)
 
template<typename Stream >
uint32_t ser_readdata32be (Stream &s)
 
template<typename Stream >
uint64_t ser_readdata64 (Stream &s)
 
uint64_t ser_double_to_uint64 (double x)
 
uint32_t ser_float_to_uint32 (float x)
 
double ser_uint64_to_double (uint64_t y)
 
float ser_uint32_to_float (uint32_t y)
 
unsigned int GetSerializeSize (char a, int, int=0)
 
unsigned int GetSerializeSize (int8_t a, int, int=0)
 
unsigned int GetSerializeSize (uint8_t a, int, int=0)
 
unsigned int GetSerializeSize (int16_t a, int, int=0)
 
unsigned int GetSerializeSize (uint16_t a, int, int=0)
 
unsigned int GetSerializeSize (int32_t a, int, int=0)
 
unsigned int GetSerializeSize (uint32_t a, int, int=0)
 
unsigned int GetSerializeSize (int64_t a, int, int=0)
 
unsigned int GetSerializeSize (uint64_t a, int, int=0)
 
unsigned int GetSerializeSize (float a, int, int=0)
 
unsigned int GetSerializeSize (double a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, char a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, int8_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, uint8_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, int16_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, uint16_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, int32_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, uint32_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, int64_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, uint64_t a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, float a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, double a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, char &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, int8_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, uint8_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, int16_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, uint16_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, int32_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, uint32_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, int64_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, uint64_t &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, float &a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, double &a, int, int=0)
 
unsigned int GetSerializeSize (bool a, int, int=0)
 
template<typename Stream >
void Serialize (Stream &s, bool a, int, int=0)
 
template<typename Stream >
void Unserialize (Stream &s, bool &a, int, int=0)
 
unsigned int GetSizeOfCompactSize (uint64_t nSize)
 
template<typename Stream >
void WriteCompactSize (Stream &os, uint64_t nSize)
 
template<typename Stream >
uint64_t ReadCompactSize (Stream &is)
 
template<typename I >
unsigned int GetSizeOfVarInt (I n)
 
template<typename Stream , typename I >
void WriteVarInt (Stream &os, I n)
 
template<typename Stream , typename I >
ReadVarInt (Stream &is)
 
template<typename I >
CVarInt< I > WrapVarInt (I &n)
 
template<typename C >
unsigned int GetSerializeSize (const std::basic_string< C > &str, int, int=0)
 
template<typename Stream , typename C >
void Serialize (Stream &os, const std::basic_string< C > &str, int, int=0)
 
template<typename Stream , typename C >
void Unserialize (Stream &is, std::basic_string< C > &str, int, int=0)
 
template<unsigned int N, typename T >
unsigned int GetSerializeSize_impl (const prevector< N, T > &v, int nType, int nVersion, const unsigned char &)
 
template<unsigned int N, typename T , typename V >
unsigned int GetSerializeSize_impl (const prevector< N, T > &v, int nType, int nVersion, const V &)
 
template<unsigned int N, typename T >
unsigned int GetSerializeSize (const prevector< N, T > &v, int nType, int nVersion)
 
template<typename Stream , unsigned int N, typename T >
void Serialize_impl (Stream &os, const prevector< N, T > &v, int nType, int nVersion, const unsigned char &)
 
template<typename Stream , unsigned int N, typename T , typename V >
void Serialize_impl (Stream &os, const prevector< N, T > &v, int nType, int nVersion, const V &)
 
template<typename Stream , unsigned int N, typename T >
void Serialize (Stream &os, const prevector< N, T > &v, int nType, int nVersion)
 
template<typename Stream , unsigned int N, typename T >
void Unserialize_impl (Stream &is, prevector< N, T > &v, int nType, int nVersion, const unsigned char &)
 
template<typename Stream , unsigned int N, typename T , typename V >
void Unserialize_impl (Stream &is, prevector< N, T > &v, int nType, int nVersion, const V &)
 
template<typename Stream , unsigned int N, typename T >
void Unserialize (Stream &is, prevector< N, T > &v, int nType, int nVersion)
 
template<typename T , typename A >
unsigned int GetSerializeSize_impl (const std::vector< T, A > &v, int nType, int nVersion, const unsigned char &)
 
template<typename T , typename A , typename V >
unsigned int GetSerializeSize_impl (const std::vector< T, A > &v, int nType, int nVersion, const V &)
 
template<typename T , typename A >
unsigned int GetSerializeSize (const std::vector< T, A > &v, int nType, int nVersion)
 
template<typename Stream , typename T , typename A >
void Serialize_impl (Stream &os, const std::vector< T, A > &v, int nType, int nVersion, const unsigned char &)
 
template<typename Stream , typename T , typename A , typename V >
void Serialize_impl (Stream &os, const std::vector< T, A > &v, int nType, int nVersion, const V &)
 
template<typename Stream , typename T , typename A >
void Serialize (Stream &os, const std::vector< T, A > &v, int nType, int nVersion)
 
template<typename Stream , typename T , typename A >
void Unserialize_impl (Stream &is, std::vector< T, A > &v, int nType, int nVersion, const unsigned char &)
 
template<typename Stream , typename T , typename A , typename V >
void Unserialize_impl (Stream &is, std::vector< T, A > &v, int nType, int nVersion, const V &)
 
template<typename Stream , typename T , typename A >
void Unserialize (Stream &is, std::vector< T, A > &v, int nType, int nVersion)
 
template<typename K , typename T >
unsigned int GetSerializeSize (const std::pair< K, T > &item, int nType, int nVersion)
 
template<typename Stream , typename K , typename T >
void Serialize (Stream &os, const std::pair< K, T > &item, int nType, int nVersion)
 
template<typename Stream , typename K , typename T >
void Unserialize (Stream &is, std::pair< K, T > &item, int nType, int nVersion)
 
template<typename K , typename T , typename Pred , typename A >
unsigned int GetSerializeSize (const std::map< K, T, Pred, A > &m, int nType, int nVersion)
 
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)
 
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)
 
template<typename K , typename Pred , typename A >
unsigned int GetSerializeSize (const std::set< K, Pred, A > &m, int nType, int nVersion)
 
template<typename Stream , typename K , typename Pred , typename A >
void Serialize (Stream &os, const std::set< K, Pred, A > &m, int nType, int nVersion)
 
template<typename Stream , typename K , typename Pred , typename A >
void Unserialize (Stream &is, std::set< K, Pred, A > &m, int nType, int nVersion)
 
template<typename T >
unsigned int GetSerializeSize (const T &a, long nType, int nVersion)
 
template<typename Stream , typename T >
void Serialize (Stream &os, const T &a, long nType, int nVersion)
 
template<typename Stream , typename T >
void Unserialize (Stream &is, T &a, long nType, int nVersion)
 
template<typename T , typename A >
unsigned int GetSerializeSize (const std::list< T, A > &l, int nType, int nVersion)
 
template<typename Stream , typename T , typename A >
void Serialize (Stream &os, const std::list< T, A > &l, int nType, int nVersion)
 
template<typename Stream , typename T , typename A >
void Unserialize (Stream &is, std::list< T, A > &l, int nType, int nVersion)
 
template<typename Stream , typename T >
void SerReadWrite (Stream &s, const T &obj, int nType, int nVersion, CSerActionSerialize ser_action)
 
template<typename Stream , typename T >
void SerReadWrite (Stream &s, T &obj, int nType, int nVersion, CSerActionUnserialize ser_action)
 
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)
 
template<typename Stream , typename Arg , typename... Args>
void SerializeMany (Stream &s, int nType, int nVersion, Arg &&arg, Args &&... args)
 
template<typename Stream >
void UnserializeMany (Stream &s, int nType, int nVersion)
 
template<typename Stream , typename Arg >
void UnserializeMany (Stream &s, int nType, int nVersion, Arg &arg)
 
template<typename Stream , typename Arg , typename... Args>
void UnserializeMany (Stream &s, int nType, int nVersion, Arg &arg, Args &... args)
 
template<typename Stream , typename... Args>
void SerReadWriteMany (Stream &s, int nType, int nVersion, CSerActionSerialize ser_action, Args &&... args)
 
template<typename Stream , typename... Args>
void SerReadWriteMany (Stream &s, int nType, int nVersion, CSerActionUnserialize ser_action, Args &... args)
 

Variables

static const unsigned int MAX_SIZE = 0x02000000
 

Macro Definition Documentation

◆ ADD_SERIALIZE_METHODS

#define ADD_SERIALIZE_METHODS
Value:
size_t GetSerializeSize(int nType, int nVersion) const { \
CSizeComputer s(nType, nVersion); \
NCONST_PTR(this)->SerializationOp(s, CSerActionSerialize(), nType, nVersion);\
return s.size(); \
} \
template<typename Stream> \
void Serialize(Stream& s, int nType, int nVersion) const { \
NCONST_PTR(this)->SerializationOp(s, CSerActionSerialize(), nType, nVersion);\
} \
template<typename Stream> \
void Unserialize(Stream& s, int nType, int nVersion) { \
SerializationOp(s, CSerActionUnserialize(), nType, nVersion); \
}
void Serialize(Stream &s, char a, int, int=0)
Definition: serialize.h:214
unsigned int GetSerializeSize(char a, int, int=0)
Definition: serialize.h:202
void Unserialize(Stream &s, char &a, int, int=0)
Definition: serialize.h:226

Implement three methods for serializable objects. These are actually wrappers over "SerializationOp" template, which implements the body of each class' serialization code. Adding "ADD_SERIALIZE_METHODS" in the body of the class causes these wrappers to be added as members.

Definition at line 184 of file serialize.h.

◆ FLATDATA

◆ LIMITED_STRING

◆ READWRITE

#define READWRITE (   obj)    (::SerReadWrite(s, (obj), nType, nVersion, ser_action))

Definition at line 175 of file serialize.h.

Referenced by CSpentIndexKey::SerializationOp(), CHDAccount::SerializationOp(), CDiskBlockPos::SerializationOp(), COutPoint::SerializationOp(), RecentRequestEntry::SerializationOp(), CDarkSendRelay::SerializationOp(), CacheItem< K, V >::SerializationOp(), CNetFulfilledRequestManager::SerializationOp(), CBlockHeader::SerializationOp(), CMessageHeader::SerializationOp(), CMasterKey::SerializationOp(), CBanEntry::SerializationOp(), CMasternodePing::SerializationOp(), CSpentIndexValue::SerializationOp(), CUnsignedAlert::SerializationOp(), CCoin::SerializationOp(), CAddrInfo::SerializationOp(), CFeeRate::SerializationOp(), CHDChain::SerializationOp(), CMasternodePayee::SerializationOp(), CKeyMetadata::SerializationOp(), CTxUndo::SerializationOp(), SendCoinsRecipient::SerializationOp(), CSporkMessage::SerializationOp(), CBloomFilter::SerializationOp(), vote_instance_t::SerializationOp(), CBlockUndo::SerializationOp(), CGovernanceObjectVoteFile::SerializationOp(), CNetAddr::SerializationOp(), CPartialMerkleTree::SerializationOp(), CAlert::SerializationOp(), CMasternodeBlockPayees::SerializationOp(), CMasternodeMan::SerializationOp(), CBlock::SerializationOp(), vote_rec_t::SerializationOp(), CTxIn::SerializationOp(), CTxOutCompressor::SerializationOp(), CSubNet::SerializationOp(), CMasternodePaymentVote::SerializationOp(), CRateCheckBuffer::SerializationOp(), CKeyPool::SerializationOp(), CDarkSendEntry::SerializationOp(), CHDPubKey::SerializationOp(), CBlockLocator::SerializationOp(), CMerkleBlock::SerializationOp(), CTxOut::SerializationOp(), CService::SerializationOp(), CGovernanceManager::last_object_rec::SerializationOp(), CDashNetwork::SerializationOp(), CacheMap< uint256, CGovernanceVote >::SerializationOp(), CTxLockVote::SerializationOp(), CMasternode::SerializationOp(), CDarksendQueue::SerializationOp(), CMasternodePayments::SerializationOp(), CGovernanceVote::SerializationOp(), CacheMultiMap< uint256, vote_time_pair_t >::SerializationOp(), CMerkleTx::SerializationOp(), CTransaction::SerializationOp(), CDarksendBroadcastTx::SerializationOp(), CAddress::SerializationOp(), CDiskBlockIndex::SerializationOp(), CGovernanceObject::SerializationOp(), CMutableTransaction::SerializationOp(), CInv::SerializationOp(), CMasternodeBroadcast::SerializationOp(), CGovernanceManager::SerializationOp(), CWalletTx::SerializationOp(), CMasternodeVerification::SerializationOp(), CAddressUnspentValue::SerializationOp(), CWalletKey::SerializationOp(), CAccountingEntry::SerializationOp(), CDiskTxPos::SerializationOp(), CBlockFileInfo::SerializationOp(), and CAccount::SerializationOp().

◆ READWRITEMANY

#define READWRITEMANY (   ...)    (::SerReadWriteMany(s, nType, nVersion, ser_action, __VA_ARGS__))

Definition at line 176 of file serialize.h.

◆ VARINT

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SER_NETWORK 
SER_DISK 
SER_GETHASH 

Definition at line 167 of file serialize.h.

Function Documentation

◆ begin_ptr() [1/2]

template<typename V >
V::value_type* begin_ptr ( V &  v)
inline

Get begin pointer of vector (non-const version).

Note
These functions avoid the undefined case of indexing into an empty vector, as well as that of indexing after the end of the vector.

Definition at line 54 of file serialize.h.

Referenced by CNode::CalculateKeyedNetGroup(), CFlatData::CFlatData(), ComputeResponse(), EvalScript(), RandAddSeedPerfmon(), ShrinkDebugFile(), and Socks5().

◆ begin_ptr() [2/2]

template<typename V >
const V::value_type* begin_ptr ( const V &  v)
inline

Get begin pointer of vector (const version)

Definition at line 60 of file serialize.h.

◆ end_ptr() [1/2]

template<typename V >
V::value_type* end_ptr ( V &  v)
inline

Get end pointer of vector (non-const version)

Definition at line 66 of file serialize.h.

Referenced by CFlatData::CFlatData().

◆ end_ptr() [2/2]

template<typename V >
const V::value_type* end_ptr ( const V &  v)
inline

Get end pointer of vector (const version)

Definition at line 72 of file serialize.h.

◆ GetSerializeSize() [1/20]

◆ GetSerializeSize() [2/20]

unsigned int GetSerializeSize ( int8_t  a,
int  ,
int  = 0 
)
inline

Definition at line 203 of file serialize.h.

◆ GetSerializeSize() [3/20]

unsigned int GetSerializeSize ( uint8_t  a,
int  ,
int  = 0 
)
inline

Definition at line 204 of file serialize.h.

◆ GetSerializeSize() [4/20]

unsigned int GetSerializeSize ( int16_t  a,
int  ,
int  = 0 
)
inline

Definition at line 205 of file serialize.h.

◆ GetSerializeSize() [5/20]

unsigned int GetSerializeSize ( uint16_t  a,
int  ,
int  = 0 
)
inline

Definition at line 206 of file serialize.h.

◆ GetSerializeSize() [6/20]

unsigned int GetSerializeSize ( int32_t  a,
int  ,
int  = 0 
)
inline

Definition at line 207 of file serialize.h.

◆ GetSerializeSize() [7/20]

unsigned int GetSerializeSize ( uint32_t  a,
int  ,
int  = 0 
)
inline

Definition at line 208 of file serialize.h.

◆ GetSerializeSize() [8/20]

unsigned int GetSerializeSize ( int64_t  a,
int  ,
int  = 0 
)
inline

Definition at line 209 of file serialize.h.

◆ GetSerializeSize() [9/20]

unsigned int GetSerializeSize ( uint64_t  a,
int  ,
int  = 0 
)
inline

Definition at line 210 of file serialize.h.

◆ GetSerializeSize() [10/20]

unsigned int GetSerializeSize ( float  a,
int  ,
int  = 0 
)
inline

Definition at line 211 of file serialize.h.

◆ GetSerializeSize() [11/20]

unsigned int GetSerializeSize ( double  a,
int  ,
int  = 0 
)
inline

Definition at line 212 of file serialize.h.

◆ GetSerializeSize() [12/20]

unsigned int GetSerializeSize ( bool  a,
int  ,
int  = 0 
)
inline

Definition at line 238 of file serialize.h.

◆ GetSerializeSize() [13/20]

template<typename C >
unsigned int GetSerializeSize ( const std::basic_string< C > &  str,
int  ,
int  = 0 
)

Forward declarations string

string

Definition at line 592 of file serialize.h.

◆ GetSerializeSize() [14/20]

template<unsigned int N, typename T >
unsigned int GetSerializeSize ( const prevector< N, T > &  v,
int  nType,
int  nVersion 
)
inline

Definition at line 635 of file serialize.h.

◆ GetSerializeSize() [15/20]

template<typename T , typename A >
unsigned int GetSerializeSize ( const std::vector< T, A > &  v,
int  nType,
int  nVersion 
)
inline

Definition at line 725 of file serialize.h.

◆ GetSerializeSize() [16/20]

template<typename K , typename T >
unsigned int GetSerializeSize ( const std::pair< K, T > &  item,
int  nType,
int  nVersion 
)

pair

Definition at line 800 of file serialize.h.

◆ GetSerializeSize() [17/20]

template<typename K , typename T , typename Pred , typename A >
unsigned int GetSerializeSize ( const std::map< K, T, Pred, A > &  m,
int  nType,
int  nVersion 
)

map

Definition at line 825 of file serialize.h.

◆ GetSerializeSize() [18/20]

template<typename K , typename Pred , typename A >
unsigned int GetSerializeSize ( const std::set< K, Pred, A > &  m,
int  nType,
int  nVersion 
)

set

Definition at line 861 of file serialize.h.

◆ GetSerializeSize() [19/20]

template<typename T >
unsigned int GetSerializeSize ( const T &  a,
long  nType,
int  nVersion 
)
inline

If none of the specialized versions above matched, default to calling member function. "int nType" is changed to "long nType" to keep from getting an ambiguous overload error. The compiler will only cast int to long if none of the other templates matched. Thanks to Boost serialization for this idea.

Definition at line 567 of file serialize.h.

◆ GetSerializeSize() [20/20]

template<typename T , typename A >
unsigned int GetSerializeSize ( const std::list< T, A > &  l,
int  nType,
int  nVersion 
)

list

Definition at line 895 of file serialize.h.

◆ GetSerializeSize_impl() [1/4]

template<unsigned int N, typename T >
unsigned int GetSerializeSize_impl ( const prevector< N, T > &  v,
int  nType,
int  nVersion,
const unsigned char &   
)

prevector prevectors of unsigned char are a special case and are intended to be serialized as a single opaque blob.

prevector

Definition at line 620 of file serialize.h.

Referenced by GetSerializeSize().

◆ GetSerializeSize_impl() [2/4]

template<unsigned int N, typename T , typename V >
unsigned int GetSerializeSize_impl ( const prevector< N, T > &  v,
int  nType,
int  nVersion,
const V &   
)

Definition at line 626 of file serialize.h.

◆ GetSerializeSize_impl() [3/4]

template<typename T , typename A >
unsigned int GetSerializeSize_impl ( const std::vector< T, A > &  v,
int  nType,
int  nVersion,
const unsigned char &   
)

vector vectors of unsigned char are a special case and are intended to be serialized as a single opaque blob.

vector

Definition at line 710 of file serialize.h.

◆ GetSerializeSize_impl() [4/4]

template<typename T , typename A , typename V >
unsigned int GetSerializeSize_impl ( const std::vector< T, A > &  v,
int  nType,
int  nVersion,
const V &   
)

Definition at line 716 of file serialize.h.

◆ GetSizeOfCompactSize()

unsigned int GetSizeOfCompactSize ( uint64_t  nSize)
inline

Compact Size size < 253 – 1 byte size <= USHRT_MAX – 3 bytes (253 + 2 bytes) size <= UINT_MAX – 5 bytes (254 + 4 bytes) size > UINT_MAX – 9 bytes (255 + 8 bytes)

Definition at line 254 of file serialize.h.

Referenced by ConnectBlock(), LimitedString< Limit >::GetSerializeSize(), GetSerializeSize(), and GetSerializeSize_impl().

◆ GetSizeOfVarInt()

template<typename I >
unsigned int GetSizeOfVarInt ( n)
inline

Variable-length integers: bytes are a MSB base-128 encoding of the number. The high bit in each byte signifies whether another digit follows. To make sure the encoding is one-to-one, one is subtracted from all but the last digit. Thus, the byte sequence a[] with length len, where all but the last byte has bit 128 set, encodes the number:

(a[len-1] & 0x7F) + sum(i=1..len-1, 128^i*((a[len-i-1] & 0x7F)+1))

Properties:

  • Very small (0-127: 1 byte, 128-16511: 2 bytes, 16512-2113663: 3 bytes)
  • Every integer has exactly one encoding
  • Encoding does not depend on size of original integer type
  • No redundancy: every (infinite) byte sequence corresponds to a list of encoded integers.

0: [0x00] 256: [0x81 0x00] 1: [0x01] 16383: [0xFE 0x7F] 127: [0x7F] 16384: [0xFF 0x00] 128: [0x80 0x00] 16511: [0x80 0xFF 0x7F] 255: [0x80 0x7F] 65535: [0x82 0xFD 0x7F] 2^32: [0x8E 0xFE 0xFE 0xFF 0x00]

Definition at line 344 of file serialize.h.

◆ NCONST_PTR()

template<typename T >
T* NCONST_PTR ( const T *  val)
inline

Used to acquire a non-const pointer "this" to generate bodies of const serialization operations from a template

Definition at line 43 of file serialize.h.

◆ ReadCompactSize()

template<typename Stream >
uint64_t ReadCompactSize ( Stream &  is)

◆ ReadVarInt()

template<typename Stream , typename I >
I ReadVarInt ( Stream &  is)

Definition at line 374 of file serialize.h.

◆ REF()

template<typename T >
T& REF ( const T &  val)
inline

Used to bypass the rule against non-const reference to temporary where it makes sense with wrappers such as CFlatData or CTxDB

Definition at line 33 of file serialize.h.

Referenced by CTxInUndo::GetSerializeSize(), CCoins::GetSerializeSize(), CTxOutCompressor::SerializationOp(), CTxInUndo::Serialize(), CCoins::Serialize(), CTxInUndo::Unserialize(), CScriptCompressor::Unserialize(), and CCoins::Unserialize().

◆ ser_double_to_uint64()

uint64_t ser_double_to_uint64 ( double  x)
inline

Definition at line 135 of file serialize.h.

Referenced by Serialize().

◆ ser_float_to_uint32()

uint32_t ser_float_to_uint32 ( float  x)
inline

Definition at line 141 of file serialize.h.

Referenced by Serialize().

◆ ser_readdata16()

template<typename Stream >
uint16_t ser_readdata16 ( Stream &  s)
inline

Definition at line 111 of file serialize.h.

Referenced by ReadCompactSize(), and Unserialize().

◆ ser_readdata32()

template<typename Stream >
uint32_t ser_readdata32 ( Stream &  s)
inline

◆ ser_readdata32be()

template<typename Stream >
uint32_t ser_readdata32be ( Stream &  s)
inline

◆ ser_readdata64()

template<typename Stream >
uint64_t ser_readdata64 ( Stream &  s)
inline

Definition at line 129 of file serialize.h.

Referenced by ReadCompactSize(), and Unserialize().

◆ ser_readdata8()

◆ ser_uint32_to_float()

float ser_uint32_to_float ( uint32_t  y)
inline

Definition at line 153 of file serialize.h.

Referenced by Unserialize().

◆ ser_uint64_to_double()

double ser_uint64_to_double ( uint64_t  y)
inline

Definition at line 147 of file serialize.h.

Referenced by Unserialize().

◆ ser_writedata16()

template<typename Stream >
void ser_writedata16 ( Stream &  s,
uint16_t  obj 
)
inline

Definition at line 85 of file serialize.h.

Referenced by Serialize(), and WriteCompactSize().

◆ ser_writedata32()

template<typename Stream >
void ser_writedata32 ( Stream &  s,
uint32_t  obj 
)
inline

◆ ser_writedata32be()

template<typename Stream >
void ser_writedata32be ( Stream &  s,
uint32_t  obj 
)
inline

◆ ser_writedata64()

template<typename Stream >
void ser_writedata64 ( Stream &  s,
uint64_t  obj 
)
inline

Definition at line 100 of file serialize.h.

Referenced by Serialize(), and WriteCompactSize().

◆ ser_writedata8()

template<typename Stream >
void ser_writedata8 ( Stream &  s,
uint8_t  obj 
)
inline

◆ Serialize() [1/20]

template<typename Stream >
void Serialize ( Stream &  s,
char  a,
int  ,
int  = 0 
)
inline

◆ Serialize() [2/20]

template<typename Stream >
void Serialize ( Stream &  s,
int8_t  a,
int  ,
int  = 0 
)
inline

Definition at line 215 of file serialize.h.

◆ Serialize() [3/20]

template<typename Stream >
void Serialize ( Stream &  s,
uint8_t  a,
int  ,
int  = 0 
)
inline

Definition at line 216 of file serialize.h.

◆ Serialize() [4/20]

template<typename Stream >
void Serialize ( Stream &  s,
int16_t  a,
int  ,
int  = 0 
)
inline

Definition at line 217 of file serialize.h.

◆ Serialize() [5/20]

template<typename Stream >
void Serialize ( Stream &  s,
uint16_t  a,
int  ,
int  = 0 
)
inline

Definition at line 218 of file serialize.h.

◆ Serialize() [6/20]

template<typename Stream >
void Serialize ( Stream &  s,
int32_t  a,
int  ,
int  = 0 
)
inline

Definition at line 219 of file serialize.h.

◆ Serialize() [7/20]

template<typename Stream >
void Serialize ( Stream &  s,
uint32_t  a,
int  ,
int  = 0 
)
inline

Definition at line 220 of file serialize.h.

◆ Serialize() [8/20]

template<typename Stream >
void Serialize ( Stream &  s,
int64_t  a,
int  ,
int  = 0 
)
inline

Definition at line 221 of file serialize.h.

◆ Serialize() [9/20]

template<typename Stream >
void Serialize ( Stream &  s,
uint64_t  a,
int  ,
int  = 0 
)
inline

Definition at line 222 of file serialize.h.

◆ Serialize() [10/20]

template<typename Stream >
void Serialize ( Stream &  s,
float  a,
int  ,
int  = 0 
)
inline

Definition at line 223 of file serialize.h.

◆ Serialize() [11/20]

template<typename Stream >
void Serialize ( Stream &  s,
double  a,
int  ,
int  = 0 
)
inline

Definition at line 224 of file serialize.h.

◆ Serialize() [12/20]

template<typename Stream >
void Serialize ( Stream &  s,
bool  a,
int  ,
int  = 0 
)
inline

Definition at line 239 of file serialize.h.

◆ Serialize() [13/20]

template<typename Stream , typename C >
void Serialize ( Stream &  os,
const std::basic_string< C > &  str,
int  ,
int  = 0 
)

Definition at line 598 of file serialize.h.

◆ Serialize() [14/20]

template<typename Stream , unsigned int N, typename T >
void Serialize ( Stream &  os,
const prevector< N, T > &  v,
int  nType,
int  nVersion 
)
inline

Definition at line 658 of file serialize.h.

◆ Serialize() [15/20]

template<typename Stream , typename T , typename A >
void Serialize ( Stream &  os,
const std::vector< T, A > &  v,
int  nType,
int  nVersion 
)
inline

Definition at line 748 of file serialize.h.

◆ Serialize() [16/20]

template<typename Stream , typename K , typename T >
void Serialize ( Stream &  os,
const std::pair< K, T > &  item,
int  nType,
int  nVersion 
)

Definition at line 806 of file serialize.h.

◆ Serialize() [17/20]

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 
)

Definition at line 834 of file serialize.h.

◆ Serialize() [18/20]

template<typename Stream , typename K , typename Pred , typename A >
void Serialize ( Stream &  os,
const std::set< K, Pred, A > &  m,
int  nType,
int  nVersion 
)

Definition at line 870 of file serialize.h.

◆ Serialize() [19/20]

template<typename Stream , typename T >
void Serialize ( Stream &  os,
const T &  a,
long  nType,
int  nVersion 
)
inline

Definition at line 573 of file serialize.h.

◆ Serialize() [20/20]

template<typename Stream , typename T , typename A >
void Serialize ( Stream &  os,
const std::list< T, A > &  l,
int  nType,
int  nVersion 
)

Definition at line 904 of file serialize.h.

◆ Serialize_impl() [1/4]

template<typename Stream , unsigned int N, typename T >
void Serialize_impl ( Stream &  os,
const prevector< N, T > &  v,
int  nType,
int  nVersion,
const unsigned char &   
)

Definition at line 642 of file serialize.h.

Referenced by Serialize().

◆ Serialize_impl() [2/4]

template<typename Stream , unsigned int N, typename T , typename V >
void Serialize_impl ( Stream &  os,
const prevector< N, T > &  v,
int  nType,
int  nVersion,
const V &   
)

Definition at line 650 of file serialize.h.

◆ Serialize_impl() [3/4]

template<typename Stream , typename T , typename A >
void Serialize_impl ( Stream &  os,
const std::vector< T, A > &  v,
int  nType,
int  nVersion,
const unsigned char &   
)

Definition at line 732 of file serialize.h.

◆ Serialize_impl() [4/4]

template<typename Stream , typename T , typename A , typename V >
void Serialize_impl ( Stream &  os,
const std::vector< T, A > &  v,
int  nType,
int  nVersion,
const V &   
)

Definition at line 740 of file serialize.h.

◆ SerializeMany() [1/3]

template<typename Stream >
void SerializeMany ( Stream &  s,
int  nType,
int  nVersion 
)

◆ SerializeMany() [2/3]

template<typename Stream , typename Arg >
void SerializeMany ( Stream &  s,
int  nType,
int  nVersion,
Arg &&  arg 
)

Definition at line 993 of file serialize.h.

◆ SerializeMany() [3/3]

template<typename Stream , typename Arg , typename... Args>
void SerializeMany ( Stream &  s,
int  nType,
int  nVersion,
Arg &&  arg,
Args &&...  args 
)

Definition at line 999 of file serialize.h.

◆ SerReadWrite() [1/2]

template<typename Stream , typename T >
void SerReadWrite ( Stream &  s,
const T &  obj,
int  nType,
int  nVersion,
CSerActionSerialize  ser_action 
)
inline

Definition at line 939 of file serialize.h.

◆ SerReadWrite() [2/2]

template<typename Stream , typename T >
void SerReadWrite ( Stream &  s,
T &  obj,
int  nType,
int  nVersion,
CSerActionUnserialize  ser_action 
)
inline

Definition at line 945 of file serialize.h.

◆ SerReadWriteMany() [1/2]

template<typename Stream , typename... Args>
void SerReadWriteMany ( Stream &  s,
int  nType,
int  nVersion,
CSerActionSerialize  ser_action,
Args &&...  args 
)
inline

Definition at line 1024 of file serialize.h.

◆ SerReadWriteMany() [2/2]

template<typename Stream , typename... Args>
void SerReadWriteMany ( Stream &  s,
int  nType,
int  nVersion,
CSerActionUnserialize  ser_action,
Args &...  args 
)
inline

Definition at line 1030 of file serialize.h.

◆ Unserialize() [1/20]

template<typename Stream >
void Unserialize ( Stream &  s,
char &  a,
int  ,
int  = 0 
)
inline

◆ Unserialize() [2/20]

template<typename Stream >
void Unserialize ( Stream &  s,
int8_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 227 of file serialize.h.

◆ Unserialize() [3/20]

template<typename Stream >
void Unserialize ( Stream &  s,
uint8_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 228 of file serialize.h.

◆ Unserialize() [4/20]

template<typename Stream >
void Unserialize ( Stream &  s,
int16_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 229 of file serialize.h.

◆ Unserialize() [5/20]

template<typename Stream >
void Unserialize ( Stream &  s,
uint16_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 230 of file serialize.h.

◆ Unserialize() [6/20]

template<typename Stream >
void Unserialize ( Stream &  s,
int32_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 231 of file serialize.h.

◆ Unserialize() [7/20]

template<typename Stream >
void Unserialize ( Stream &  s,
uint32_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 232 of file serialize.h.

◆ Unserialize() [8/20]

template<typename Stream >
void Unserialize ( Stream &  s,
int64_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 233 of file serialize.h.

◆ Unserialize() [9/20]

template<typename Stream >
void Unserialize ( Stream &  s,
uint64_t &  a,
int  ,
int  = 0 
)
inline

Definition at line 234 of file serialize.h.

◆ Unserialize() [10/20]

template<typename Stream >
void Unserialize ( Stream &  s,
float &  a,
int  ,
int  = 0 
)
inline

Definition at line 235 of file serialize.h.

◆ Unserialize() [11/20]

template<typename Stream >
void Unserialize ( Stream &  s,
double &  a,
int  ,
int  = 0 
)
inline

Definition at line 236 of file serialize.h.

◆ Unserialize() [12/20]

template<typename Stream >
void Unserialize ( Stream &  s,
bool &  a,
int  ,
int  = 0 
)
inline

Definition at line 240 of file serialize.h.

◆ Unserialize() [13/20]

template<typename Stream , typename C >
void Unserialize ( Stream &  is,
std::basic_string< C > &  str,
int  ,
int  = 0 
)

Definition at line 606 of file serialize.h.

◆ Unserialize() [14/20]

template<typename Stream , unsigned int N, typename T >
void Unserialize ( Stream &  is,
prevector< N, T > &  v,
int  nType,
int  nVersion 
)
inline

Definition at line 699 of file serialize.h.

◆ Unserialize() [15/20]

template<typename Stream , typename T , typename A >
void Unserialize ( Stream &  is,
std::vector< T, A > &  v,
int  nType,
int  nVersion 
)
inline

Definition at line 789 of file serialize.h.

◆ Unserialize() [16/20]

template<typename Stream , typename K , typename T >
void Unserialize ( Stream &  is,
std::pair< K, T > &  item,
int  nType,
int  nVersion 
)

Definition at line 813 of file serialize.h.

◆ Unserialize() [17/20]

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 
)

Definition at line 842 of file serialize.h.

◆ Unserialize() [18/20]

template<typename Stream , typename K , typename Pred , typename A >
void Unserialize ( Stream &  is,
std::set< K, Pred, A > &  m,
int  nType,
int  nVersion 
)

Definition at line 878 of file serialize.h.

◆ Unserialize() [19/20]

template<typename Stream , typename T >
void Unserialize ( Stream &  is,
T &  a,
long  nType,
int  nVersion 
)
inline

Definition at line 579 of file serialize.h.

◆ Unserialize() [20/20]

template<typename Stream , typename T , typename A >
void Unserialize ( Stream &  is,
std::list< T, A > &  l,
int  nType,
int  nVersion 
)

Definition at line 912 of file serialize.h.

◆ Unserialize_impl() [1/4]

template<typename Stream , unsigned int N, typename T >
void Unserialize_impl ( Stream &  is,
prevector< N, T > &  v,
int  nType,
int  nVersion,
const unsigned char &   
)

Definition at line 665 of file serialize.h.

Referenced by Unserialize().

◆ Unserialize_impl() [2/4]

template<typename Stream , unsigned int N, typename T , typename V >
void Unserialize_impl ( Stream &  is,
prevector< N, T > &  v,
int  nType,
int  nVersion,
const V &   
)

Definition at line 681 of file serialize.h.

◆ Unserialize_impl() [3/4]

template<typename Stream , typename T , typename A >
void Unserialize_impl ( Stream &  is,
std::vector< T, A > &  v,
int  nType,
int  nVersion,
const unsigned char &   
)

Definition at line 755 of file serialize.h.

◆ Unserialize_impl() [4/4]

template<typename Stream , typename T , typename A , typename V >
void Unserialize_impl ( Stream &  is,
std::vector< T, A > &  v,
int  nType,
int  nVersion,
const V &   
)

Definition at line 771 of file serialize.h.

◆ UnserializeMany() [1/3]

template<typename Stream >
void UnserializeMany ( Stream &  s,
int  nType,
int  nVersion 
)
inline

Definition at line 1006 of file serialize.h.

Referenced by SerReadWriteMany(), and UnserializeMany().

◆ UnserializeMany() [2/3]

template<typename Stream , typename Arg >
void UnserializeMany ( Stream &  s,
int  nType,
int  nVersion,
Arg &  arg 
)
inline

Definition at line 1011 of file serialize.h.

◆ UnserializeMany() [3/3]

template<typename Stream , typename Arg , typename... Args>
void UnserializeMany ( Stream &  s,
int  nType,
int  nVersion,
Arg &  arg,
Args &...  args 
)
inline

Definition at line 1017 of file serialize.h.

◆ WrapVarInt()

template<typename I >
CVarInt<I> WrapVarInt ( I &  n)

Definition at line 494 of file serialize.h.

◆ WriteCompactSize()

template<typename Stream >
void WriteCompactSize ( Stream &  os,
uint64_t  nSize 
)

◆ WriteVarInt()

template<typename Stream , typename I >
void WriteVarInt ( Stream &  os,
n 
)

Definition at line 357 of file serialize.h.

Variable Documentation

◆ MAX_SIZE

const unsigned int MAX_SIZE = 0x02000000
static