3#include <xrpl/basics/Blob.h>
4#include <xrpl/basics/Buffer.h>
5#include <xrpl/basics/Slice.h>
6#include <xrpl/basics/base_uint.h>
7#include <xrpl/basics/contract.h>
8#include <xrpl/basics/safe_cast.h>
9#include <xrpl/basics/strHex.h>
10#include <xrpl/beast/utility/instrumentation.h>
11#include <xrpl/protocol/HashPrefix.h>
12#include <xrpl/protocol/SField.h>
38 XRPL_ASSERT(
data,
"xrpl::Serializer::Serializer(void const*) : non-null input");
63 add8(
unsigned char i);
100 template <
typename Integer>
103 template <std::
size_t Bits,
class Tag>
115 addRaw(
void const* ptr,
int len);
123 template <
class Iter>
127 addVL(
void const* ptr,
int len);
131 get8(
int&,
int offset)
const;
133 template <
typename Integer>
137 static auto const bytes =
sizeof(Integer);
142 auto ptr = &
mData[offset];
143 for (
auto i = 0; i < bytes; ++i)
152 template <std::
size_t Bits,
typename Tag =
void>
167 return addFieldID(safe_cast<int>(type), name);
235 Blob ::const_iterator
240 Blob ::const_iterator
307 len -=
begin->size();
310 XRPL_ASSERT(len == 0,
"xrpl::Serializer::addVL : length matches distance");
336 static_assert(N > 0,
"");
351 return static_cast<int>(
remain_);
371 template <std::
size_t Bits,
class Tag =
void>
378 return getBitString<128>();
384 return getBitString<160>();
390 return getBitString<192>();
396 return getBitString<256>();
430template <std::
size_t Bits,
class Tag>
434 auto const n = Bits / 8;
437 Throw<std::runtime_error>(
"invalid SerialIter getBitString");
Like std::vector<char> but better.
int getBytesLeft() const noexcept
SerialIter(Slice const &slice)
std::size_t empty() const noexcept
base_uint< Bits, Tag > getBitString()
Slice getSlice(std::size_t bytes)
void getFieldID(int &type, int &name)
SerialIter(std::uint8_t const (&data)[N])
bool getBitString(base_uint< Bits, Tag > &data, int offset) const
int addFieldID(int type, int name)
Blob::const_iterator begin() const
void const * getDataPtr() const
static int decodeVLLength(int b1)
Blob const & peekData() const
bool getInteger(Integer &number, int offset)
bool operator!=(Serializer const &v) const
int add16(std::uint16_t i)
int addBitString(base_uint< Bits, Tag > const &v)
std::string getString() const
uint256 getSHA512Half() const
int addVL(Blob const &vector)
Serializer(void const *data, std::size_t size)
static int decodeLengthLength(int b1)
int addFieldID(SerializedTypeID type, int name)
int addEncoded(int length)
int addRaw(Blob const &vector)
Slice slice() const noexcept
int add8(unsigned char i)
bool operator==(Blob const &v) const
bool operator==(Serializer const &v) const
std::size_t size() const noexcept
bool operator!=(Blob const &v) const
bool get8(int &, int offset) const
int getDataLength() const
Blob::const_iterator end() const
static int encodeLengthLength(int length)
void const * data() const noexcept
An immutable linear range of bytes.
Integers of any length that is a multiple of 32-bits.
static base_uint fromVoid(void const *data)
static constexpr std::size_t size()
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
HashPrefix
Prefix for hashing functions.