CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
bufring.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
45
46typedef struct BufRingNode BufRingNode;
47typedef struct BufRingNode {
48 BufRingNode* next;
49 Buffer buf;
50 size_t head;
51 size_t tail;
52 bool full;
53} BufRingNode;
54
55typedef struct BufRing {
56 BufRingNode* head;
57 BufRingNode* tail;
58 size_t total;
59 size_t segsz;
60} BufRing;
61
72typedef bool (*bufringZCCB)(_In_reads_bytes_(bytes) const uint8* buf, size_t bytes,
73 _Pre_opt_valid_ void* ctx);
74
89typedef size_t (*bufringFeedCB)(_Out_writes_bytes_(maxbytes) uint8* buf, size_t maxbytes,
90 _Pre_opt_valid_ void* ctx);
91
100void bufringInit(_Out_ BufRing* ring, size_t segsz);
101
112size_t bufringRead(_Inout_ BufRing* ring, _Out_writes_bytes_(bytes) uint8* buf, size_t bytes);
113
124_meta_inline size_t bufringReadBuf(_Inout_ BufRing* ring, _Inout_ Buffer buf, size_t maxbytes)
125{
126 buf->len = bufringRead(ring, buf->data, min(buf->sz, maxbytes));
127 return buf->len;
128}
129
141size_t bufringPeek(_Inout_ BufRing* ring, _Out_writes_bytes_(bytes) uint8* buf, size_t off,
142 size_t bytes);
143
156_meta_inline size_t bufringPeekBuf(_Inout_ BufRing* ring, _Inout_ Buffer buf, size_t off,
157 size_t maxbytes)
158{
159 buf->len = bufringPeek(ring, buf->data, off, min(buf->sz, maxbytes));
160 return buf->len;
161}
162
172size_t bufringSkip(_Inout_ BufRing* ring, size_t bytes);
173
192size_t bufringReadZC(_Inout_ BufRing* ring, size_t bytes, bufringZCCB cb, _Inout_opt_ void* ctx);
193
203void bufringWrite(_Inout_ BufRing* ring, _In_reads_bytes_(bytes) const uint8* buf, size_t bytes);
204
213_meta_inline void bufringWriteBuf(_Inout_ BufRing* ring, _In_ Buffer buf)
214{
215 bufringWrite(ring, buf->data, buf->len);
216}
217
233_At_(*buf,
234 _Pre_notnull_ _Post_null_) void bufringWriteZC(_Inout_ BufRing* ring, _Inout_ Buffer* buf);
235
244size_t bufringWriteSpace(_In_ BufRing* ring);
245
264size_t bufringFeed(_Inout_ BufRing* ring, bufringFeedCB feed, size_t bytes, _Inout_opt_ void* ctx);
265
273void bufringDestroy(_Pre_notnull_ _Post_invalid_ BufRing* ring);
274
Simple buffer management.
Comparison and clamping macros.
size_t bufringReadBuf(BufRing *ring, Buffer buf, size_t maxbytes)
Definition bufring.h:124
void bufringWrite(BufRing *ring, const uint8 *buf, size_t bytes)
size_t bufringPeekBuf(BufRing *ring, Buffer buf, size_t off, size_t maxbytes)
Definition bufring.h:156
size_t bufringSkip(BufRing *ring, size_t bytes)
bool(* bufringZCCB)(const uint8 *buf, size_t bytes, void *ctx)
Definition bufring.h:72
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)
Definition bufring.h:213
size_t(* bufringFeedCB)(uint8 *buf, size_t maxbytes, void *ctx)
Definition bufring.h:89
size_t bufringPeek(BufRing *ring, uint8 *buf, size_t off, size_t bytes)
size_t bufringRead(BufRing *ring, uint8 *buf, 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)