xref: /haiku/headers/private/kernel/util/ring_buffer.h (revision a4ef4a49150f118d47324242917a596a3f8f8bd5)
1 /*
2  * Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef RING_BUFFER_H
6 #define RING_BUFFER_H
7 
8 
9 #include <OS.h>
10 
11 
12 struct ring_buffer {
13 	int32		first;
14 	int32		in;
15 	int32		size;
16 	uint8		buffer[0];
17 };
18 
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 struct ring_buffer *create_ring_buffer(size_t size);
25 void delete_ring_buffer(struct ring_buffer *buffer);
26 
27 void ring_buffer_clear(struct ring_buffer *buffer);
28 size_t ring_buffer_readable(struct ring_buffer *buffer);
29 size_t ring_buffer_writable(struct ring_buffer *buffer);
30 void ring_buffer_flush(struct ring_buffer *buffer, size_t bytes);
31 size_t ring_buffer_read(struct ring_buffer *buffer, uint8 *data, ssize_t length);
32 size_t ring_buffer_write(struct ring_buffer *buffer, const uint8 *data, ssize_t length);
33 ssize_t ring_buffer_user_read(struct ring_buffer *buffer, uint8 *data, ssize_t length);
34 ssize_t ring_buffer_user_write(struct ring_buffer *buffer, const uint8 *data, ssize_t length);
35 
36 #ifdef __cplusplus
37 }
38 #endif
39 
40 #endif	/* RING_BUFFER_H */
41