#ifndef _RINGBUFFER_H #define _RINGBUFFER_H #include typedef struct { char *buf; size_t len; } ringbuffer_data_t ; typedef struct { char *buf; volatile size_t write_ptr; volatile size_t read_ptr; size_t size; size_t size_mask; int mlocked; } ringbuffer_t ; ringbuffer_t *ringbuffer_create(int sz); void ringbuffer_free(ringbuffer_t *rb); int ringbuffer_mlock(ringbuffer_t *rb); void ringbuffer_reset(ringbuffer_t *rb); void ringbuffer_write_advance(ringbuffer_t *rb, size_t cnt); void ringbuffer_read_advance(ringbuffer_t *rb, size_t cnt); size_t ringbuffer_write_space(ringbuffer_t *rb); size_t ringbuffer_read_space(ringbuffer_t *rb); size_t ringbuffer_read(ringbuffer_t *rb, char *dest, size_t cnt); size_t ringbuffer_write(ringbuffer_t *rb, char *src, size_t cnt); void ringbuffer_get_read_vector(ringbuffer_t *rb, ringbuffer_data_t *vec); void ringbuffer_get_write_vector(ringbuffer_t *rb, ringbuffer_data_t *vec); #endif