blob: 09e0306fec147a9a1d536bbdba57febc5dfe5945 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#ifndef RINGBUF_H_
#define RINGBUF_H_
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#include <pthread.h>
typedef struct {
uint8_t *buffer;
size_t head;
size_t tail;
size_t max;
bool full_flag;
bool finished_flag;
pthread_mutex_t mutex;
pthread_cond_t not_empty_cond;
pthread_cond_t not_full_cond;
} RingBuffer;
void RingBuffer_init(RingBuffer *self, size_t size);
void RingBuffer_destroy(RingBuffer *self);
size_t RingBuffer_size(RingBuffer *self);
size_t RingBuffer_space(RingBuffer *self);
size_t RingBuffer_write(RingBuffer *self, const uint8_t *data, size_t len);
bool RingBuffer_write_word16le(RingBuffer *self, uint16_t x);
bool RingBuffer_write_word24le(RingBuffer *self, uint32_t x);
bool RingBuffer_write_word32le(RingBuffer *self, uint32_t x);
bool RingBuffer_write_word16be(RingBuffer *self, uint16_t x);
bool RingBuffer_write_word24be(RingBuffer *self, uint32_t x);
bool RingBuffer_write_word32be(RingBuffer *self, uint32_t x);
bool RingBuffer_write_char(RingBuffer *self, uint8_t x);
size_t RingBuffer_read(RingBuffer *self, uint8_t *data, size_t len);
void RingBuffer_end(RingBuffer *self);
#endif
|