|
|
| version 1.4.4.2, 2026/02/10 17:24:39 | version 1.8, 2026/02/18 01:34:17 |
|---|---|
| Line 54 typedef struct { | Line 54 typedef struct { |
| int rb_bufnum; | int rb_bufnum; |
| struct iovec *rb_buffer; | struct iovec *rb_buffer; |
| } ringbuf_t; | } ringbuf_t; |
| #define rbuf_head(x) atomic_load_explicit((atomic_int*) &(x)->rb_head, memory_order_relaxed) | |
| #define rbuf_tail(x) atomic_load_explicit((atomic_int*) &(x)->rb_tail, memory_order_relaxed) | |
| #define rbuf_hptr(x) ((x)->rb_buffer + rbuf_head((x))) | |
| #define rbuf_tptr(x) ((x)->rb_buffer + rbuf_tail((x))) | |
| #define rbuf_ptr(x, n) ((x)->rb_buffer + ((rbuf_tail((x)) + (n)) % (x)->rb_bufnum)) | |
| #define rbuf_num(x) ((x)->rb_bufnum) | |
| #define rbuf_getb(x) ((x)->rb_buffer) | |
| #define rbuf_get(x, n) *rbuf_ptr((x), (n)) | |
| #define rbuf_isrewind(x) (rbuf_head((x)) < rbuf_tail((x))) | |
| #define rbuf_queued(x, r) do { \ | |
| u_int _h, _t; \ | |
| _t = atomic_load_explicit((atomic_int*) &(x)->rb_tail, memory_order_acquire); \ | |
| _h = atomic_load_explicit((atomic_int*) &(x)->rb_head, memory_order_relaxed); \ | |
| if (_h == _t) \ | |
| (r) = 0; \ | |
| else \ | |
| (r) = (_h + (x)->rb_bufnum - _t) % (x)->rb_bufnum; \ | |
| } while (0) | |
| #define rbuf_unused(x, r) do { \ | |
| u_int _r; \ | |
| rbuf_queued((x), _r); \ | |
| (r) = (x)->rb_bufnum - _r; \ | |
| } while (0) | |
| typedef struct { | typedef struct { |
| E_ATOMIC_ALIGN unsigned int lrb_head; | E_ATOMIC_ALIGN unsigned int lrb_head; |
| E_ATOMIC_ALIGN unsigned int lrb_tail; | E_ATOMIC_ALIGN unsigned int lrb_tail; |
| Line 62 typedef struct { | Line 86 typedef struct { |
| int lrb_size; | int lrb_size; |
| unsigned char *lrb_data; | unsigned char *lrb_data; |
| } lrbuf_t; | } lrbuf_t; |
| #define lrb_head(x) atomic_load_explicit((atomic_int*) &(x)->lrb_head, memory_order_relaxed) | |
| #define lrb_tail(x) atomic_load_explicit((atomic_int*) &(x)->lrb_tail, memory_order_relaxed) | |
| #define lrb_hptr(x) ((x)->lrb_data + lrb_head((x))) | |
| #define lrb_tptr(x) ((x)->lrb_data + lrb_tail((x))) | |
| #define lrb_ptr(x, n) ((x)->lrb_data + ((lrb_tail((x)) + (n)) % (x)->lrb_size)) | |
| #define lrb_size(x) ((x)->lrb_size) | |
| #define lrb_getb(x) ((x)->lrb_data) | |
| #define lrb_getc(x, n) *lrb_ptr((x), (n)) | |
| #define lrb_isrewind(x) (lrb_head((x)) < lrb_tail((x))) | |
| #define lrb_queued(x, r) do { \ | #define lrb_queued(x, r) do { \ |
| u_int _h, _t; \ | u_int _h, _t; \ |
| _t = atomic_load_explicit((atomic_int*) &(x)->lrb_tail, memory_order_acquire); \ | _t = atomic_load_explicit((atomic_int*) &(x)->lrb_tail, memory_order_acquire); \ |
| Line 190 int lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, | Line 223 int lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, |
| * return: -1 error, 0 buffer is empty or >0 stored data bytes | * return: -1 error, 0 buffer is empty or >0 stored data bytes |
| */ | */ |
| int lrb_dequeue(lrbuf_t *lrb, void *data, size_t len); | int lrb_dequeue(lrbuf_t *lrb, void *data, size_t len); |
| /* | |
| * lrb_getw() - Get address for write | |
| * | |
| * @lrb = Linear ring buffer | |
| * @len = Return available buffer length for write | |
| * return: NULL error or !=NULL pointer for write | |
| * remark: After use of lrb_getw() and write to pointer. | |
| * You should update ring buffer with lrb_enqueue(,NULL,wrote_len,) | |
| */ | |
| void *lrb_getw(lrbuf_t *lrb, size_t *len); | |
| /* | |
| * lrb_getr() - Get address for read | |
| * | |
| * @lrb = Linear ring buffer | |
| * @len = Return available data length for read | |
| * return: NULL error or !=NULL pointer for read | |
| * remark: After use of lrb_getr() and read from pointer. | |
| * You could update ring buffer with lrb_dequeue(,NULL,read_len) | |
| */ | |
| void *lrb_getr(lrbuf_t *lrb, size_t *len); | |
| #endif | #endif |