ringbuffer.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. *
  3. * Copyright: SPDX-License-Identifier: LGPL-3.0-only
  4. *
  5. * Author: Timotej Šiškovič <timotejs@gmail.com>
  6. *
  7. */
  8. #ifndef RINGBUFFER_H
  9. #define RINGBUFFER_H
  10. #include <stddef.h>
  11. typedef struct rbuf_t *rbuf_t;
  12. rbuf_t rbuf_create(size_t size);
  13. void rbuf_free(rbuf_t buffer);
  14. void rbuf_flush(rbuf_t buffer);
  15. /* /param bytes how much bytes can be copied into pointer returned
  16. * /return pointer where data can be copied to or NULL if buffer full
  17. */
  18. char *rbuf_get_linear_insert_range(rbuf_t buffer, size_t *bytes);
  19. char *rbuf_get_linear_read_range(rbuf_t buffer, size_t *bytes);
  20. int rbuf_bump_head(rbuf_t buffer, size_t bytes);
  21. int rbuf_bump_tail(rbuf_t buffer, size_t bytes);
  22. /* @param buffer related buffer instance
  23. * @returns total capacity of buffer in bytes (not free/used)
  24. */
  25. size_t rbuf_get_capacity(rbuf_t buffer);
  26. /* @param buffer related buffer instance
  27. * @returns count of bytes stored in the buffer
  28. */
  29. size_t rbuf_bytes_available(rbuf_t buffer);
  30. /* @param buffer related buffer instance
  31. * @returns count of bytes available/free in the buffer (how many more bytes you can store in this buffer)
  32. */
  33. size_t rbuf_bytes_free(rbuf_t buffer);
  34. /* writes as many bytes from `data` into the `buffer` as possible
  35. * but maximum `len` bytes
  36. */
  37. size_t rbuf_push(rbuf_t buffer, const char *data, size_t len);
  38. size_t rbuf_pop(rbuf_t buffer, char *data, size_t len);
  39. char *rbuf_find_bytes(rbuf_t buffer, const char *needle, size_t needle_bytes, int *found_idx);
  40. int rbuf_memcmp_n(rbuf_t buffer, const char *to_cmp, size_t to_cmp_bytes);
  41. #endif