19#include "pw_bytes/span.h"
20#include "pw_result/result.h"
21#include "pw_span/span.h"
22#include "pw_stream/seek.h"
23#include "pw_stream/stream.h"
38 using difference_type = ptrdiff_t;
39 using reference =
const std::byte&;
40 using const_reference =
const std::byte&;
41 using pointer =
const std::byte*;
42 using const_pointer =
const std::byte*;
43 using iterator =
const std::byte*;
44 using const_iterator =
const std::byte*;
54 : dest_(dest), position_(bytes_written) {
55 PW_ASSERT(position_ <= dest.size_bytes());
58 ConstByteSpan WrittenData()
const {
return dest_.first(position_); }
60 void clear() { position_ = 0; }
62 std::byte* data() {
return dest_.data(); }
63 const std::byte* data()
const {
return dest_.data(); }
65 const std::byte& operator[](
size_t index)
const {
return dest_[index]; }
67 [[nodiscard]]
bool empty()
const {
return size() == 0u; }
69 size_t size()
const {
return position_; }
70 size_t bytes_written()
const {
return size(); }
72 size_t capacity()
const {
return dest_.size(); }
74 const std::byte* begin()
const {
return dest_.data(); }
75 const std::byte* end()
const {
return dest_.data() + position_; }
79 return type == LimitType::kWrite ? dest_.size_bytes() - position_ : 0;
89 return CalculateSeek(offset, origin, dest_.size(), position_);
92 size_t DoTell() final {
return position_; }
98template <
size_t kSizeBytes>
116 std::array<std::byte, kSizeBytes> buffer_;
124 : source_(source), position_(0) {}
126 size_t bytes_read()
const {
return position_; }
128 const std::byte* data()
const {
return source_.data(); }
132 return type == LimitType::kRead ? source_.size_bytes() - position_ : 0;
136 return CalculateSeek(offset, origin, source_.size(), position_);
139 size_t DoTell()
override {
return position_; }
Definition: status_with_size.h:51
Definition: memory_stream.h:121
StatusWithSize DoRead(ByteSpan dest) override
Virtual Read() function implemented by derived classes.
size_t ConservativeLimit(LimitType type) const override
Definition: memory_stream.h:131
Status DoSeek(ptrdiff_t offset, Whence origin) override
Virtual Seek() function implemented by derived classes.
Definition: memory_stream.h:135
size_t DoTell() override
Definition: memory_stream.h:139
Definition: memory_stream.h:99
MemoryWriterBuffer(MemoryWriterBuffer &&)=delete
MemoryWriterBuffer & operator=(MemoryWriter &&)=delete
Definition: memory_stream.h:36
Status DoSeek(ptrdiff_t offset, Whence origin) final
Virtual Seek() function implemented by derived classes.
Definition: memory_stream.h:88
size_t DoTell() final
Definition: memory_stream.h:92
Status DoWrite(ConstByteSpan data) final
Virtual Write() function implemented by derived classes.
size_t ConservativeLimit(LimitType type) const override
Definition: memory_stream.h:78
Whence
Positions from which to seek.
Definition: stream.h:48