52typedef struct BufRingNode BufRingNode;
53typedef struct BufRingNode {
61typedef struct BufRing {
79typedef bool (*
bufringZCCB)(_In_reads_bytes_(bytes)
const uint8* buf,
size_t bytes,
80 _Pre_opt_valid_
void* ctx);
96typedef size_t (*
bufringFeedCB)(_Out_writes_bytes_(maxbytes) uint8* buf,
size_t maxbytes,
97 _Pre_opt_valid_
void* ctx);
119size_t bufringRead(_Inout_ BufRing* ring, _Out_writes_bytes_(bytes) uint8* buf,
size_t bytes);
133 buf->len =
bufringRead(ring, buf->data, min(buf->sz, maxbytes));
148size_t bufringPeek(_Inout_ BufRing* ring, _Out_writes_bytes_(bytes) uint8* buf,
size_t off,
166 buf->len =
bufringPeek(ring, buf->data, off, min(buf->sz, maxbytes));
210void bufringWrite(_Inout_ BufRing* ring, _In_reads_bytes_(bytes)
const uint8* buf,
size_t bytes);
341 _Outptr_result_buffer_(*len) uint8** ptr, _Out_
size_t* len);
Simple buffer management.
Comparison and clamping macros.
size_t bufringReadBuf(BufRing *ring, Buffer buf, size_t maxbytes)
void bufringWrite(BufRing *ring, const uint8 *buf, size_t bytes)
size_t bufringPeekBuf(BufRing *ring, Buffer buf, size_t off, size_t maxbytes)
size_t bufringSkip(BufRing *ring, size_t bytes)
bool(* bufringZCCB)(const uint8 *buf, size_t bytes, void *ctx)
void bufringInit(BufRing *ring, size_t segsz)
size_t bufringReadZC(BufRing *ring, size_t bytes, bufringZCCB cb, void *ctx)
void bufringWriteBuf(BufRing *ring, Buffer buf)
size_t(* bufringFeedCB)(uint8 *buf, size_t maxbytes, void *ctx)
size_t bufringPeek(BufRing *ring, uint8 *buf, size_t off, size_t bytes)
size_t bufringRead(BufRing *ring, uint8 *buf, size_t bytes)
void bufringReserve(BufRing *ring, size_t minbytes, _Outptr_result_buffer_(*len) uint8 **ptr, size_t *len)
void bufringCommit(BufRing *ring, size_t bytes)
void bufringDestroy(BufRing *ring)
void bufringWriteZC(BufRing *ring, Buffer *buf)
size_t bufringFeed(BufRing *ring, bufringFeedCB feed, size_t bytes, void *ctx)
size_t bufringWriteSpace(BufRing *ring)