/*
 * ringbuffer.h
 *
 *  Created on: Jul 24, 2012
 *      Author: tkl
 */

#ifndef RINGBUFFER_H_
#define RINGBUFFER_H_

//-----------------------------------------------------------------------------
//! \brief A ring buffer object.
struct ringbuffer {
	char *buffer;	//!< The buffer.
	char *read;		//!< Read access.
	char *write;	//!< Write access.
	int size;		//!< Buffer size.
	int used;		//!< Buffer in use.
};

//-----------------------------------------------------------------------------
//! \brief Read out n characters from ring buffer.
//! \param this The ring buffer to read from.
//! \param buffer to read to.
//! \param size The maximum number of characters to read.
//! \retval -1 in error case, otherwise the number of read characters.
int ringbuffer_read(struct ringbuffer *this, char *buffer, int size);

//-----------------------------------------------------------------------------
//! \brief Write n characters to ring buffer.
//! \param this The ring buffer to write to.
//! \param buffer to write.
//! \param size The number of characters to write.
//! \retval -1 in error case, otherwise the number of written characters.
int ringbuffer_write(struct ringbuffer *this, const char *buffer, int size);

//-----------------------------------------------------------------------------
//! \brief Check if ring buffer is full.
//! \param this The ring buffer to check.
//! \retval -1 in error case, otherwise 1 (true) / 0 (false).
int ringbuffer_is_full(const struct ringbuffer *this);

//-----------------------------------------------------------------------------
//! \brief Check if ring buffer is empty.
//! \param this The ring buffer to check.
//! \retval -1 in error case, otherwise 1 (true) / 0 (false).
int ringbuffer_is_empty(const struct ringbuffer *this);

#endif /* RINGBUFFER_H_ */
