8.3. circular_buffer — Circular buffer

Source code: src/collections/circular_buffer.h, src/collections/circular_buffer.c

Test code: tst/collections/circular_buffer/main.c

Test coverage: src/collections/circular_buffer.c


Functions

int circular_buffer_init(struct circular_buffer_t *self_p, void *buf_p, size_t size)

Initialize given circular buffer.

Return
zero(0) or negative error code.
Parameters
  • self_p: Circular buffer to initialize.
  • buf_p: Memory buffer.
  • size: Size of the memory buffer.

ssize_t circular_buffer_write(struct circular_buffer_t *self_p, const void *buf_p, size_t size)

Write data to given circular buffer.

Return
Number of bytes written or negative error code.
Parameters
  • self_p: Circular buffer.
  • buf_p: Memory buffer to write.
  • size: Size of the memory buffer.

ssize_t circular_buffer_read(struct circular_buffer_t *self_p, void *buf_p, size_t size)

Read data from given circular buffer.

Return
Number of bytes read or negative error code. The buffer is empty if zero(0) is returned.
Parameters
  • self_p: Circular buffer to free to.
  • buf_p: Memory buffer to read into.
  • size: Size of the memory buffer.

ssize_t circular_buffer_used_size(struct circular_buffer_t *self_p)

Returns the number of used bytes in given circular buffer.

Return
Number of used bytes.
Parameters
  • self_p: Circular buffer.

ssize_t circular_buffer_unused_size(struct circular_buffer_t *self_p)

Returns the number of unused bytes in given circular buffer.

Return
Number of unused bytes.
Parameters
  • self_p: Circular buffer.

ssize_t circular_buffer_skip_front(struct circular_buffer_t *self_p, size_t size)

Skip given number of written bytes at the front of the buffer.

Return
Number of skipped bytes or negative error code.
Parameters
  • self_p: Circular buffer.
  • size: Number of bytes to skip.

ssize_t circular_buffer_reverse_skip_back(struct circular_buffer_t *self_p, size_t size)

Skip given number of written bytes at the back of the buffer.

Return
Number of skipped bytes or negative error code.
Parameters
  • self_p: Circular buffer.
  • size: Number of bytes to skip.

ssize_t circular_buffer_array_one(struct circular_buffer_t *self_p, void **buf_pp, size_t size)

Get a pointer to the next byte to read from the buffer. Use circular_buffer_array_two() to get the second array, if there is a wrap around.

Return
Number of bytes in array or negative error code.
Parameters
  • self_p: Circular buffer.
  • buf_pp: A poitner to the start of the array. Only valid if the return value is greater than zero(0).
  • size: Number of bytes asked for.

ssize_t circular_buffer_array_two(struct circular_buffer_t *self_p, void **buf_pp, size_t size)

Get a pointer to the next byte to read from the buffer, following a wrap around.

Return
Number of bytes in array or negative error code.
Parameters
  • self_p: Circular buffer.
  • buf_pp: A poitner to the start of the array. Only valid if the return value is greater than zero(0).
  • size: Number of bytes asked for.

struct circular_buffer_t
#include <circular_buffer.h>

Public Members

char *buf_p
size_t size
size_t writepos
size_t readpos