16#ifndef LIEF_SPAN_STREAM_H
17#define LIEF_SPAN_STREAM_H
64 std::unique_ptr<SpanStream>
clone()
const {
65 return std::unique_ptr<SpanStream>(
new SpanStream(*
this));
76 uint64_t
size()
const override {
80 const uint8_t*
p()
const override {
81 return data_.data() + this->
pos();
84 const uint8_t*
start()
const override {
88 const uint8_t*
end()
const override {
89 return data_.data() +
size();
93 return {data_.begin(), data_.end()};
97 if (offset > data_.size() || (offset +
size) > data_.size()) {
100 return data_.subspan(offset,
size);
103 if (offset > data_.size()) {
106 return data_.subspan(offset, data_.size() - offset);
119 const uint64_t stream_size = this->size();
120 if (offset > stream_size || (offset +
size) > stream_size) {
123 return data_.data() + offset;
STREAM_TYPE
Definition BinaryStream.hpp:37
@ SPAN
Definition BinaryStream.hpp:41
virtual const uint8_t * p() const
Definition BinaryStream.hpp:259
size_t pos() const
Definition BinaryStream.hpp:175
virtual uint8_t * start()
Definition BinaryStream.hpp:263
BinaryStream(STREAM_TYPE type)
Definition BinaryStream.hpp:47
STREAM_TYPE type() const
Definition BinaryStream.hpp:53
virtual uint8_t * end()
Definition BinaryStream.hpp:271
~SpanStream() override=default
std::unique_ptr< VectorStream > to_vector() const
SpanStream & operator=(SpanStream &&other) noexcept=default
SpanStream & operator=(const SpanStream &other)=default
SpanStream(const SpanStream &other)=default
const uint8_t * p() const override
Definition SpanStream.hpp:80
SpanStream(const uint8_t *p, size_t size)
Definition SpanStream.hpp:55
static bool classof(const BinaryStream &stream)
Definition SpanStream.hpp:111
std::unique_ptr< SpanStream > clone() const
Definition SpanStream.hpp:64
SpanStream(span< uint8_t > data)
Definition SpanStream.hpp:51
result< SpanStream > slice(size_t offset, size_t size) const
Definition SpanStream.hpp:96
static result< SpanStream > from_vector(const std::vector< uint8_t > &data)
Definition SpanStream.hpp:38
static result< SpanStream > from_array(const std::array< uint8_t, N > &data)
Definition SpanStream.hpp:43
const uint8_t * start() const override
Definition SpanStream.hpp:84
SpanStream(const std::vector< uint8_t > &data)
Definition SpanStream.hpp:60
SpanStream(SpanStream &&other) noexcept=default
const uint8_t * end() const override
Definition SpanStream.hpp:88
result< SpanStream > slice(size_t offset) const
Definition SpanStream.hpp:102
uint64_t size() const override
Definition SpanStream.hpp:76
std::vector< uint8_t > content() const
Definition SpanStream.hpp:92
SpanStream(span< const uint8_t > data)
Definition SpanStream.hpp:47
Definition VectorStream.hpp:29
@ read_out_of_bound
Definition errors.hpp:32
@ read_error
Definition errors.hpp:24
tl::unexpected< lief_errors > make_error_code(lief_errors e)
Create an standard error code from lief_errors.
Definition errors.hpp:52
LIEF namespace.
Definition Abstract/Binary.hpp:40
tcb::span< ElementType, Extent > span
Definition span.hpp:22
tl::expected< T, lief_errors > result
Wrapper that contains an Object (T) or an error.
Definition errors.hpp:75
#define LIEF_API
Definition visibility.h:41