* \return A 'cookie' which identifies the ringbuffer just created and
* which must be passed to ringbuffer_add() and ringbuffer_get().
*/
-void *ringbuffer_new(unsigned size)
+struct ringbuffer *ringbuffer_new(unsigned size)
{
struct ringbuffer *rb = para_calloc(sizeof(struct ringbuffer));
rb->entries = para_calloc(size * sizeof(void *));
/**
* Add one entry to a ringbuffer.
*
- * \param cookie The ringbuffer identifier.
+ * \param rb The ringbuffer identifier.
* \param data The data to be inserted.
*
* Insert \a data into the ringbuffer associated with \a cookie. As soon as
* \return The old \a data pointer which is going to be disregarded, or
* NULL if the ringbuffer is not yet full.
*/
-void *ringbuffer_add(void *cookie, void *data)
+void *ringbuffer_add(struct ringbuffer *rb, void *data)
{
- struct ringbuffer *rb = cookie;
void *ret = rb->entries[rb->head];
rb->entries[rb->head] = data;
rb->head = (rb->head + 1) % rb->size;
/**
* Get one entry from a ringbuffer.
*
- * \param cookie The ringbuffer identifier.
+ * \param rb The ringbuffer identifier.
* \param num The number of the entry.
*
* \return A pointer to data previously added, or NULL if entry number
* \a num is not available. \a num counts backwards from zero, i.e.
* ringbuffer_get_entry(0) gets the entry which was added most recently.
*/
-void *ringbuffer_get(void *cookie, int num)
+void *ringbuffer_get(struct ringbuffer *rb, int num)
{
- struct ringbuffer *rb = cookie;
int pos = (rb->head + rb->size - 1 - num) % rb->size;
// fprintf(stderr, "pos = %d\n", pos);
return rb->entries[pos];
/**
* Get the number of entries in the ring buffer.
*
- * \param cookie The ringbuffer identifier
+ * \param rb The ringbuffer identifier
*
* This function always succeeds and never returns a number greater than the
* size of the ring buffer.
*/
-unsigned ringbuffer_filled(void *cookie)
+unsigned ringbuffer_filled(struct ringbuffer *rb)
{
- struct ringbuffer *rb = cookie;
return rb->filled;
}
*/
/** \file ringbuffer.h Exported symbols from ringbuffer.c. */
-void *ringbuffer_new(unsigned size);
-void *ringbuffer_add(void *cookie, void *data);
-void *ringbuffer_get(void *cookie, int num);
-unsigned ringbuffer_filled(void *cookie);
+struct ringbuffer;
+
+struct ringbuffer *ringbuffer_new(unsigned size);
+void *ringbuffer_add(struct ringbuffer *rb, void *data);
+void *ringbuffer_get(struct ringbuffer *rb, int num);
+unsigned ringbuffer_filled(struct ringbuffer *rb);