Raven Core
3.0.0
P2P Digital Currency
|
#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"
Go to the source code of this file.
Classes | |
struct | deserialize_type |
Dummy data type to identify deserializing constructors. More... | |
class | CFlatData |
Wrapper for serializing arrays and POD. More... | |
class | CVarInt< I > |
class | CCompactSize |
class | LimitedString< Limit > |
struct | CSerActionSerialize |
Support for ADD_SERIALIZE_METHODS and READWRITE macro. More... | |
struct | CSerActionUnserialize |
class | CSizeComputer |
Macros | |
#define | READWRITE(obj) (::SerReadWrite(s, (obj), ser_action)) |
#define | READWRITEMANY(...) (::SerReadWriteMany(s, ser_action, __VA_ARGS__)) |
#define | ADD_SERIALIZE_METHODS |
Implement three methods for serializable objects. More... | |
#define | FLATDATA(obj) REF(CFlatData((char*)&(obj), (char*)&(obj) + sizeof(obj))) |
#define | VARINT(obj) REF(WrapVarInt(REF(obj))) |
#define | COMPACTSIZE(obj) REF(CCompactSize(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) |
Used to bypass the rule against non-const reference to temporary where it makes sense with wrappers such as CFlatData or CTxDB. 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... | |
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) |
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 > | |
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 > | |
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<typename I > | |
unsigned int | GetSizeOfVarInt (I n) |
Variable-length integers: bytes are a MSB base-128 encoding of the number. More... | |
template<typename I > | |
void | WriteVarInt (CSizeComputer &os, I n) |
template<typename Stream , typename I > | |
void | WriteVarInt (Stream &os, I n) |
template<typename Stream , typename I > | |
I | ReadVarInt (Stream &is) |
template<typename I > | |
CVarInt< I > | WrapVarInt (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 , typename T > | |
void | SerReadWrite (Stream &s, const T &obj, CSerActionSerialize ser_action) |
template<typename Stream , typename T > | |
void | SerReadWrite (Stream &s, T &obj, CSerActionUnserialize ser_action) |
template<typename Stream > | |
void | SerializeMany (Stream &s) |
template<typename Stream , typename Arg > | |
void | SerializeMany (Stream &s, Arg &&arg) |
template<typename Stream , typename Arg , typename... Args> | |
void | SerializeMany (Stream &s, Arg &&arg, Args &&... args) |
template<typename Stream > | |
void | UnserializeMany (Stream &s) |
template<typename Stream , typename Arg > | |
void | UnserializeMany (Stream &s, Arg &arg) |
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, 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 nType, int nVersion=0) |
template<typename S , typename T > | |
size_t | GetSerializeSize (const S &s, const T &t) |
Variables | |
constexpr deserialize_type | deserialize {} |
#define ADD_SERIALIZE_METHODS |
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 172 of file serialize.h.
#define COMPACTSIZE | ( | obj | ) | REF(CCompactSize(REF(obj))) |
Definition at line 368 of file serialize.h.
Definition at line 366 of file serialize.h.
#define LIMITED_STRING | ( | obj, | |
n | |||
) | REF(LimitedString< n >(REF(obj))) |
Definition at line 369 of file serialize.h.
#define READWRITE | ( | obj | ) | (::SerReadWrite(s, (obj), ser_action)) |
Definition at line 163 of file serialize.h.
#define READWRITEMANY | ( | ... | ) | (::SerReadWriteMany(s, ser_action, __VA_ARGS__)) |
Definition at line 164 of file serialize.h.
#define VARINT | ( | obj | ) | REF(WrapVarInt(REF(obj))) |
Definition at line 367 of file serialize.h.
anonymous enum |
Enumerator | |
---|---|
SER_NETWORK | |
SER_DISK | |
SER_GETHASH |
Definition at line 155 of file serialize.h.
size_t GetSerializeSize | ( | const T & | t, |
int | nType, | ||
int | nVersion = 0 |
||
) |
size_t GetSerializeSize | ( | const S & | s, |
const T & | t | ||
) |
Definition at line 973 of file serialize.h.
|
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 221 of file serialize.h.
|
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:
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]
Definition at line 313 of file serialize.h.
|
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.
uint64_t ReadCompactSize | ( | Stream & | is | ) |
Definition at line 257 of file serialize.h.
I ReadVarInt | ( | Stream & | is | ) |
|
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 48 of file serialize.h.
|
inline |
|
inline |
|
inline |
Definition at line 97 of file serialize.h.
|
inline |
Definition at line 103 of file serialize.h.
|
inline |
Definition at line 109 of file serialize.h.
|
inline |
Definition at line 115 of file serialize.h.
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 71 of file serialize.h.
|
inline |
Definition at line 76 of file serialize.h.
|
inline |
Definition at line 81 of file serialize.h.
|
inline |
Definition at line 86 of file serialize.h.
|
inline |
|
inline |
Definition at line 182 of file serialize.h.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void Serialize | ( | Stream & | os, |
const std::basic_string< C > & | str | ||
) |
Forward declarations.
string
Definition at line 567 of file serialize.h.
|
inline |
|
inline |
void Serialize | ( | Stream & | os, |
const std::pair< K, T > & | item | ||
) |
void Serialize | ( | Stream & | os, |
const std::map< K, T, Pred, A > & | m | ||
) |
void Serialize | ( | Stream & | os, |
const std::set< K, Pred, A > & | m | ||
) |
void Serialize | ( | Stream & | os, |
const std::shared_ptr< const T > & | p | ||
) |
void Serialize | ( | Stream & | os, |
const std::unique_ptr< const T > & | p | ||
) |
|
inline |
If none of the specialized versions above matched, default to calling member function.
Definition at line 548 of file serialize.h.
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 589 of file serialize.h.
void Serialize_impl | ( | Stream & | os, |
const prevector< N, T > & | v, | ||
const V & | |||
) |
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 657 of file serialize.h.
void Serialize_impl | ( | Stream & | os, |
const std::vector< T, A > & | v, | ||
const V & | |||
) |
void SerializeMany | ( | Stream & | s | ) |
void SerializeMany | ( | Stream & | s, |
Arg && | arg | ||
) |
void SerializeMany | ( | Stream & | s, |
Arg && | arg, | ||
Args &&... | args | ||
) |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 194 of file serialize.h.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void Unserialize | ( | Stream & | is, |
std::basic_string< C > & | str | ||
) |
|
inline |
|
inline |
void Unserialize | ( | Stream & | is, |
std::pair< K, T > & | item | ||
) |
void Unserialize | ( | Stream & | is, |
std::map< K, T, Pred, A > & | m | ||
) |
void Unserialize | ( | Stream & | is, |
std::set< K, Pred, A > & | m | ||
) |
void Unserialize | ( | Stream & | os, |
std::shared_ptr< const T > & | p | ||
) |
Definition at line 821 of file serialize.h.
void Unserialize | ( | Stream & | os, |
std::unique_ptr< const T > & | p | ||
) |
Definition at line 804 of file serialize.h.
|
inline |
Definition at line 554 of file serialize.h.
void Unserialize_impl | ( | Stream & | is, |
prevector< N, T > & | v, | ||
const unsigned char & | |||
) |
Definition at line 612 of file serialize.h.
void Unserialize_impl | ( | Stream & | is, |
prevector< N, T > & | v, | ||
const V & | |||
) |
void Unserialize_impl | ( | Stream & | is, |
std::vector< T, A > & | v, | ||
const unsigned char & | |||
) |
void Unserialize_impl | ( | Stream & | is, |
std::vector< T, A > & | v, | ||
const V & | |||
) |
|
inline |
|
inline |
|
inline |
CVarInt<I> WrapVarInt | ( | I & | n | ) |
|
inline |
Definition at line 961 of file serialize.h.
void WriteCompactSize | ( | Stream & | os, |
uint64_t | nSize | ||
) |
|
inline |
Definition at line 956 of file serialize.h.
void WriteVarInt | ( | Stream & | os, |
I | n | ||
) |
constexpr deserialize_type deserialize {} |
Definition at line 41 of file serialize.h.