43#include <ufo/utility/io/write_buffer.hpp>
51WriteBuffer::WriteBuffer(WriteBuffer
const& other)
54 write(other.data_.get(), other.size_);
58WriteBuffer& WriteBuffer::operator=(WriteBuffer
const& rhs)
63 write(rhs.data_.get(), rhs.size_);
68WriteBuffer& WriteBuffer::write(
void const* src, size_type count)
70 writeAt(pos_, src, count);
75WriteBuffer& WriteBuffer::write(std::istream& in, size_type count)
77 writeAt(pos_, in, count);
82void WriteBuffer::writeAt(pos_type pos,
void const* src, size_type count)
86 std::memmove(data_.get() + pos, src, count);
88 size_ = std::max(size_, pos + count);
91void WriteBuffer::writeAt(pos_type pos, std::istream& in, size_type count)
95 in.read(
reinterpret_cast<char*
>(data_.get() + pos),
96 static_cast<std::streamsize
>(count));
98 size_ = std::max(size_, pos + count);
101void WriteBuffer::writeAt(offset_type off, IODir dir,
void const* src, size_type count)
103 return writeAt(pos(pos_, off, dir), src, count);
106void WriteBuffer::writeAt(offset_type off, IODir dir, std::istream& in, size_type count)
108 return writeAt(pos(pos_, off, dir), in, count);
111void WriteBuffer::reserve(size_type new_cap)
113 if (cap_ >= new_cap) [[likely]] {
117 std::byte* prev = data_.get();
118 void* next = realloc(prev, new_cap *
sizeof(std::byte));
120 if (
nullptr != next) [[likely]] {
121 [[maybe_unused]]
auto prev = data_.release();
122 data_.reset(
static_cast<std::byte*
>(next));
123 BaseBuffer::data_ =
static_cast<std::byte const*
>(next);
125 }
else [[unlikely]] {
127 BaseBuffer::data_ =
nullptr;
132 throw std::bad_alloc();
136void WriteBuffer::clear()
142std::byte* WriteBuffer::data() {
return data_.get(); }
144WriteBuffer::size_type WriteBuffer::capacity() const noexcept {
return cap_; }
146WriteBuffer::pos_type WriteBuffer::writePos() const noexcept {
return pos_; }
148WriteBuffer& WriteBuffer::writeSeek(pos_type pos)
noexcept
154WriteBuffer& WriteBuffer::writeSeek(offset_type off, IODir dir)
noexcept
156 return writeSeek(pos(pos_, off, dir));
159WriteBuffer::size_type WriteBuffer::writeLeft() const noexcept
161 return size_ < pos_ ? 0 : pos_ - size_;
All vision-related classes and functions.