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");
55 [[nodiscard]]
void const*
63 add8(
unsigned char i);
72 int const ret =
data_.size();
73 data_.push_back(
static_cast<unsigned char>((i >> 24) & 0xff));
74 data_.push_back(
static_cast<unsigned char>((i >> 16) & 0xff));
75 data_.push_back(
static_cast<unsigned char>((i >> 8) & 0xff));
76 data_.push_back(
static_cast<unsigned char>(i & 0xff));
88 int const ret =
data_.size();
89 data_.push_back(
static_cast<unsigned char>((i >> 56) & 0xff));
90 data_.push_back(
static_cast<unsigned char>((i >> 48) & 0xff));
91 data_.push_back(
static_cast<unsigned char>((i >> 40) & 0xff));
92 data_.push_back(
static_cast<unsigned char>((i >> 32) & 0xff));
93 data_.push_back(
static_cast<unsigned char>((i >> 24) & 0xff));
94 data_.push_back(
static_cast<unsigned char>((i >> 16) & 0xff));
95 data_.push_back(
static_cast<unsigned char>((i >> 8) & 0xff));
96 data_.push_back(
static_cast<unsigned char>(i & 0xff));
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 kBytes =
sizeof(Integer);
138 if ((offset + kBytes) >
data_.size())
142 auto ptr = &
data_[offset];
143 for (
auto i = 0; i < kBytes; ++i)
152 template <std::
size_t Bits,
typename Tag =
void>
156 auto success = (offset + (Bits / 8)) <=
data_.size();
158 memcpy(
data.begin(), &(
data_.front()) + offset, (Bits / 8));
175 [[nodiscard]]
Blob const&
196 [[nodiscard]]
void const*
228 return data_.begin();
235 [[nodiscard]] Blob ::const_iterator
238 return data_.begin();
240 [[nodiscard]] Blob ::const_iterator
258 return data_.capacity();
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>
430template <std::
size_t Bits,
class Tag>
434 auto const n = Bits / 8;
Integers of any length that is a multiple of 32-bits.
static BaseUInt fromVoid(void const *data)
static constexpr std::size_t size()
Like std::vector<char> but better.
int getBytesLeft() const noexcept
SerialIter(Slice const &slice)
BaseUInt< Bits, Tag > getBitString()
bool empty() const noexcept
Slice getSlice(std::size_t bytes)
void getFieldID(int &type, int &name)
SerialIter(void const *data, std::size_t size) noexcept
SerialIter(std::uint8_t const (&data)[N])
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)
int addBitString(BaseUInt< Bits, Tag > const &v)
bool operator!=(Serializer const &v) const
int add16(std::uint16_t i)
bool getBitString(BaseUInt< Bits, Tag > &data, int offset) const
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.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr std::enable_if_t< std::is_integral_v< Dest > &&std::is_integral_v< Src >, Dest > safeCast(Src s) noexcept
HashPrefix
Prefix for hashing functions.
std::vector< unsigned char > Blob
Storage for linear binary data.
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)