35 if (!backend || (!buf && n)) {
61 size_t ret = (avail < n) ? avail : n;
79 if (dbuf->
cap >= cap) {
96 if (cap > SIZE_MAX / 2) {
99 return (
size_t)(2 * cap);
112 if (!backend || (!buf && n)) {
128 if (n > SIZE_MAX - dbuf->
len) {
135 size_t need = dbuf->
len + n;
136 size_t new_cap = dbuf->
cap;
145 while (need > new_cap) {
147 if (grown == 0 || grown <= new_cap) {
257 mem->
free((
void *)ud);
265 if (!out || !env || !cfg) {
295 if (args || !out || !ctor_ud) {
371 .port_env = *port_env
static stream_status_t dynamic_buffer_stream_flush(void *backend)
static size_t dynamic_buffer_stream_write(void *backend, const void *buf, size_t n, stream_status_t *st)
stream_status_t dynamic_buffer_stream_create_desc(stream_adapter_desc_t *out, stream_key_t key, const dynamic_buffer_stream_cfg_t *cfg, const dynamic_buffer_stream_env_t *env, const osal_mem_ops_t *mem)
Build a stream adapter descriptor for the dynamic_buffer_stream adapter.
static size_t dynamic_buffer_stream_next_cap(size_t cap)
static stream_status_t dynamic_buffer_stream_buffer_reserve(dynamic_buffer_stream_t *dbs, size_t cap)
static stream_status_t dynamic_buffer_stream_close(void *backend)
static void dynamic_buffer_stream_destroy_ud_ctor(const void *ud, const osal_mem_ops_t *mem)
stream_status_t dynamic_buffer_stream_create_stream(stream_t **out, const dynamic_buffer_stream_cfg_t *cfg, const dynamic_buffer_stream_env_t *env)
Create a dynamic_buffer_stream instance directly.
dynamic_buffer_stream_cfg_t dynamic_buffer_stream_default_cfg(void)
Return the default configuration for the dynamic_buffer_stream adapter.
dynamic_buffer_stream_env_t dynamic_buffer_stream_default_env(const osal_mem_ops_t *mem, const stream_env_t *port_env)
Return the default injected environment for the dynamic_buffer_stream adapter.
static size_t dynamic_buffer_stream_read(void *backend, void *buf, size_t n, stream_status_t *st)
stream_status_t dynamic_buffer_stream_ctor(const void *ud, const void *args, stream_t **out)
Factory-compatible constructor callback for the dynamic_buffer_stream adapter.
static stream_status_t dynamic_buffer_stream_create_backend(dynamic_buffer_stream_t **out, const dynamic_buffer_stream_cfg_t *cfg, const dynamic_buffer_stream_env_t *env)
static const stream_vtbl_t VTBL
Composition Root API for the dynamic_buffer_stream adapter.
Private constructor user-data stored in dynamic_buffer_stream factory descriptors.
Private backend handle definition for the dynamic_buffer_stream adapter.
Private runtime state definition for the dynamic_buffer_stream backend.
#define DYNAMIC_BUFFER_STREAM_DEFAULT_CAPACITY
#define LEXLEO_ASSERT(expr)
void * osal_memcpy(void *dest, const void *src, size_t n)
const osal_mem_ops_t * osal_mem_default_ops(void)
stream_status_t stream_create(stream_t **out, const stream_vtbl_t *vtbl, void *backend, const stream_env_t *env)
Create a generic stream handle from adapter-provided backend bindings.
const char * stream_key_t
Public identifier type for a registered stream adapter.
stream_status_t
Public status codes used by the stream port.
Configuration type for the dynamic_buffer_stream adapter.
size_t default_cap
Default initial capacity of the internal dynamic buffer.
Private constructor user-data for dynamic_buffer_stream factory registration.
dynamic_buffer_stream_env_t env
dynamic_buffer_stream_cfg_t cfg
Injected dependencies for the dynamic_buffer_stream adapter.
const osal_mem_ops_t * mem
Borrowed memory operations table for adapter-owned allocations.
stream_env_t port_env
Borrowed stream port environment.
Private backend handle for the dynamic_buffer_stream adapter.
dynamic_buffer_stream_state_t state
const osal_mem_ops_t * mem
Private dynamic buffer state used by the dynamic_buffer_stream backend.
void *(* calloc)(size_t nmemb, size_t size)
void *(* realloc)(void *ptr, size_t size)
Public descriptor used to register a concrete stream adapter.
stream_key_t key
Public key used to identify the adapter.
const void * ud
Optional opaque user data bound to the constructor.
ud_dtor_fn_t ud_dtor
Optional destructor for ud.
stream_ctor_fn_t ctor
Adapter constructor used to create a stream_t.
Runtime environment for the stream port.
Private handle structure for a stream_t.
Adapter dispatch table bound to a stream_t instance.