master
h 36 lines 1.28 KB
Raw
1 #ifndef CIRCULAR_BUFFER_H
2 #define CIRCULAR_BUFFER_H 1
3
4 #include <string.h>
5
6 struct circular_buffer {
7 size_t size, write, read, max_size;
8 size_t *statistics;
9 char *data;
10 };
11
12 // Allocation/deallocation functions
13 struct circular_buffer *cbuffer_new(size_t initial, size_t max, size_t *statistics);
14 void cbuffer_free(struct circular_buffer *buf);
15
16 // Static allocation support
17 void cbuffer_init(struct circular_buffer *buf, size_t initial, size_t max, size_t *statistics);
18 void cbuffer_cleanup(struct circular_buffer *buf);
19
20 // Buffer operations
21 int cbuffer_add_unsafe(struct circular_buffer *buf, const char *d, size_t d_len);
22 void cbuffer_remove_unsafe(struct circular_buffer *buf, size_t num);
23 size_t cbuffer_next_unsafe(struct circular_buffer *buf, char **start);
24 size_t cbuffer_available_size_unsafe(struct circular_buffer *buf);
25 void cbuffer_flush(struct circular_buffer *buf);
26
27 // Reserve/commit operations for direct buffer access
28 char *cbuffer_reserve_unsafe(struct circular_buffer *buf, size_t size);
29 void cbuffer_commit_reserved_unsafe(struct circular_buffer *buf, size_t size);
30
31 // Check if a size is wrapped in buffer and unwrap if necessary
32 bool cbuffer_ensure_unwrapped_size(struct circular_buffer *buf, size_t size);
33
34 size_t cbuffer_used_size_unsafe(struct circular_buffer *buf);
35
36 #endif