void kl_drain_free(KlDrain *d)
Free drain buffer.
void kl_drain_set_max_size(KlDrain *d, size_t max_size)
Set maximum buffer size.
int kl_drain_flush(KlDrain *d)
Flush buffered data.
int kl_drain_pending(const KlDrain *d)
Check if data is pending.
void(* KlDrainCb)(void *ctx)
Drain callback — fired when buffer transitions non-empty → empty.
Definition drain.h:21
ssize_t(* KlDrainWriteFn)(const char *data, size_t len, void *ctx)
Write function for KlDrain.
Definition drain.h:16
size_t kl_drain_buffered(const KlDrain *d)
Get number of buffered bytes.
int kl_drain_write(KlDrain *d, const char *data, size_t len)
Write data through the drain.
void kl_drain_on_drain(KlDrain *d, KlDrainCb cb, void *ctx)
Register a drain callback.
void kl_drain_init(KlDrain *d, KlDrainWriteFn write_fn, void *write_ctx, KlAllocator *alloc)
Initialize a drain buffer.
Bring-your-own allocator vtable.
Definition allocator.h:12
Backpressure write buffer.
Definition drain.h:33
char * buf
Definition drain.h:39
KlDrainCb on_drain
Definition drain.h:36
void * drain_ctx
Definition drain.h:37
size_t buf_cap
Definition drain.h:41
size_t max_size
Definition drain.h:42
int error
Definition drain.h:43
KlDrainWriteFn write_fn
Definition drain.h:34
void * write_ctx
Definition drain.h:35
size_t buf_len
Definition drain.h:40
KlAllocator * alloc
Definition drain.h:38