Bitcoin Core 28.99.0
P2P Digital Currency
Public Member Functions | Static Public Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
base_blob< BITS > Class Template Reference

Template base class for fixed-sized opaque blobs. More...

#include <uint256.h>

Public Member Functions

constexpr base_blob ()
 
constexpr base_blob (uint8_t v)
 
constexpr base_blob (Span< const unsigned char > vch)
 
consteval base_blob (std::string_view hex_str)
 
constexpr bool IsNull () const
 
constexpr void SetNull ()
 
constexpr int Compare (const base_blob &other) const
 Lexicographic ordering. More...
 
constexpr const unsigned char * data () const
 
constexpr unsigned char * data ()
 
constexpr unsigned char * begin ()
 
constexpr unsigned char * end ()
 
constexpr const unsigned char * begin () const
 
constexpr const unsigned char * end () const
 
constexpr uint64_t GetUint64 (int pos) const
 
template<typename Stream >
void Serialize (Stream &s) const
 
template<typename Stream >
void Unserialize (Stream &s)
 
Hex representation

The hex representation used by GetHex(), ToString(), FromHex() and SetHexDeprecated() is unusual, since it shows bytes of the base_blob in reverse order.

For example, a 4-byte blob {0x12, 0x34, 0x56, 0x78} is represented as "78563412" instead of the more typical "12345678" representation that would be shown in a hex editor or used by typical byte-array / hex conversion functions like python's bytes.hex() and bytes.fromhex().

The nice thing about the reverse-byte representation, even though it is unusual, is that if a blob contains an arithmetic number in little endian format (with least significant bytes first, and most significant bytes last), the GetHex() output will match the way the number would normally be written in base-16 (with most significant digits first and least significant digits last).

This means, for example, that ArithToUint256(num).GetHex() can be used to display an arith_uint256 num value as a number, because ArithToUint256() converts the number to a blob in little-endian format, so the arith_uint256 class doesn't need to have its own number parsing and formatting functions.

std::string GetHex () const
 
void SetHexDeprecated (std::string_view str)
 Unlike FromHex this accepts any invalid input, thus it is fragile and deprecated! More...
 
std::string ToString () const
 

Static Public Member Functions

static constexpr unsigned int size ()
 

Protected Attributes

std::array< uint8_t, WIDTHm_data
 

Static Protected Attributes

static constexpr int WIDTH = BITS / 8
 

Friends

constexpr bool operator== (const base_blob &a, const base_blob &b)
 
constexpr bool operator!= (const base_blob &a, const base_blob &b)
 
constexpr bool operator< (const base_blob &a, const base_blob &b)
 

Detailed Description

template<unsigned int BITS>
class base_blob< BITS >

Template base class for fixed-sized opaque blobs.

Definition at line 25 of file uint256.h.

Constructor & Destructor Documentation

◆ base_blob() [1/4]

template<unsigned int BITS>
constexpr base_blob< BITS >::base_blob ( )
inlineconstexpr

Definition at line 35 of file uint256.h.

◆ base_blob() [2/4]

template<unsigned int BITS>
constexpr base_blob< BITS >::base_blob ( uint8_t  v)
inlineexplicitconstexpr

Definition at line 38 of file uint256.h.

◆ base_blob() [3/4]

template<unsigned int BITS>
constexpr base_blob< BITS >::base_blob ( Span< const unsigned char >  vch)
inlineexplicitconstexpr

Definition at line 40 of file uint256.h.

Here is the call graph for this function:

◆ base_blob() [4/4]

template<unsigned int BITS>
consteval base_blob< BITS >::base_blob ( std::string_view  hex_str)
explicit

Definition at line 139 of file uint256.h.

Here is the call graph for this function:

Member Function Documentation

◆ begin() [1/2]

template<unsigned int BITS>
constexpr unsigned char * base_blob< BITS >::begin ( )
inlineconstexpr

Definition at line 115 of file uint256.h.

◆ begin() [2/2]

template<unsigned int BITS>
constexpr const unsigned char * base_blob< BITS >::begin ( ) const
inlineconstexpr

Definition at line 118 of file uint256.h.

◆ Compare()

template<unsigned int BITS>
constexpr int base_blob< BITS >::Compare ( const base_blob< BITS > &  other) const
inlineconstexpr

Lexicographic ordering.

Note
Does NOT match the ordering on the corresponding base_uint::CompareTo, which starts comparing from the end.

Definition at line 64 of file uint256.h.

Here is the caller graph for this function:

◆ data() [1/2]

template<unsigned int BITS>
constexpr unsigned char * base_blob< BITS >::data ( )
inlineconstexpr

Definition at line 113 of file uint256.h.

◆ data() [2/2]

template<unsigned int BITS>
constexpr const unsigned char * base_blob< BITS >::data ( ) const
inlineconstexpr

Definition at line 112 of file uint256.h.

Here is the caller graph for this function:

◆ end() [1/2]

template<unsigned int BITS>
constexpr unsigned char * base_blob< BITS >::end ( )
inlineconstexpr

Definition at line 116 of file uint256.h.

Here is the caller graph for this function:

◆ end() [2/2]

template<unsigned int BITS>
constexpr const unsigned char * base_blob< BITS >::end ( ) const
inlineconstexpr

Definition at line 119 of file uint256.h.

◆ GetHex()

template<unsigned int BITS>
std::string base_blob< BITS >::GetHex

Definition at line 11 of file uint256.cpp.

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

◆ GetUint64()

template<unsigned int BITS>
constexpr uint64_t base_blob< BITS >::GetUint64 ( int  pos) const
inlineconstexpr

Definition at line 123 of file uint256.h.

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

◆ IsNull()

template<unsigned int BITS>
constexpr bool base_blob< BITS >::IsNull ( ) const
inlineconstexpr

Definition at line 48 of file uint256.h.

Here is the caller graph for this function:

◆ Serialize()

template<unsigned int BITS>
template<typename Stream >
void base_blob< BITS >::Serialize ( Stream &  s) const
inline

Definition at line 126 of file uint256.h.

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

◆ SetHexDeprecated()

template<unsigned int BITS>
void base_blob< BITS >::SetHexDeprecated ( std::string_view  str)

Unlike FromHex this accepts any invalid input, thus it is fragile and deprecated!

  • Hex numbers that don't specify enough bytes to fill the internal array will be treated as setting the beginning of it, which corresponds to the least significant bytes when converted to base_uint.
  • Hex numbers specifying too many bytes will have the numerically most significant bytes (the beginning of the string) narrowed away.
  • An odd count of hex digits will result in the high bits of the leftmost byte being zero. "0x123" => {0x23, 0x1, 0x0, ..., 0x0}

Definition at line 21 of file uint256.cpp.

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

◆ SetNull()

template<unsigned int BITS>
constexpr void base_blob< BITS >::SetNull ( )
inlineconstexpr

Definition at line 55 of file uint256.h.

Here is the caller graph for this function:

◆ size()

template<unsigned int BITS>
static constexpr unsigned int base_blob< BITS >::size ( )
inlinestaticconstexpr

Definition at line 121 of file uint256.h.

Here is the caller graph for this function:

◆ ToString()

template<unsigned int BITS>
std::string base_blob< BITS >::ToString

Definition at line 47 of file uint256.cpp.

◆ Unserialize()

template<unsigned int BITS>
template<typename Stream >
void base_blob< BITS >::Unserialize ( Stream &  s)
inline

Definition at line 132 of file uint256.h.

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

Friends And Related Function Documentation

◆ operator!=

template<unsigned int BITS>
constexpr bool operator!= ( const base_blob< BITS > &  a,
const base_blob< BITS > &  b 
)
friend

Definition at line 67 of file uint256.h.

◆ operator<

template<unsigned int BITS>
constexpr bool operator< ( const base_blob< BITS > &  a,
const base_blob< BITS > &  b 
)
friend

Definition at line 68 of file uint256.h.

◆ operator==

template<unsigned int BITS>
constexpr bool operator== ( const base_blob< BITS > &  a,
const base_blob< BITS > &  b 
)
friend

Definition at line 66 of file uint256.h.

Member Data Documentation

◆ m_data

template<unsigned int BITS>
std::array<uint8_t, WIDTH> base_blob< BITS >::m_data
protected

Definition at line 30 of file uint256.h.

◆ WIDTH

template<unsigned int BITS>
constexpr int base_blob< BITS >::WIDTH = BITS / 8
staticconstexprprotected

Definition at line 28 of file uint256.h.


The documentation for this class was generated from the following files: