CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
bufchain.h
Go to the documentation of this file.
1#pragma once
2
3#include <cx/cx.h>
4#include "cx/buffer/buffer.h"
5#include "cx/utils/compare.h"
6
9
53
54typedef struct BufChainNode BufChainNode;
55typedef struct BufChainNode {
56 BufChainNode* next;
57 Buffer buf;
58} BufChainNode;
59
60typedef struct BufChain {
61 BufChainNode* head;
62 BufChainNode* tail;
63 uintptr cursor;
64 size_t total;
65 size_t segsz;
66} BufChain;
67
82typedef bool (*bufchainZCCB)(_Inout_ Buffer buf, size_t off, _Pre_opt_valid_ void* ctx);
83
92void bufchainInit(_Out_ BufChain* chain, size_t segsz);
93
104size_t bufchainRead(_Inout_ BufChain* chain, _Out_writes_bytes_(bytes) uint8* buf, size_t bytes);
105
116_meta_inline size_t bufchainReadBuf(_Inout_ BufChain* chain, _Inout_ Buffer buf, size_t maxbytes)
117{
118 buf->len = bufchainRead(chain, buf->data, min(buf->sz, maxbytes));
119 return buf->len;
120}
121
133size_t bufchainPeek(_Inout_ BufChain* chain, _Out_writes_bytes_(bytes) uint8* buf, size_t off,
134 size_t bytes);
135
148_meta_inline size_t bufchainPeekBuf(_Inout_ BufChain* chain, _Inout_ Buffer buf, size_t off,
149 size_t maxbytes)
150{
151 buf->len = bufchainPeek(chain, buf->data, off, min(buf->sz, maxbytes));
152 return buf->len;
153}
154
164size_t bufchainSkip(_Inout_ BufChain* chain, size_t bytes);
165
184size_t bufchainReadZC(_Inout_ BufChain* chain, size_t maxbytes, bufchainZCCB cb,
185 _Inout_opt_ void* ctx);
186
196void bufchainWrite(_Inout_ BufChain* chain, _In_reads_bytes_(bytes) const uint8* buf, size_t bytes);
197
206_meta_inline void bufchainWriteBuf(_Inout_ BufChain* chain, _In_ Buffer buf)
207{
208 bufchainWrite(chain, buf->data, buf->len);
209}
210
225_At_(*buf, _Pre_notnull_ _Post_null_) void bufchainWriteZC(BufChain* chain, _Inout_ Buffer* buf);
226
234void bufchainDestroy(_Pre_notnull_ _Post_invalid_ BufChain* chain);
235
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)
Definition bufchain.h:206
size_t bufchainPeekBuf(BufChain *chain, Buffer buf, size_t off, size_t maxbytes)
Definition bufchain.h:148
void bufchainWriteZC(BufChain *chain, Buffer *buf)
size_t bufchainSkip(BufChain *chain, size_t bytes)
size_t bufchainReadBuf(BufChain *chain, Buffer buf, size_t maxbytes)
Definition bufchain.h:116
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)
Definition bufchain.h:82