ringbuf.h 688 B

1234567891011121314151617181920212223242526
  1. #ifndef _RINGBUF_H_
  2. #define _RINGBUF_H_
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <assert.h>
  7. /* simple ring buffer */
  8. typedef struct _ringbuf {
  9. size_t n; /* allocd size */
  10. size_t u; /* used space */
  11. size_t i; /* input pos */
  12. size_t o; /* output pos */
  13. char d[]; /* C99 flexible array member */
  14. } ringbuf;
  15. ringbuf *ringbuf_new(size_t sz);
  16. int ringbuf_put(ringbuf *r, const void *data, size_t len);
  17. size_t ringbuf_get_pending_size(ringbuf *r);
  18. size_t ringbuf_get_next_chunk(ringbuf *r, char **data);
  19. void ringbuf_mark_consumed(ringbuf *r, size_t len);
  20. void ringbuf_free(ringbuf *r);
  21. void ringbuf_clear(ringbuf *r);
  22. #endif /* _RINGBUF_H_ */