2024-10-24 19:24:54 +01:00
|
|
|
#ifndef BLUELIB_BUFFER_H_
|
|
|
|
|
#define BLUELIB_BUFFER_H_
|
|
|
|
|
|
2025-08-09 19:57:42 +01:00
|
|
|
#include <blue/ds/object.h>
|
|
|
|
|
#include <blue/ds/type.h>
|
2024-10-24 19:24:54 +01:00
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
|
|
#define B_BUFFER(p) ((b_buffer *)(p))
|
|
|
|
|
|
|
|
|
|
typedef struct b_buffer b_buffer;
|
|
|
|
|
|
2024-11-14 16:56:12 +00:00
|
|
|
BLUE_API b_buffer *b_buffer_create(size_t item_sz);
|
|
|
|
|
BLUE_API b_buffer *b_buffer_create_from_bytes(const void *p, size_t len);
|
2025-04-11 13:56:09 +01:00
|
|
|
BLUE_API b_buffer *b_buffer_create_from_array(
|
|
|
|
|
const void *p, size_t item_sz, size_t len);
|
|
|
|
|
|
|
|
|
|
static inline b_buffer *b_buffer_retain(b_buffer *buf)
|
|
|
|
|
{
|
2025-08-09 19:57:42 +01:00
|
|
|
return B_BUFFER(b_retain(B_DSREF(buf)));
|
2025-04-11 13:56:09 +01:00
|
|
|
}
|
|
|
|
|
static inline void b_buffer_release(b_buffer *buf)
|
|
|
|
|
{
|
2025-08-09 19:57:42 +01:00
|
|
|
b_release(B_DSREF(buf));
|
2025-04-11 13:56:09 +01:00
|
|
|
}
|
2024-11-14 16:56:12 +00:00
|
|
|
BLUE_API void *b_buffer_steal(b_buffer *buf);
|
|
|
|
|
BLUE_API b_status b_buffer_reserve(b_buffer *buf, size_t capacity);
|
2025-04-11 13:56:09 +01:00
|
|
|
BLUE_API b_status b_buffer_resize(b_buffer *buf, size_t length);
|
2024-10-24 19:24:54 +01:00
|
|
|
|
2024-11-14 16:56:12 +00:00
|
|
|
BLUE_API b_status b_buffer_append(b_buffer *dest, const void *p, size_t count);
|
|
|
|
|
BLUE_API b_status b_buffer_prepend(b_buffer *dest, const void *p, size_t count);
|
2025-04-11 13:56:09 +01:00
|
|
|
BLUE_API b_status b_buffer_insert(
|
|
|
|
|
b_buffer *dest, const void *p, size_t count, size_t at);
|
|
|
|
|
BLUE_API b_status b_buffer_remove(b_buffer *dest, size_t at, size_t count);
|
|
|
|
|
BLUE_API b_status b_buffer_clear(b_buffer *buf);
|
|
|
|
|
|
|
|
|
|
BLUE_API b_status b_buffer_push_back(b_buffer *buf, size_t count, void **p);
|
|
|
|
|
BLUE_API b_status b_buffer_push_front(b_buffer *buf, size_t count, void **p);
|
|
|
|
|
|
|
|
|
|
BLUE_API b_status b_buffer_pop_back(b_buffer *buf, size_t count);
|
|
|
|
|
BLUE_API b_status b_buffer_pop_front(b_buffer *buf, size_t count);
|
2024-10-24 19:24:54 +01:00
|
|
|
|
2025-04-11 13:56:09 +01:00
|
|
|
BLUE_API size_t b_buffer_get_size(const b_buffer *buf);
|
|
|
|
|
BLUE_API size_t b_buffer_get_item_size(const b_buffer *buf);
|
|
|
|
|
BLUE_API size_t b_buffer_get_capacity(const b_buffer *buf);
|
2024-10-24 19:24:54 +01:00
|
|
|
|
2025-04-11 13:56:09 +01:00
|
|
|
BLUE_API void *b_buffer_ptr(const b_buffer *buf);
|
|
|
|
|
BLUE_API void *b_buffer_get(const b_buffer *buf, size_t at);
|
2024-10-24 19:24:54 +01:00
|
|
|
|
|
|
|
|
#endif
|