2023-03-11 00:27:08 +01:00
|
|
|
#pragma once
|
|
|
|
#include <luna/Result.h>
|
|
|
|
#include <luna/Types.h>
|
|
|
|
|
|
|
|
class Buffer
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Buffer();
|
|
|
|
~Buffer();
|
|
|
|
|
|
|
|
Buffer(Buffer&& other);
|
|
|
|
Buffer(const Buffer& other) = delete; // For now.
|
|
|
|
|
|
|
|
static Result<Buffer> create_sized(usize size);
|
|
|
|
|
|
|
|
Result<void> try_resize(usize new_size);
|
|
|
|
|
2023-03-11 00:52:39 +01:00
|
|
|
Result<u8*> slice_at_end(usize size);
|
|
|
|
|
|
|
|
Result<u8*> slice(usize offset, usize size);
|
2023-03-11 00:27:08 +01:00
|
|
|
|
2023-04-07 11:52:20 +02:00
|
|
|
Result<void> append_data(const u8* data, usize size);
|
2023-03-23 21:20:57 +01:00
|
|
|
|
2023-07-27 16:35:52 +02:00
|
|
|
usize dequeue_data(u8* data, usize size);
|
|
|
|
|
2023-03-11 00:27:08 +01:00
|
|
|
u8* data()
|
|
|
|
{
|
|
|
|
return m_data;
|
|
|
|
}
|
|
|
|
|
|
|
|
const u8* data() const
|
|
|
|
{
|
|
|
|
return m_data;
|
|
|
|
}
|
|
|
|
|
2023-07-02 19:29:04 +02:00
|
|
|
u8* release_data();
|
|
|
|
|
2023-03-11 00:52:39 +01:00
|
|
|
u8* end()
|
|
|
|
{
|
|
|
|
return m_data + m_size;
|
|
|
|
}
|
|
|
|
|
|
|
|
const u8* end() const
|
|
|
|
{
|
|
|
|
return m_data + m_size;
|
|
|
|
}
|
|
|
|
|
2023-03-11 00:27:08 +01:00
|
|
|
usize size() const
|
|
|
|
{
|
|
|
|
return m_size;
|
|
|
|
}
|
|
|
|
|
2023-04-18 16:40:37 +02:00
|
|
|
bool is_empty() const
|
|
|
|
{
|
|
|
|
return m_size == 0;
|
|
|
|
}
|
|
|
|
|
2023-03-11 00:27:08 +01:00
|
|
|
private:
|
|
|
|
Buffer(u8* data, usize size);
|
|
|
|
|
|
|
|
u8* m_data { nullptr };
|
|
|
|
usize m_size { 0 };
|
|
|
|
};
|