00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _RINGBUFFER_H
00023 #define _RINGBUFFER_H
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029 #include <sys/types.h>
00030
00045 typedef struct
00046 {
00047 char *buf;
00048 size_t len;
00049 }
00050 jack_ringbuffer_data_t ;
00051
00052 typedef struct
00053 {
00054 char *buf;
00055 volatile size_t write_ptr;
00056 volatile size_t read_ptr;
00057 size_t size;
00058 size_t size_mask;
00059 int mlocked;
00060 }
00061 jack_ringbuffer_t ;
00062
00073 jack_ringbuffer_t *jack_ringbuffer_create(size_t sz);
00074
00081 void jack_ringbuffer_free(jack_ringbuffer_t *rb);
00082
00103 void jack_ringbuffer_get_read_vector(const jack_ringbuffer_t *rb,
00104 jack_ringbuffer_data_t *vec);
00105
00125 void jack_ringbuffer_get_write_vector(const jack_ringbuffer_t *rb,
00126 jack_ringbuffer_data_t *vec);
00127
00138 size_t jack_ringbuffer_read(jack_ringbuffer_t *rb, char *dest, size_t cnt);
00139
00155 size_t jack_ringbuffer_peek(jack_ringbuffer_t *rb, char *dest, size_t cnt);
00156
00168 void jack_ringbuffer_read_advance(jack_ringbuffer_t *rb, size_t cnt);
00169
00177 size_t jack_ringbuffer_read_space(const jack_ringbuffer_t *rb);
00178
00186 int jack_ringbuffer_mlock(jack_ringbuffer_t *rb);
00187
00195 void jack_ringbuffer_reset(jack_ringbuffer_t *rb);
00196
00206 size_t jack_ringbuffer_write(jack_ringbuffer_t *rb, const char *src,
00207 size_t cnt);
00208
00220 void jack_ringbuffer_write_advance(jack_ringbuffer_t *rb, size_t cnt);
00221
00229 size_t jack_ringbuffer_write_space(const jack_ringbuffer_t *rb);
00230
00231
00232 #ifdef __cplusplus
00233 }
00234 #endif
00235
00236 #endif