Compare commits

...

2 commits

Author SHA1 Message Date
Imbus
41f817fd5b rb_clear initial 2024-07-02 05:50:59 +02:00
Imbus
d19917bba7 Formatting 2024-07-02 05:50:47 +02:00
2 changed files with 23 additions and 6 deletions

View file

@ -45,6 +45,14 @@ rb_destroy(struct RingBuf *rb, void(free)())
free(rb->buffer);
}
void
rb_clear(struct RingBuf *rb)
{
rb->count = 0;
rb->write_head = rb->buffer;
rb->read_head = rb->buffer;
}
enum WriteResult
rb_push_back(struct RingBuf *rb, const void *item, MEMCPY_T memcpy_fn)
{

View file

@ -39,6 +39,14 @@ enum ReadResult { Empty, ReadOk }; /** Result of a read */
void rb_init(struct RingBuf *rb, rb_size_t capacity, ALLOC_T alloc,
rb_size_t struct_size);
/**
* @brief Clear the ring buffer
* @details This function will reset the read and write heads to the beginning
* of the buffer, and set the count to 0. It will not free the buffer.
* @param rb The ring buffer
*/
void rb_clear(struct RingBuf *rb);
/**
* @brief Insert data to the ring buffer
* @param rb The ring buffer
@ -51,17 +59,17 @@ enum WriteResult rb_push_back(struct RingBuf *rb, const void *item,
/**
* @brief Insert multiple data to the ring buffer
*
*
* @details This function is more efficient than calling rb_push_back multiple
* times. It only advances the write head once, and attempts to write all the
* memory in one go.
*
* memory in one go.
*
* If n is greater than the capacity, it will return Full.
* If the full write will overflow, it will wrap around.
*
*
* If the buffer is full, it will return Full and not write
* anything.
*
*
* @param rb The ring buffer
* @param items The items to insert
* @param memcpy_fn The memcpy function
@ -77,7 +85,8 @@ enum WriteResult rb_push_many(struct RingBuf *rb, const void *items,
* @param item The item to read into
* @return ReadResult
*/
enum ReadResult rb_pop_front(struct RingBuf *rb, void *item, MEMCPY_T memcpy_fn);
enum ReadResult rb_pop_front(struct RingBuf *rb, void *item,
MEMCPY_T memcpy_fn);
/**
* @brief Free the ring buffer