ringbuffer: add convenience functions

This patch add `peek` functionality, and empty and full helpers.
dev/timer
René Kijewski 9 years ago
parent aaa95a281a
commit 67856d63d9

@ -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 */

@ -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;
}

Loading…
Cancel
Save