]> git.lizzy.rs Git - nothing.git/blob - src/ring_buffer.h
8728e21630d4b35890cef0cb139138170241ff39
[nothing.git] / src / ring_buffer.h
1 #ifndef RING_BUFFER_H_
2 #define RING_BUFFER_H_
3
4 #include <assert.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <stdint.h>
8 #include <string.h>
9
10 typedef void (*RingBufferDtor)(void *element);
11
12 typedef struct {
13     size_t element_size;
14     size_t capacity;
15     size_t count;
16     size_t begin;
17     uint8_t *data;
18 } RingBuffer;
19
20 static inline
21 RingBuffer create_ring_buffer_from_buffer(Memory *memory,
22                                           size_t element_size,
23                                           size_t capacity)
24 {
25     RingBuffer result = {0};
26     result.element_size = element_size;
27     result.capacity = capacity;
28     result.data = memory_alloc(memory, result.element_size * result.capacity);
29     return result;
30 }
31
32 void ring_buffer_push(RingBuffer *buffer, void *element);
33 int ring_buffer_pop(RingBuffer *buffer);
34 void *ring_buffer_top(RingBuffer *buffer);
35
36 #endif  // RING_BUFFER_H_