@ -169,11 +169,6 @@ enum
* added as members .
* added as members .
*/
*/
# define ADD_SERIALIZE_METHODS \
# define ADD_SERIALIZE_METHODS \
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 > \
template < typename Stream > \
void Serialize ( Stream & s , int nType , int nVersion ) const { \
void Serialize ( Stream & s , int nType , int nVersion ) const { \
NCONST_PTR ( this ) - > SerializationOp ( s , CSerActionSerialize ( ) , nType , nVersion ) ; \
NCONST_PTR ( this ) - > SerializationOp ( s , CSerActionSerialize ( ) , nType , nVersion ) ; \
@ -186,18 +181,6 @@ enum
/*
/*
* Basic Types
* Basic Types
*/
*/
inline unsigned int GetSerializeSize ( char a , int , int = 0 ) { return 1 ; }
inline unsigned int GetSerializeSize ( int8_t a , int , int = 0 ) { return 1 ; }
inline unsigned int GetSerializeSize ( uint8_t a , int , int = 0 ) { return 1 ; }
inline unsigned int GetSerializeSize ( int16_t a , int , int = 0 ) { return 2 ; }
inline unsigned int GetSerializeSize ( uint16_t a , int , int = 0 ) { return 2 ; }
inline unsigned int GetSerializeSize ( int32_t a , int , int = 0 ) { return 4 ; }
inline unsigned int GetSerializeSize ( uint32_t a , int , int = 0 ) { return 4 ; }
inline unsigned int GetSerializeSize ( int64_t a , int , int = 0 ) { return 8 ; }
inline unsigned int GetSerializeSize ( uint64_t a , int , int = 0 ) { return 8 ; }
inline unsigned int GetSerializeSize ( float a , int , int = 0 ) { return 4 ; }
inline unsigned int GetSerializeSize ( double a , int , int = 0 ) { return 8 ; }
template < typename Stream > inline void Serialize ( Stream & s , char a , int , int = 0 ) { ser_writedata8 ( s , a ) ; } // TODO Get rid of bare char
template < typename Stream > inline void Serialize ( Stream & s , char a , int , int = 0 ) { ser_writedata8 ( s , a ) ; } // TODO Get rid of bare char
template < typename Stream > inline void Serialize ( Stream & s , int8_t a , int , int = 0 ) { ser_writedata8 ( s , a ) ; }
template < typename Stream > inline void Serialize ( Stream & s , int8_t a , int , int = 0 ) { ser_writedata8 ( s , a ) ; }
template < typename Stream > inline void Serialize ( Stream & s , uint8_t a , int , int = 0 ) { ser_writedata8 ( s , a ) ; }
template < typename Stream > inline void Serialize ( Stream & s , uint8_t a , int , int = 0 ) { ser_writedata8 ( s , a ) ; }
@ -222,7 +205,6 @@ template<typename Stream> inline void Unserialize(Stream& s, uint64_t& a, int,
template < typename Stream > inline void Unserialize ( Stream & s , float & a , int , int = 0 ) { a = ser_uint32_to_float ( ser_readdata32 ( s ) ) ; }
template < typename Stream > inline void Unserialize ( Stream & s , float & a , int , int = 0 ) { a = ser_uint32_to_float ( ser_readdata32 ( s ) ) ; }
template < typename Stream > inline void Unserialize ( Stream & s , double & a , int , int = 0 ) { a = ser_uint64_to_double ( ser_readdata64 ( s ) ) ; }
template < typename Stream > inline void Unserialize ( Stream & s , double & a , int , int = 0 ) { a = ser_uint64_to_double ( ser_readdata64 ( s ) ) ; }
inline unsigned int GetSerializeSize ( bool a , int , int = 0 ) { return sizeof ( char ) ; }
template < typename Stream > inline void Serialize ( Stream & s , bool a , int , int = 0 ) { char f = a ; ser_writedata8 ( s , f ) ; }
template < typename Stream > inline void Serialize ( Stream & s , bool a , int , int = 0 ) { char f = a ; ser_writedata8 ( s , f ) ; }
template < typename Stream > inline void Unserialize ( Stream & s , bool & a , int , int = 0 ) { char f = ser_readdata8 ( s ) ; a = f ; }
template < typename Stream > inline void Unserialize ( Stream & s , bool & a , int , int = 0 ) { char f = ser_readdata8 ( s ) ; a = f ; }
@ -403,11 +385,6 @@ public:
char * end ( ) { return pend ; }
char * end ( ) { return pend ; }
const char * end ( ) const { return pend ; }
const char * end ( ) const { return pend ; }
unsigned int GetSerializeSize ( int , int = 0 ) const
{
return pend - pbegin ;
}
template < typename Stream >
template < typename Stream >
void Serialize ( Stream & s , int , int = 0 ) const
void Serialize ( Stream & s , int , int = 0 ) const
{
{
@ -429,10 +406,6 @@ protected:
public :
public :
CVarInt ( I & nIn ) : n ( nIn ) { }
CVarInt ( I & nIn ) : n ( nIn ) { }
unsigned int GetSerializeSize ( int , int ) const {
return GetSizeOfVarInt < I > ( n ) ;
}
template < typename Stream >
template < typename Stream >
void Serialize ( Stream & s , int , int ) const {
void Serialize ( Stream & s , int , int ) const {
WriteVarInt < Stream , I > ( s , n ) ;
WriteVarInt < Stream , I > ( s , n ) ;
@ -451,10 +424,6 @@ protected:
public :
public :
CCompactSize ( uint64_t & nIn ) : n ( nIn ) { }
CCompactSize ( uint64_t & nIn ) : n ( nIn ) { }
unsigned int GetSerializeSize ( int , int ) const {
return GetSizeOfCompactSize ( n ) ;
}
template < typename Stream >
template < typename Stream >
void Serialize ( Stream & s , int , int ) const {
void Serialize ( Stream & s , int , int ) const {
WriteCompactSize < Stream > ( s , n ) ;
WriteCompactSize < Stream > ( s , n ) ;
@ -493,11 +462,6 @@ public:
if ( ! string . empty ( ) )
if ( ! string . empty ( ) )
s . write ( ( char * ) & string [ 0 ] , string . size ( ) ) ;
s . write ( ( char * ) & string [ 0 ] , string . size ( ) ) ;
}
}
unsigned int GetSerializeSize ( int , int = 0 ) const
{
return GetSizeOfCompactSize ( string . size ( ) ) + string . size ( ) ;
}
} ;
} ;
template < typename I >
template < typename I >
@ -510,7 +474,6 @@ CVarInt<I> WrapVarInt(I& n) { return CVarInt<I>(n); }
/**
/**
* string
* string
*/
*/
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 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 < typename Stream , typename C > void Unserialize ( Stream & is , std : : basic_string < C > & str , int , int = 0 ) ;
@ -518,9 +481,6 @@ template<typename Stream, typename C> void Unserialize(Stream& is, std::basic_st
* prevector
* prevector
* prevectors of unsigned char are a special case and are intended to be serialized as a single opaque blob .
* prevectors of unsigned char are a special case and are intended to be serialized as a single opaque blob .
*/
*/
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 > inline 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 > 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 , 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 > inline void Serialize ( Stream & os , const prevector < N , T > & v , int nType , int nVersion ) ;
template < typename Stream , unsigned int N , typename T > inline void Serialize ( Stream & os , const prevector < N , T > & v , int nType , int nVersion ) ;
@ -532,9 +492,6 @@ template<typename Stream, unsigned int N, typename T> inline void Unserialize(St
* vector
* vector
* vectors of unsigned char are a special case and are intended to be serialized as a single opaque blob .
* vectors of unsigned char are a special case and are intended to be serialized as a single opaque blob .
*/
*/
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 > inline 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 > 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 , 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 > inline void Serialize ( Stream & os , const std : : vector < T , A > & v , int nType , int nVersion ) ;
template < typename Stream , typename T , typename A > inline void Serialize ( Stream & os , const std : : vector < T , A > & v , int nType , int nVersion ) ;
@ -545,21 +502,18 @@ template<typename Stream, typename T, typename A> inline void Unserialize(Stream
/**
/**
* pair
* pair
*/
*/
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 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 Stream , typename K , typename T > void Unserialize ( Stream & is , std : : pair < K , T > & item , int nType , int nVersion ) ;
/**
/**
* map
* 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 ) ;
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 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 Stream , typename K , typename T , typename Pred , typename A > void Unserialize ( Stream & is , std : : map < K , T , Pred , A > & m , int nType , int nVersion ) ;
/**
/**
* set
* set
*/
*/
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 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 Stream , typename K , typename Pred , typename A > void Unserialize ( Stream & is , std : : set < K , Pred , A > & m , int nType , int nVersion ) ;
@ -573,12 +527,6 @@ template<typename Stream, typename K, typename Pred, typename A> void Unserializ
* The compiler will only cast int to long if none of the other templates matched .
* The compiler will only cast int to long if none of the other templates matched .
* Thanks to Boost serialization for this idea .
* Thanks to Boost serialization for this idea .
*/
*/
template < typename T >
inline unsigned int GetSerializeSize ( const T & a , long nType , int nVersion )
{
return a . GetSerializeSize ( ( int ) nType , nVersion ) ;
}
template < typename Stream , typename T >
template < typename Stream , typename T >
inline void Serialize ( Stream & os , const T & a , long nType , int nVersion )
inline void Serialize ( Stream & os , const T & a , long nType , int nVersion )
{
{
@ -598,12 +546,6 @@ inline void Unserialize(Stream& is, T& a, long nType, int nVersion)
/**
/**
* string
* string
*/
*/
template < typename C >
unsigned int GetSerializeSize ( const std : : basic_string < C > & str , int , int )
{
return GetSizeOfCompactSize ( str . size ( ) ) + str . size ( ) * sizeof ( str [ 0 ] ) ;
}
template < typename Stream , typename C >
template < typename Stream , typename C >
void Serialize ( Stream & os , const std : : basic_string < C > & str , int , int )
void Serialize ( Stream & os , const std : : basic_string < C > & str , int , int )
{
{
@ -626,28 +568,6 @@ void Unserialize(Stream& is, std::basic_string<C>& str, int, int)
/**
/**
* prevector
* prevector
*/
*/
template < unsigned int N , typename T >
unsigned int GetSerializeSize_impl ( const prevector < N , T > & v , int nType , int nVersion , const unsigned char & )
{
return ( GetSizeOfCompactSize ( v . size ( ) ) + v . size ( ) * sizeof ( T ) ) ;
}
template < unsigned int N , typename T , typename V >
unsigned int GetSerializeSize_impl ( const prevector < N , T > & v , int nType , int nVersion , const V & )
{
unsigned int nSize = GetSizeOfCompactSize ( v . size ( ) ) ;
for ( typename prevector < N , T > : : const_iterator vi = v . begin ( ) ; vi ! = v . end ( ) ; + + vi )
nSize + = GetSerializeSize ( ( * vi ) , nType , nVersion ) ;
return nSize ;
}
template < unsigned int N , typename T >
inline unsigned int GetSerializeSize ( const prevector < N , T > & v , int nType , int nVersion )
{
return GetSerializeSize_impl ( v , nType , nVersion , T ( ) ) ;
}
template < typename Stream , unsigned int N , typename T >
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 & )
void Serialize_impl ( Stream & os , const prevector < N , T > & v , int nType , int nVersion , const unsigned char & )
{
{
@ -716,28 +636,6 @@ inline void Unserialize(Stream& is, prevector<N, T>& v, int nType, int nVersion)
/**
/**
* vector
* vector
*/
*/
template < typename T , typename A >
unsigned int GetSerializeSize_impl ( const std : : vector < T , A > & v , int nType , int nVersion , const unsigned char & )
{
return ( GetSizeOfCompactSize ( v . size ( ) ) + v . size ( ) * sizeof ( T ) ) ;
}
template < typename T , typename A , typename V >
unsigned int GetSerializeSize_impl ( const std : : vector < T , A > & v , int nType , int nVersion , const V & )
{
unsigned int nSize = GetSizeOfCompactSize ( v . size ( ) ) ;
for ( typename std : : vector < T , A > : : const_iterator vi = v . begin ( ) ; vi ! = v . end ( ) ; + + vi )
nSize + = GetSerializeSize ( ( * vi ) , nType , nVersion ) ;
return nSize ;
}
template < typename T , typename A >
inline unsigned int GetSerializeSize ( const std : : vector < T , A > & v , int nType , int nVersion )
{
return GetSerializeSize_impl ( v , nType , nVersion , T ( ) ) ;
}
template < typename Stream , typename T , typename A >
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 & )
void Serialize_impl ( Stream & os , const std : : vector < T , A > & v , int nType , int nVersion , const unsigned char & )
{
{
@ -806,12 +704,6 @@ inline void Unserialize(Stream& is, std::vector<T, A>& v, int nType, int nVersio
/**
/**
* pair
* pair
*/
*/
template < typename K , typename T >
unsigned int GetSerializeSize ( const std : : pair < K , T > & item , int nType , int nVersion )
{
return GetSerializeSize ( item . first , nType , nVersion ) + GetSerializeSize ( item . second , nType , nVersion ) ;
}
template < typename Stream , typename K , typename T >
template < typename Stream , typename K , typename T >
void Serialize ( Stream & os , const std : : pair < K , T > & item , int nType , int nVersion )
void Serialize ( Stream & os , const std : : pair < K , T > & item , int nType , int nVersion )
{
{
@ -831,15 +723,6 @@ void Unserialize(Stream& is, std::pair<K, T>& item, int nType, int nVersion)
/**
/**
* map
* 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 )
{
unsigned int nSize = GetSizeOfCompactSize ( m . size ( ) ) ;
for ( typename std : : map < K , T , Pred , A > : : const_iterator mi = m . begin ( ) ; mi ! = m . end ( ) ; + + mi )
nSize + = GetSerializeSize ( ( * mi ) , nType , nVersion ) ;
return nSize ;
}
template < typename Stream , typename K , typename T , typename Pred , typename A >
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 )
void Serialize ( Stream & os , const std : : map < K , T , Pred , A > & m , int nType , int nVersion )
{
{
@ -867,15 +750,6 @@ void Unserialize(Stream& is, std::map<K, T, Pred, A>& m, int nType, int nVersion
/**
/**
* set
* set
*/
*/
template < typename K , typename Pred , typename A >
unsigned int GetSerializeSize ( const std : : set < K , Pred , A > & m , int nType , int nVersion )
{
unsigned int nSize = GetSizeOfCompactSize ( m . size ( ) ) ;
for ( typename std : : set < K , Pred , A > : : const_iterator it = m . begin ( ) ; it ! = m . end ( ) ; + + it )
nSize + = GetSerializeSize ( ( * it ) , nType , nVersion ) ;
return nSize ;
}
template < typename Stream , typename K , typename Pred , typename A >
template < typename Stream , typename K , typename Pred , typename A >
void Serialize ( Stream & os , const std : : set < K , Pred , A > & m , int nType , int nVersion )
void Serialize ( Stream & os , const std : : set < K , Pred , A > & m , int nType , int nVersion )
{
{
@ -1008,4 +882,16 @@ inline void SerReadWriteMany(Stream& s, int nType, int nVersion, CSerActionUnser
: : UnserializeMany ( s , nType , nVersion , args . . . ) ;
: : UnserializeMany ( s , nType , nVersion , args . . . ) ;
}
}
template < typename T >
size_t GetSerializeSize ( const T & t , int nType , int nVersion = 0 )
{
return ( CSizeComputer ( nType , nVersion ) < < t ) . size ( ) ;
}
template < typename S , typename T >
size_t GetSerializeSize ( const S & s , const T & t )
{
return ( CSizeComputer ( s . GetType ( ) , s . GetVersion ( ) ) < < t ) . size ( ) ;
}
# endif // BITCOIN_SERIALIZE_H
# endif // BITCOIN_SERIALIZE_H