You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.3 KiB
45 lines
1.3 KiB
6 years ago
|
/*
|
||
|
* Implementation of a simple circular buffer data structure.
|
||
|
* Based on the example and guide found here:
|
||
|
* https://embeddedartistry.com/blog/2017/4/6/circular-buffers-in-cc
|
||
|
*/
|
||
|
#ifndef CIRC_BUFF_H_
|
||
|
#define CIRC_BUFF_H_
|
||
|
|
||
|
#include <stdbool.h>
|
||
|
|
||
|
// Circular buffer structure
|
||
|
typedef struct circ_buf_t circ_buf_t;
|
||
|
// and handle type
|
||
|
typedef circ_buf_t* cbuf_handle_t;
|
||
|
|
||
|
// Initializes a circular buffer structure and returns the circular buffer handle.
|
||
|
// Pass in a storage buffer and size.
|
||
|
cbuf_handle_t circ_buf_init(char** buffer, size_t size);
|
||
|
|
||
|
// Frees a circular buffer structure. Does not free data buffer!
|
||
|
void circ_buf_free(cbuf_handle_t cbuf);
|
||
|
|
||
|
// Resets the circular buffer to empty, head == tail. Data not cleared!
|
||
|
void circ_buf_reset(cbuf_handle_t cbuf);
|
||
|
|
||
|
// Adds data, even if the buffer is full. Old data is overwritten.
|
||
|
void circ_buf_put(cbuf_handle_t cbuf, char data);
|
||
|
|
||
|
// Retrieves a value from the buffer.
|
||
|
int circ_buf_get(cbuf_handle_t cbuf, char* data);
|
||
|
|
||
|
// Checks if the buffer is empty.
|
||
|
bool circ_buf_empty(cbuf_handle_t cbuf);
|
||
|
|
||
|
// Checks if the buffer is full.
|
||
|
bool circ_buf_full(cbuf_handle_t cbuf);
|
||
|
|
||
|
// Checks the capacity of the buffer.
|
||
|
size_t circ_buf_capacity(cbuf_handle_t cbuf);
|
||
|
|
||
|
// Checks the number of elements stored in the buffer.
|
||
|
size_t circ_buf_size(cbuf_handle_t cbuf);
|
||
|
|
||
|
#endif //CIRC_BUFF_H_
|