56typedef struct BufChainNode BufChainNode;
57typedef struct BufChainNode {
62typedef struct BufChain {
106size_t bufchainRead(_Inout_ BufChain* chain, _Out_writes_bytes_(bytes) uint8* buf,
size_t bytes);
120 buf->len =
bufchainRead(chain, buf->data, min(buf->sz, maxbytes));
135size_t bufchainPeek(_Inout_ BufChain* chain, _Out_writes_bytes_(bytes) uint8* buf,
size_t off,
153 buf->len =
bufchainPeek(chain, buf->data, off, min(buf->sz, maxbytes));
187 _Inout_opt_
void* ctx);
220 size_t maxiov, _Out_opt_
size_t* count);
231void bufchainWrite(_Inout_ BufChain* chain, _In_reads_bytes_(bytes)
const uint8* buf,
size_t bytes);
Simple buffer management.
Comparison and clamping macros.
void bufchainInit(BufChain *chain, size_t segsz)
void bufchainWrite(BufChain *chain, const uint8 *buf, size_t bytes)
size_t bufchainReadZC(BufChain *chain, size_t maxbytes, bufchainZCCB cb, void *ctx)
void bufchainWriteBuf(BufChain *chain, Buffer buf)
size_t bufchainPeekBuf(BufChain *chain, Buffer buf, size_t off, size_t maxbytes)
void bufchainWriteZC(BufChain *chain, Buffer *buf)
size_t bufchainSkip(BufChain *chain, size_t bytes)
size_t bufchainGatherIov(BufChain *chain, _Out_writes_to_(maxiov, *count) BufIov *iov, size_t maxiov, size_t *count)
size_t bufchainReadBuf(BufChain *chain, Buffer buf, size_t maxbytes)
void bufchainDestroy(BufChain *chain)
size_t bufchainPeek(BufChain *chain, uint8 *buf, size_t off, size_t bytes)
size_t bufchainRead(BufChain *chain, uint8 *buf, size_t bytes)
bool(* bufchainZCCB)(Buffer buf, size_t off, void *ctx)