diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2010-01-06 22:36:29 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2010-01-06 22:36:29 +0100 |
commit | 174afdb2c0eb0e418980c1fa1c0afe41277b5b4d (patch) | |
tree | 55a2901196983c31017dac6e4fa0f35e43dadd5e /lf_ring_buffer.h | |
parent | 80b8ee53cbf9e69f6831124f469358aa7d4e97d4 (diff) | |
download | lock_free-174afdb2c0eb0e418980c1fa1c0afe41277b5b4d.zip lock_free-174afdb2c0eb0e418980c1fa1c0afe41277b5b4d.tar.gz |
lf_ring_buffer is almost good + tests
Diffstat (limited to 'lf_ring_buffer.h')
-rw-r--r-- | lf_ring_buffer.h | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/lf_ring_buffer.h b/lf_ring_buffer.h index e9a5727..a7c7786 100644 --- a/lf_ring_buffer.h +++ b/lf_ring_buffer.h @@ -32,6 +32,8 @@ extern "C" { # endif /* __cplusplus */ +#include "lf_ring_buffer_data.h" + #define BACKOFF_DELAY_INIT 1000 #define BACKOFF_DELAY_INC 3000 #define BACKOFF_DELAY_MAX 90000 @@ -39,27 +41,15 @@ extern "C" { #define NO_BLOCK 1 /* if buffer is full, leave instead of try again and again */ #define IS_NOT_BLOCKING( flags ) ( (flags)&NO_BLOCK ) -#define RB_DATA_SIZE 63 -typedef char rb_data_t; - -typedef struct buffer_el { - char status; - rb_data_t data[RB_DATA_SIZE]; -} lf_buffer_el_t; - typedef struct ring_buffer { - lf_buffer_el_t *buffer; /* buffer data */ - int n_buf; /* number of buffers */ - int read_from; /* index where to read data from */ - int write_to; /* index where to write data to */ - int write_delay; /* backoff nanosleep to reduce fast looping when writing */ - int read_delay; /* backoff nanosleep to reduce fast looping when reading */ + LFRB_BUFFER_TYPE *buffer; /* buffer data */ + int n_buf; /* number of buffers */ + int read_from; /* index where to read data from */ + int write_to; /* index where to write data to */ + int write_delay; /* backoff nanosleep to reduce fast looping when writing */ + int read_delay; /* backoff nanosleep to reduce fast looping when reading */ } lf_ring_buffer_t; -#define IS_AVAILABLE( idx ) (r->buffer[(idx)].status==0) -#define MARK_AS_FILLED( idx ) { r->buffer[(idx)].status=1; } -#define MARK_AS_READ( idx ) { r->buffer[(idx)].status=0; } - /* return an initialized lf_ring_buffer_t struct */ lf_ring_buffer_t* lf_ring_buffer_create( int n_buf ); @@ -70,13 +60,13 @@ void lf_ring_buffer_destroy( lf_ring_buffer_t *r ); * return 0 on success * return -1 if IS_NOT_BLOCKING and buffer is full */ -int lf_ring_buffer_write( lf_ring_buffer_t *r, rb_data_t *data, int flags ); +int lf_ring_buffer_write( lf_ring_buffer_t *r, void *data, int flags ); /* read data from the ring buffer * return 0 on success * return -1 if IS_NOT_BLOCKING and buffer is empty */ -int lf_ring_buffer_read( lf_ring_buffer_t *r, rb_data_t *data, int flags ); +int lf_ring_buffer_read( lf_ring_buffer_t *r, void *data, int flags ); # ifdef __cplusplus } |