1#include <xrpl/protocol/Serializer.h>
3#include <xrpl/basics/Buffer.h>
4#include <xrpl/basics/Slice.h>
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/basics/contract.h>
7#include <xrpl/basics/safe_cast.h>
8#include <xrpl/beast/utility/instrumentation.h>
9#include <xrpl/protocol/HashPrefix.h>
10#include <xrpl/protocol/digest.h>
12#include <boost/endian/conversion.hpp>
27 int const ret =
data_.size();
28 data_.push_back(
static_cast<unsigned char>(i >> 8));
29 data_.push_back(
static_cast<unsigned char>(i & 0xff));
77 int const ret =
data_.size();
85 int const ret =
data_.size();
93 int const ret =
data_.size();
101 int const ret =
data_.size();
102 data_.insert(
data_.end(), (
char const*)ptr, ((
char const*)ptr) + len);
109 int const ret =
data_.size();
111 (type > 0) && (type < 256) && (name > 0) && (name < 256),
112 "xrpl::Serializer::addFieldID : inputs inside range");
119 data_.push_back(
static_cast<unsigned char>((type << 4) | name));
124 data_.push_back(
static_cast<unsigned char>(type << 4));
125 data_.push_back(
static_cast<unsigned char>(name));
131 data_.push_back(
static_cast<unsigned char>(name));
132 data_.push_back(
static_cast<unsigned char>(type));
137 data_.push_back(
static_cast<unsigned char>(0));
138 data_.push_back(
static_cast<unsigned char>(type));
139 data_.push_back(
static_cast<unsigned char>(name));
148 int const ret =
data_.size();
149 data_.push_back(
byte);
156 if (offset >=
data_.size())
159 byte =
data_[offset];
166 if (bytes >
data_.size())
186 "xrpl::Serializer::addVL : size matches expected");
218 bytes[0] =
static_cast<unsigned char>(length);
221 else if (length <= 12480)
224 bytes[0] = 193 +
static_cast<unsigned char>(length >> 8);
225 bytes[1] =
static_cast<unsigned char>(length & 0xff);
228 else if (length <= 918744)
231 bytes[0] = 241 +
static_cast<unsigned char>(length >> 16);
232 bytes[1] =
static_cast<unsigned char>((length >> 8) & 0xff);
233 bytes[2] =
static_cast<unsigned char>(length & 0xff);
241 return addRaw(&bytes[0], numBytes);
256 if (length <= 918744)
303 return 193 + ((b1 - 193) * 256) + b2;
315 return 12481 + ((b1 - 241) * 65536) + (b2 * 256) + b3;
348 unsigned char const t = *
p_;
403 return boost::endian::load_big_s32(t);
415 return boost::endian::load_big_s64(t);
474 int const b1 =
get8();
481 else if (lenLen == 2)
483 int const b2 =
get8();
488 XRPL_ASSERT(lenLen == 3,
"xrpl::SerialIter::getVLDataLength : lenLen is 3");
489 int const b2 =
get8();
490 int const b3 =
get8();
Like std::vector<char> but better.
Slice getSlice(std::size_t bytes)
void getFieldID(int &type, int &name)
SerialIter(void const *data, std::size_t size) noexcept
int addFieldID(int type, int name)
static int decodeVLLength(int b1)
int add16(std::uint16_t i)
uint256 getSHA512Half() const
int addVL(Blob const &vector)
static int decodeLengthLength(int b1)
int addEncoded(int length)
int addRaw(Blob const &vector)
Slice slice() const noexcept
int add8(unsigned char i)
bool get8(int &, int offset) const
static int encodeLengthLength(int length)
An immutable linear range of bytes.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
sha512_half_hasher::result_type sha512Half(Args const &... args)
Returns the SHA512-Half of a series of objects.
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)
std::enable_if_t< std::is_same_v< T, char >||std::is_same_v< T, unsigned char >, Slice > makeSlice(std::array< T, N > const &a)