26 [[nodiscard]]
constexpr const std::uint8_t*
data() const noexcept {
29 [[nodiscard]]
constexpr std::size_t
size() const noexcept {
32 [[nodiscard]]
constexpr bool empty() const noexcept {
36 [[nodiscard]]
constexpr const std::uint8_t*
begin() const noexcept {
39 [[nodiscard]]
constexpr const std::uint8_t*
end() const noexcept {
43 [[nodiscard]]
constexpr std::uint8_t
operator[](
const std::size_t i)
const noexcept {
49 if (offset >= size_) {
52 return {data_ + offset, size_ - offset};
56 const std::uint8_t* data_ =
nullptr;
57 std::size_t size_ = 0;
71[[nodiscard]] std::size_t
varint_size(std::uint32_t value)
noexcept;
84 std::size_t& consumed,
Non-owning view over a contiguous run of bytes (a C++17 stand-in for std::span<const std::uint8_t>).
Definition bytes.hpp:17
ByteView(const ByteBuffer &buf) noexcept
Definition bytes.hpp:24
constexpr std::uint8_t operator[](const std::size_t i) const noexcept
Definition bytes.hpp:43
constexpr const std::uint8_t * begin() const noexcept
Definition bytes.hpp:36
constexpr bool empty() const noexcept
Definition bytes.hpp:32
constexpr std::size_t size() const noexcept
Definition bytes.hpp:29
constexpr ByteView() noexcept=default
ByteView subview(const std::size_t offset) const noexcept
Sub-view starting at offset (clamped) spanning the remaining bytes.
Definition bytes.hpp:48
constexpr const std::uint8_t * end() const noexcept
Definition bytes.hpp:39
constexpr const std::uint8_t * data() const noexcept
Definition bytes.hpp:26
std::size_t varint_size(std::uint32_t value) noexcept
Number of bytes the base-128 encoding of value occupies.
void append_varint(ByteBuffer &out, std::uint32_t value)
Append the base-128 varint encoding of value to out.
VarintStatus decode_varint(const std::uint8_t *data, std::size_t len, std::uint32_t &value, std::size_t &consumed, std::size_t max_bytes=max_varint_bytes) noexcept
Decode a base-128 varint from [data, data+len).
VarintStatus
Outcome of decoding a varint from a (possibly partial) buffer.
Definition bytes.hpp:64
@ Overflow
The varint exceeded the permitted byte budget.
@ Incomplete
The buffer ended mid-varint; read more and retry.
@ Ok
A complete value was decoded.
constexpr std::size_t max_varint_bytes
Maximum number of bytes a base-128 varint may occupy for a 32-bit value.
Definition bytes.hpp:61
std::vector< std::uint8_t > ByteBuffer
Owning, growable byte buffer.
Definition bytes.hpp:13