#include #include #include Buffer::Buffer() { } Buffer::Buffer(u8* data, usize size) : m_data(data), m_size(size) { } Buffer::Buffer(Buffer&& other) : m_data(other.data()), m_size(other.size()) { other.m_data = nullptr; } Buffer::~Buffer() { if (m_data) free_impl(m_data); } Result Buffer::create_sized(usize size) { u8* data = (u8*)TRY(malloc_impl(size)); return Buffer { data, size }; } Result Buffer::try_resize(usize new_size) { m_data = (u8*)TRY(realloc_impl(m_data, new_size)); m_size = new_size; return {}; } Result Buffer::slice_at_end(usize size) { usize old_size = m_size; TRY(try_resize(m_size + size)); return m_data + old_size; } Result Buffer::slice(usize offset, usize size) { if (offset + size > m_size) { TRY(try_resize(offset + size)); } return m_data + offset; } Result Buffer::append_data(const u8* data, usize size) { memcpy(TRY(slice_at_end(size)), data, size); return {}; }