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