BSHA3  0.17.99
P2P Blockchain, based on Bitcoin
Classes | Macros | Enumerations | Functions | Variables
serialize.h File Reference
#include <compat/endian.h>
#include <algorithm>
#include <assert.h>
#include <ios>
#include <limits>
#include <map>
#include <memory>
#include <set>
#include <stdint.h>
#include <string>
#include <string.h>
#include <utility>
#include <vector>
#include <prevector.h>
#include <span.h>
Include dependency graph for serialize.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  deserialize_type
 Dummy data type to identify deserializing constructors. More...
 
struct  CheckVarIntMode< Mode, I >
 
class  CVarInt< Mode, I >
 
class  BigEndian< I >
 Serialization wrapper class for big-endian integers. More...
 
class  CCompactSize
 
class  LimitedString< Limit >
 
struct  CSerActionSerialize
 Support for ADD_SERIALIZE_METHODS and READWRITE macro. More...
 
struct  CSerActionUnserialize
 
class  CSizeComputer
 

Macros

#define READWRITE(...)   (::SerReadWriteMany(s, ser_action, __VA_ARGS__))
 
#define READWRITEAS(type, obj)   (::SerReadWriteMany(s, ser_action, ReadWriteAsHelper<type>(obj)))
 
#define ADD_SERIALIZE_METHODS
 Implement three methods for serializable objects. More...
 
#define VARINT(obj, ...)   WrapVarInt<__VA_ARGS__>(REF(obj))
 
#define COMPACTSIZE(obj)   CCompactSize(REF(obj))
 
#define LIMITED_STRING(obj, n)   LimitedString< n >(REF(obj))
 

Enumerations

enum  { SER_NETWORK = (1 << 0), SER_DISK = (1 << 1), SER_GETHASH = (1 << 2) }
 
enum  VarIntMode { VarIntMode::DEFAULT, VarIntMode::NONNEGATIVE_SIGNED }
 Variable-length integers: bytes are a MSB base-128 encoding of the number. More...
 

Functions

template<typename T >
T & REF (const T &val)
 Used to bypass the rule against non-const reference to temporary where it makes sense with wrappers. More...
 
template<typename T >
T * NCONST_PTR (const T *val)
 Used to acquire a non-const pointer "this" to generate bodies of const serialization operations from a template. More...
 
char * CharCast (char *c)
 Safely convert odd char pointer types to standard ones. More...
 
char * CharCast (unsigned char *c)
 
const char * CharCast (const char *c)
 
const char * CharCast (const unsigned char *c)
 
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_writedata16be (Stream &s, uint16_t obj)
 
template<typename Stream >
void ser_writedata32 (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 >
uint16_t ser_readdata16be (Stream &s)
 
template<typename Stream >
uint32_t ser_readdata32 (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)
 
template<typename X >
XReadWriteAsHelper (X &x)
 Convert the reference base type to X, without changing constness or reference type. More...
 
template<typename X >
const XReadWriteAsHelper (const X &x)
 
template<typename Stream >
void Serialize (Stream &s, char a)
 
template<typename Stream >
void Serialize (Stream &s, int8_t a)
 
template<typename Stream >
void Serialize (Stream &s, uint8_t a)
 
template<typename Stream >
void Serialize (Stream &s, int16_t a)
 
template<typename Stream >
void Serialize (Stream &s, uint16_t a)
 
template<typename Stream >
void Serialize (Stream &s, int32_t a)
 
template<typename Stream >
void Serialize (Stream &s, uint32_t a)
 
template<typename Stream >
void Serialize (Stream &s, int64_t a)
 
template<typename Stream >
void Serialize (Stream &s, uint64_t a)
 
template<typename Stream >
void Serialize (Stream &s, float a)
 
template<typename Stream >
void Serialize (Stream &s, double a)
 
template<typename Stream , int N>
void Serialize (Stream &s, const char(&a)[N])
 
template<typename Stream , int N>
void Serialize (Stream &s, const unsigned char(&a)[N])
 
template<typename Stream >
void Serialize (Stream &s, const Span< const unsigned char > &span)
 
template<typename Stream >
void Serialize (Stream &s, const Span< unsigned char > &span)
 
template<typename Stream >
void Unserialize (Stream &s, char &a)
 
template<typename Stream >
void Unserialize (Stream &s, int8_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, uint8_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, int16_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, uint16_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, int32_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, uint32_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, int64_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, uint64_t &a)
 
template<typename Stream >
void Unserialize (Stream &s, float &a)
 
template<typename Stream >
void Unserialize (Stream &s, double &a)
 
template<typename Stream , int N>
void Unserialize (Stream &s, char(&a)[N])
 
template<typename Stream , int N>
void Unserialize (Stream &s, unsigned char(&a)[N])
 
template<typename Stream >
void Unserialize (Stream &s, Span< unsigned char > &span)
 
template<typename Stream >
void Serialize (Stream &s, bool a)
 
template<typename Stream >
void Unserialize (Stream &s, bool &a)
 
unsigned int GetSizeOfCompactSize (uint64_t nSize)
 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) More...
 
void WriteCompactSize (CSizeComputer &os, uint64_t nSize)
 
template<typename Stream >
void WriteCompactSize (Stream &os, uint64_t nSize)
 
template<typename Stream >
uint64_t ReadCompactSize (Stream &is)
 
template<VarIntMode Mode, typename I >
unsigned int GetSizeOfVarInt (I n)
 
template<typename I >
void WriteVarInt (CSizeComputer &os, I n)
 
template<typename Stream , VarIntMode Mode, typename I >
void WriteVarInt (Stream &os, I n)
 
template<typename Stream , VarIntMode Mode, typename I >
ReadVarInt (Stream &is)
 
template<VarIntMode Mode = VarIntMode::DEFAULT, typename I >
CVarInt< Mode, I > WrapVarInt (I &n)
 
template<typename I >
BigEndian< I > WrapBigEndian (I &n)
 
template<typename Stream , typename C >
void Serialize (Stream &os, const std::basic_string< C > &str)
 Forward declarations. More...
 
template<typename Stream , typename C >
void Unserialize (Stream &is, std::basic_string< C > &str)
 
template<typename Stream , unsigned int N, typename T >
void Serialize_impl (Stream &os, const prevector< N, T > &v, const unsigned char &)
 prevector prevectors of unsigned char are a special case and are intended to be serialized as a single opaque blob. More...
 
template<typename Stream , unsigned int N, typename T , typename V >
void Serialize_impl (Stream &os, const prevector< N, T > &v, const V &)
 
template<typename Stream , unsigned int N, typename T >
void Serialize (Stream &os, const prevector< N, T > &v)
 
template<typename Stream , unsigned int N, typename T >
void Unserialize_impl (Stream &is, prevector< N, T > &v, const unsigned char &)
 
template<typename Stream , unsigned int N, typename T , typename V >
void Unserialize_impl (Stream &is, prevector< N, T > &v, const V &)
 
template<typename Stream , unsigned int N, typename T >
void Unserialize (Stream &is, prevector< N, T > &v)
 
template<typename Stream , typename T , typename A >
void Serialize_impl (Stream &os, const std::vector< T, A > &v, const unsigned char &)
 vector vectors of unsigned char are a special case and are intended to be serialized as a single opaque blob. More...
 
template<typename Stream , typename T , typename A , typename V >
void Serialize_impl (Stream &os, const std::vector< T, A > &v, const V &)
 
template<typename Stream , typename T , typename A >
void Serialize (Stream &os, const std::vector< T, A > &v)
 
template<typename Stream , typename T , typename A >
void Unserialize_impl (Stream &is, std::vector< T, A > &v, const unsigned char &)
 
template<typename Stream , typename T , typename A , typename V >
void Unserialize_impl (Stream &is, std::vector< T, A > &v, const V &)
 
template<typename Stream , typename T , typename A >
void Unserialize (Stream &is, std::vector< T, A > &v)
 
template<typename Stream , typename K , typename T >
void Serialize (Stream &os, const std::pair< K, T > &item)
 pair More...
 
template<typename Stream , typename K , typename T >
void Unserialize (Stream &is, std::pair< K, T > &item)
 
template<typename Stream , typename K , typename T , typename Pred , typename A >
void Serialize (Stream &os, const std::map< K, T, Pred, A > &m)
 map More...
 
template<typename Stream , typename K , typename T , typename Pred , typename A >
void Unserialize (Stream &is, std::map< K, T, Pred, A > &m)
 
template<typename Stream , typename K , typename Pred , typename A >
void Serialize (Stream &os, const std::set< K, Pred, A > &m)
 set More...
 
template<typename Stream , typename K , typename Pred , typename A >
void Unserialize (Stream &is, std::set< K, Pred, A > &m)
 
template<typename Stream , typename T >
void Serialize (Stream &os, const std::shared_ptr< const T > &p)
 shared_ptr More...
 
template<typename Stream , typename T >
void Unserialize (Stream &os, std::shared_ptr< const T > &p)
 
template<typename Stream , typename T >
void Serialize (Stream &os, const std::unique_ptr< const T > &p)
 unique_ptr More...
 
template<typename Stream , typename T >
void Unserialize (Stream &os, std::unique_ptr< const T > &p)
 
template<typename Stream , typename T >
void Serialize (Stream &os, const T &a)
 If none of the specialized versions above matched, default to calling member function. More...
 
template<typename Stream , typename T >
void Unserialize (Stream &is, T &&a)
 
template<typename Stream >
void SerializeMany (Stream &s)
 
template<typename Stream , typename Arg , typename... Args>
void SerializeMany (Stream &s, const Arg &arg, const Args &... args)
 
template<typename Stream >
void UnserializeMany (Stream &s)
 
template<typename Stream , typename Arg , typename... Args>
void UnserializeMany (Stream &s, Arg &&arg, Args &&... args)
 
template<typename Stream , typename... Args>
void SerReadWriteMany (Stream &s, CSerActionSerialize ser_action, const Args &... args)
 
template<typename Stream , typename... Args>
void SerReadWriteMany (Stream &s, CSerActionUnserialize ser_action, Args &&... args)
 
template<typename T >
size_t GetSerializeSize (const T &t, int nVersion=0)
 
template<typename... T>
size_t GetSerializeSizeMany (int nVersion, const T &... t)
 

Variables

constexpr deserialize_type deserialize {}
 

Macro Definition Documentation

◆ ADD_SERIALIZE_METHODS

#define ADD_SERIALIZE_METHODS
Value:
template<typename Stream> \
void Serialize(Stream& s) const { \
NCONST_PTR(this)->SerializationOp(s, CSerActionSerialize()); \
} \
template<typename Stream> \
void Unserialize(Stream& s) { \
SerializationOp(s, CSerActionUnserialize()); \
}
void Serialize(Stream &s, char a)
Definition: serialize.h:193
Support for ADD_SERIALIZE_METHODS and READWRITE macro.
Definition: serialize.h:872
void Unserialize(Stream &s, char &a)
Definition: serialize.h:211

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 182 of file serialize.h.

◆ COMPACTSIZE

#define COMPACTSIZE (   obj)    CCompactSize(REF(obj))

Definition at line 412 of file serialize.h.

◆ LIMITED_STRING

#define LIMITED_STRING (   obj,
 
)    LimitedString< n >(REF(obj))

Definition at line 413 of file serialize.h.

◆ READWRITE

#define READWRITE (   ...)    (::SerReadWriteMany(s, ser_action, __VA_ARGS__))

Definition at line 173 of file serialize.h.

◆ READWRITEAS

#define READWRITEAS (   type,
  obj 
)    (::SerReadWriteMany(s, ser_action, ReadWriteAsHelper<type>(obj)))

Definition at line 174 of file serialize.h.

◆ VARINT

#define VARINT (   obj,
  ... 
)    WrapVarInt<__VA_ARGS__>(REF(obj))

Definition at line 411 of file serialize.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SER_NETWORK 
SER_DISK 
SER_GETHASH 

Definition at line 161 of file serialize.h.

◆ VarIntMode

enum VarIntMode
strong

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: [0xFF 0x7F] 255: [0x80 0x7F] 65535: [0x82 0xFE 0x7F] 2^32: [0x8E 0xFE 0xFE 0xFF 0x00] Mode for encoding VarInts.

Currently there is no support for signed encodings. The default mode will not compile with signed values, and the legacy "nonnegative signed" mode will accept signed values, but improperly encode and decode them if they are negative. In the future, the DEFAULT mode could be extended to support negative numbers in a backwards compatible way, and additional modes could be added to support different varint formats (e.g. zigzag encoding).

Enumerator
DEFAULT 
NONNEGATIVE_SIGNED 

Definition at line 343 of file serialize.h.

Function Documentation

◆ CharCast() [1/4]

char* CharCast ( char *  c)
inline

Safely convert odd char pointer types to standard ones.

Definition at line 64 of file serialize.h.

Here is the caller graph for this function:

◆ CharCast() [2/4]

char* CharCast ( unsigned char *  c)
inline

Definition at line 65 of file serialize.h.

◆ CharCast() [3/4]

const char* CharCast ( const char *  c)
inline

Definition at line 66 of file serialize.h.

◆ CharCast() [4/4]

const char* CharCast ( const unsigned char *  c)
inline

Definition at line 67 of file serialize.h.

◆ GetSerializeSize()

template<typename T >
size_t GetSerializeSize ( const T &  t,
int  nVersion = 0 
)

Definition at line 981 of file serialize.h.

Here is the caller graph for this function:

◆ GetSerializeSizeMany()

template<typename... T>
size_t GetSerializeSizeMany ( int  nVersion,
const T &...  t 
)

Definition at line 987 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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 242 of file serialize.h.

Here is the caller graph for this function:

◆ GetSizeOfVarInt()

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

Definition at line 355 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 58 of file serialize.h.

◆ ReadCompactSize()

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

Definition at line 278 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ReadVarInt()

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

Definition at line 390 of file serialize.h.

Here is the call graph for this function:

◆ ReadWriteAsHelper() [1/2]

template<typename X >
X& ReadWriteAsHelper ( X x)

Convert the reference base type to X, without changing constness or reference type.

Definition at line 170 of file serialize.h.

◆ ReadWriteAsHelper() [2/2]

template<typename X >
const X& ReadWriteAsHelper ( const X x)

Definition at line 171 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.

Definition at line 48 of file serialize.h.

Here is the caller graph for this function:

◆ ser_double_to_uint64()

uint64_t ser_double_to_uint64 ( double  x)
inline

Definition at line 127 of file serialize.h.

Here is the caller graph for this function:

◆ ser_float_to_uint32()

uint32_t ser_float_to_uint32 ( float  x)
inline

Definition at line 133 of file serialize.h.

Here is the caller graph for this function:

◆ ser_readdata16()

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

Definition at line 103 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_readdata16be()

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

Definition at line 109 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_readdata32()

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

Definition at line 115 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_readdata64()

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

Definition at line 121 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_readdata8()

template<typename Stream >
uint8_t ser_readdata8 ( Stream &  s)
inline

Definition at line 97 of file serialize.h.

Here is the caller graph for this function:

◆ ser_uint32_to_float()

float ser_uint32_to_float ( uint32_t  y)
inline

Definition at line 145 of file serialize.h.

Here is the caller graph for this function:

◆ ser_uint64_to_double()

double ser_uint64_to_double ( uint64_t  y)
inline

Definition at line 139 of file serialize.h.

Here is the caller graph for this function:

◆ ser_writedata16()

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

Definition at line 77 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_writedata16be()

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

Definition at line 82 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_writedata32()

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

Definition at line 87 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_writedata64()

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

Definition at line 92 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ser_writedata8()

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

Definition at line 73 of file serialize.h.

Here is the caller graph for this function:

◆ Serialize() [1/25]

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

Definition at line 193 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Serialize() [2/25]

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

Definition at line 195 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [3/25]

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

Definition at line 196 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [4/25]

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

Definition at line 197 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [5/25]

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

Definition at line 198 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [6/25]

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

Definition at line 199 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [7/25]

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

Definition at line 200 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [8/25]

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

Definition at line 201 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [9/25]

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

Definition at line 202 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [10/25]

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

Definition at line 203 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [11/25]

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

Definition at line 204 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [12/25]

template<typename Stream , int N>
void Serialize ( Stream &  s,
const char(&)  a[N] 
)
inline

Definition at line 205 of file serialize.h.

◆ Serialize() [13/25]

template<typename Stream , int N>
void Serialize ( Stream &  s,
const unsigned char(&)  a[N] 
)
inline

Definition at line 206 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [14/25]

template<typename Stream >
void Serialize ( Stream &  s,
const Span< const unsigned char > &  span 
)
inline

Definition at line 207 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [15/25]

template<typename Stream >
void Serialize ( Stream &  s,
const Span< unsigned char > &  span 
)
inline

Definition at line 208 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [16/25]

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

Definition at line 227 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [17/25]

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

Forward declarations.

string

Definition at line 608 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [18/25]

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

Definition at line 646 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [19/25]

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

Definition at line 714 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [20/25]

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

pair

Definition at line 766 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [21/25]

template<typename Stream , typename K , typename T , typename Pred , typename A >
void Serialize ( Stream &  os,
const std::map< K, T, Pred, A > &  m 
)

map

Definition at line 785 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [22/25]

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

set

Definition at line 812 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [23/25]

template<typename Stream , typename T >
void Serialize ( Stream &  os,
const std::shared_ptr< const T > &  p 
)

shared_ptr

Definition at line 856 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [24/25]

template<typename Stream , typename T >
void Serialize ( Stream &  os,
const std::unique_ptr< const T > &  p 
)

unique_ptr

Definition at line 839 of file serialize.h.

Here is the call graph for this function:

◆ Serialize() [25/25]

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

If none of the specialized versions above matched, default to calling member function.

Definition at line 589 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,
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 630 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Serialize_impl() [2/4]

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

Definition at line 638 of file serialize.h.

Here is the call graph for this function:

◆ Serialize_impl() [3/4]

template<typename Stream , typename T , typename A >
void Serialize_impl ( Stream &  os,
const std::vector< T, A > &  v,
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 698 of file serialize.h.

Here is the call graph for this function:

◆ Serialize_impl() [4/4]

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

Definition at line 706 of file serialize.h.

Here is the call graph for this function:

◆ SerializeMany() [1/2]

template<typename Stream >
void SerializeMany ( Stream &  s)

Definition at line 934 of file serialize.h.

Here is the caller graph for this function:

◆ SerializeMany() [2/2]

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

Definition at line 939 of file serialize.h.

Here is the call graph for this function:

◆ SerReadWriteMany() [1/2]

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

Definition at line 958 of file serialize.h.

Here is the call graph for this function:

◆ SerReadWriteMany() [2/2]

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

Definition at line 964 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [1/24]

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

Definition at line 211 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Unserialize() [2/24]

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

Definition at line 213 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [3/24]

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

Definition at line 214 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [4/24]

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

Definition at line 215 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [5/24]

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

Definition at line 216 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [6/24]

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

Definition at line 217 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [7/24]

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

Definition at line 218 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [8/24]

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

Definition at line 219 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [9/24]

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

Definition at line 220 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [10/24]

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

Definition at line 221 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [11/24]

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

Definition at line 222 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [12/24]

template<typename Stream , int N>
void Unserialize ( Stream &  s,
char(&)  a[N] 
)
inline

Definition at line 223 of file serialize.h.

◆ Unserialize() [13/24]

template<typename Stream , int N>
void Unserialize ( Stream &  s,
unsigned char(&)  a[N] 
)
inline

Definition at line 224 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [14/24]

template<typename Stream >
void Unserialize ( Stream &  s,
Span< unsigned char > &  span 
)
inline

Definition at line 225 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [15/24]

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

Definition at line 228 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [16/24]

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

Definition at line 616 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [17/24]

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

Definition at line 687 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [18/24]

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

Definition at line 755 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [19/24]

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

Definition at line 773 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [20/24]

template<typename Stream , typename K , typename T , typename Pred , typename A >
void Unserialize ( Stream &  is,
std::map< K, T, Pred, A > &  m 
)

Definition at line 793 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [21/24]

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

Definition at line 820 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize() [22/24]

template<typename Stream , typename T >
void Unserialize ( Stream &  os,
std::shared_ptr< const T > &  p 
)

Definition at line 862 of file serialize.h.

◆ Unserialize() [23/24]

template<typename Stream , typename T >
void Unserialize ( Stream &  os,
std::unique_ptr< const T > &  p 
)

Definition at line 845 of file serialize.h.

◆ Unserialize() [24/24]

template<typename Stream , typename T >
void Unserialize ( Stream &  is,
T &&  a 
)
inline

Definition at line 595 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,
const unsigned char &   
)

Definition at line 653 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Unserialize_impl() [2/4]

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

Definition at line 669 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize_impl() [3/4]

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

Definition at line 721 of file serialize.h.

Here is the call graph for this function:

◆ Unserialize_impl() [4/4]

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

Definition at line 737 of file serialize.h.

Here is the call graph for this function:

◆ UnserializeMany() [1/2]

template<typename Stream >
void UnserializeMany ( Stream &  s)
inline

Definition at line 946 of file serialize.h.

Here is the caller graph for this function:

◆ UnserializeMany() [2/2]

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

Definition at line 951 of file serialize.h.

Here is the call graph for this function:

◆ WrapBigEndian()

template<typename I >
BigEndian<I> WrapBigEndian ( I &  n)

Definition at line 519 of file serialize.h.

Here is the caller graph for this function:

◆ WrapVarInt()

template<VarIntMode Mode = VarIntMode::DEFAULT, typename I >
CVarInt<Mode, I> WrapVarInt ( I &  n)

Definition at line 516 of file serialize.h.

◆ WriteCompactSize() [1/2]

void WriteCompactSize ( CSizeComputer os,
uint64_t  nSize 
)
inline

Definition at line 975 of file serialize.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WriteCompactSize() [2/2]

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

Definition at line 253 of file serialize.h.

Here is the call graph for this function:

◆ WriteVarInt() [1/2]

template<typename I >
void WriteVarInt ( CSizeComputer os,
n 
)
inline

Definition at line 970 of file serialize.h.

Here is the call graph for this function:

◆ WriteVarInt() [2/2]

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

Definition at line 372 of file serialize.h.

Here is the call graph for this function:

Variable Documentation

◆ deserialize

constexpr deserialize_type deserialize {}

Definition at line 41 of file serialize.h.