From ac55496d881e0a17b3eff85f1faae5aafbc53b50 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 22 Jul 2020 17:30:45 +0200 Subject: erster Commit --- ringbuff.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ringbuff.c (limited to 'ringbuff.c') diff --git a/ringbuff.c b/ringbuff.c new file mode 100644 index 0000000..99dc0d8 --- /dev/null +++ b/ringbuff.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include "util.h" + +typedef int T; + +struct ring_buffer { + int head, tail; + T array[8]; /* fit for your needs... */ +}; + +void +ring_init(struct ring_buffer *rb) +{ + rb->head = rb->tail = 0; +} + +bool +ring_put(struct ring_buffer *rb, T data) +{ + const int next = (rb->head + 1) % NELEM(rb->array); + + if ( next == rb->tail ) + return false; + + rb->array[rb->head] = data; + rb->head = next; + + return true; +} + +bool +ring_get(struct ring_buffer *rb, T *data) +{ + if ( rb->head == rb->tail ) + return false; + + const int next = (rb->tail + 1) % NELEM(rb->array); + + *data = rb->array[rb->tail]; + rb->tail = next; + + return true; +} + +void f() { ERROR(""); } + +int +main(void) +{ +#if 0 + struct ring_buffer rb; + ring_init(&rb); +#else + struct ring_buffer rb = { .head = 0, .tail = 0 }; +#endif + + for ( int i = 0; i != 30; ++i ) { + if ( !ring_put(&rb, i) ) + break; + } + + int j; + while ( ring_get(&rb, &j) ) { + printf("%d\n", j); + } + + return EXIT_SUCCESS; +} + + -- cgit v1.3