From 67856d63d93f6b1f0e8a62ee4a2df9b78961fc9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Kijewski?= <rene.kijewski@fu-berlin.de> Date: Sat, 3 May 2014 18:56:48 +0200 Subject: [PATCH] ringbuffer: add convenience functions This patch add `peek` functionality, and empty and full helpers. --- sys/include/ringbuffer.h | 14 ++++++++++++++ sys/lib/ringbuffer.c | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/sys/include/ringbuffer.h b/sys/include/ringbuffer.h index 97bccb5544..93522d08f0 100644 --- a/sys/include/ringbuffer.h +++ b/sys/include/ringbuffer.h @@ -12,6 +12,7 @@ * @{ * @file ringbuffer.h * @author Kaspar Schleiser <kaspar@schleiser.de> + * @author René Kijewski <rene.kijewski@fu-berlin.de> * @} */ @@ -32,4 +33,17 @@ void ringbuffer_add(ringbuffer_t *rb, char *buf, int n); int ringbuffer_get_one(ringbuffer_t *rb); int ringbuffer_get(ringbuffer_t *rb, char *buf, int n); +static inline int ringbuffer_empty(ringbuffer_t *rb) +{ + return rb->avail == 0; +} + +static inline int ringbuffer_full(ringbuffer_t *rb) +{ + return rb->avail == rb->size; +} + +int ringbuffer_peek_one(ringbuffer_t *rb); +int ringbuffer_peek(ringbuffer_t *rb, char *buf, unsigned n); + #endif /* __RINGBUFFER_H */ diff --git a/sys/lib/ringbuffer.c b/sys/lib/ringbuffer.c index 85bd8a0d36..fc7055d8ff 100644 --- a/sys/lib/ringbuffer.c +++ b/sys/lib/ringbuffer.c @@ -75,3 +75,19 @@ int ringbuffer_get(ringbuffer_t *rb, char *buf, int n) return count; } + +int ringbuffer_peek_one(ringbuffer_t *rb) +{ + unsigned end = rb->end, start = rb->start, avail = rb->avail; + int result = ringbuffer_get_one(rb); + rb->end = end, rb->start = start, rb->avail = avail; + return result; +} + +int ringbuffer_peek(ringbuffer_t *rb, char *buf, unsigned n) +{ + unsigned end = rb->end, start = rb->start, avail = rb->avail; + int result = ringbuffer_get(rb, buf, n); + rb->end = end, rb->start = start, rb->avail = avail; + return result; +} -- GitLab