master
h 46 lines 1.45 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #ifndef RINGBUFFER_H
4 #define RINGBUFFER_H
5 #include "../libnetdata.h"
6
7 typedef struct rbuf *rbuf_t;
8
9 rbuf_t rbuf_create(size_t size);
10 void rbuf_free(rbuf_t buffer);
11 void rbuf_flush(rbuf_t buffer);
12
13 /* /param bytes how much bytes can be copied into pointer returned
14 * /return pointer where data can be copied to or NULL if buffer full
15 */
16 char *rbuf_get_linear_insert_range(rbuf_t buffer, size_t *bytes);
17 char *rbuf_get_linear_read_range(rbuf_t buffer, size_t *bytes);
18
19 int rbuf_bump_head(rbuf_t buffer, size_t bytes);
20 int rbuf_bump_tail(rbuf_t buffer, size_t bytes);
21
22 /* @param buffer related buffer instance
23 * @returns total capacity of buffer in bytes (not free/used)
24 */
25 size_t rbuf_get_capacity(rbuf_t buffer);
26
27 /* @param buffer related buffer instance
28 * @returns count of bytes stored in the buffer
29 */
30 size_t rbuf_bytes_available(rbuf_t buffer);
31
32 /* @param buffer related buffer instance
33 * @returns count of bytes available/free in the buffer (how many more bytes you can store in this buffer)
34 */
35 size_t rbuf_bytes_free(rbuf_t buffer);
36
37 /* writes as many bytes from `data` into the `buffer` as possible
38 * but maximum `len` bytes
39 */
40 size_t rbuf_push(rbuf_t buffer, const char *data, size_t len);
41 size_t rbuf_pop(rbuf_t buffer, char *data, size_t len);
42
43 char *rbuf_find_bytes(rbuf_t buffer, const char *needle, size_t needle_bytes, int *found_idx);
44 int rbuf_memcmp_n(rbuf_t buffer, const char *to_cmp, size_t to_cmp_bytes);
45
46 #endif