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