diff options
Diffstat (limited to 'c/src/exec')
-rw-r--r-- | c/src/exec/libcsupport/include/ringbuf.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/c/src/exec/libcsupport/include/ringbuf.h b/c/src/exec/libcsupport/include/ringbuf.h new file mode 100644 index 0000000000..b2494c1527 --- /dev/null +++ b/c/src/exec/libcsupport/include/ringbuf.h @@ -0,0 +1,42 @@ +/* + * ringbuf.h + * + * This file provides simple ring buffer functionality. + * + * $Id$ + */ + +#ifndef __RINGBUF_H__ +#define __RINGBUF_H__ + +#ifndef RINGBUF_QUEUE_LENGTH +#define RINGBUF_QUEUE_LENGTH 200 +#endif + +typedef struct { + char buffer[RINGBUF_QUEUE_LENGTH]; + int head; + int tail; +} Ring_buffer_t; + +#define Ring_buffer_Initialize( _buffer ) \ + do { \ + (_buffer)->head = (_buffer)->tail = 0; \ + } while ( 0 ) + +#define Ring_buffer_Is_empty( _buffer ) \ + ( (_buffer)->head == (_buffer)->tail ) + +#define Ring_buffer_Add_character( _buffer, _ch ) \ + do { \ + (_buffer)->buffer[ (_buffer)->tail ] = (_ch); \ + (_buffer)->tail = ((_buffer)->tail+1) % RINGBUF_QUEUE_LENGTH; \ + } while ( 0 ) + +#define Ring_buffer_Remove_character( _buffer, _ch ) \ + do { \ + (_ch) = (_buffer)->buffer[ (_buffer)->head ]; \ + (_buffer)->head = ((_buffer)->head+1) % RINGBUF_QUEUE_LENGTH; \ + } while ( 0 ) + +#endif |