# Ringbuffer Management
[Basic Stuff]

This file contains the definition of a GWEN_RINGBUFFER. More...

## Constructor And Destructor

GWENHYWFAR_API void | GWEN_RingBuffer_free (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_RINGBUFFER * | GWEN_RingBuffer_new (unsigned int size)

## Informational Functions

GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetBufferSize (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetBytesLeft (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetUsedBytes (const GWEN_RINGBUFFER *rb)

## Statistical Functions

GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetEmptyCounter (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetFullCounter (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetMaxUsedBytes (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetThroughput (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API void | GWEN_RingBuffer_Reset (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API void | GWEN_RingBuffer_ResetEmptyCounter (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API void | GWEN_RingBuffer_ResetFullCounter (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API void | GWEN_RingBuffer_ResetMaxUsedBytes (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API void | GWEN_RingBuffer_ResetThroughput (GWEN_RINGBUFFER *rb)

## Functions For Direct Manipulation Of The Buffer

Please use these functions with care. These function are supported in order to avoid unnecessary copying.
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetMaxUnsegmentedRead (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API GWEN_TYPE_UINT32 | GWEN_RingBuffer_GetMaxUnsegmentedWrite (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API const char * | GWEN_RingBuffer_GetReadPointer (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API char * | GWEN_RingBuffer_GetWritePointer (const GWEN_RINGBUFFER *rb)
GWENHYWFAR_API void | GWEN_RingBuffer_SkipBytesRead (GWEN_RINGBUFFER *rb, GWEN_TYPE_UINT32 psize)
GWENHYWFAR_API void | GWEN_RingBuffer_SkipBytesWrite (GWEN_RINGBUFFER *rb, GWEN_TYPE_UINT32 psize)

## Reading And Writing

GWENHYWFAR_API int | GWEN_RingBuffer_ReadByte (GWEN_RINGBUFFER *rb)
GWENHYWFAR_API int | GWEN_RingBuffer_ReadBytes (GWEN_RINGBUFFER *rb, char *buffer, GWEN_TYPE_UINT32 *size)
GWENHYWFAR_API int | GWEN_RingBuffer_WriteByte (GWEN_RINGBUFFER *rb, char c)
GWENHYWFAR_API int | GWEN_RingBuffer_WriteBytes (GWEN_RINGBUFFER *rb, const char *buffer, GWEN_TYPE_UINT32 *size)

## Typedefs

typedef GWEN_RINGBUFFER | GWEN_RINGBUFFER

## Detailed Description

This file contains the definition of a GWEN_RINGBUFFER.

## Typedef Documentation

typedef struct GWEN_RINGBUFFER GWEN_RINGBUFFER

## Function Documentation

GWENHYWFAR_API void GWEN_RingBuffer_free | ( | GWEN_RINGBUFFER * | rb | ) |

| Destructor.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetBufferSize | ( | const GWEN_RINGBUFFER * | rb | ) |

| Returns the size of the ring buffer.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetBytesLeft | ( | const GWEN_RINGBUFFER * | rb | ) |

| Returns the number of bytes which still can be stored inside the ring buffer.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetEmptyCounter | ( | const GWEN_RINGBUFFER * | rb | ) |

| Returns the number of times the buffer was empty.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetFullCounter | ( | const GWEN_RINGBUFFER * | rb | ) |

| Returns the number of times the buffer was full.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetMaxUnsegmentedRead | ( | GWEN_RINGBUFFER * | rb | ) |

| Returns the maximum number of bytes which can be read with a following call to GWEN_RingBuffer_ReadBytes. This value (if not 0) can be used for GWEN_RingBuffer_SkipBytesRead.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetMaxUnsegmentedWrite | ( | GWEN_RINGBUFFER * | rb | ) |

| Returns the maximum number of bytes which can be written with a following call to GWEN_RingBuffer_WriteBytes. This value (if not 0) can be used for GWEN_RingBuffer_SkipBytesWrite.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetMaxUsedBytes | ( | const GWEN_RINGBUFFER * | rb | ) |

| Returns the maximum number of bytes which has been stored in the buffer.

GWENHYWFAR_API const char* GWEN_RingBuffer_GetReadPointer | ( | const GWEN_RINGBUFFER * | rb | ) |

Returne the current read pointer. Please note that the return value of GWEN_RingBuffer_GetMaxUnsegmentedRead indicates the maximum number of bytes at this position available! Trying to access bytes beyond that boundary will most likely result in segmentation faults. Please make sure that you call GWEN_RingBuffer_SkipBytesRead after taking data from the buffer in order to keep the internal structure intact.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetThroughput | ( | GWEN_RINGBUFFER * | rb | ) |

| Returns the number of bytes which have passed through this buffer (i.e. bytes that have been written to and read from the buffer.

GWENHYWFAR_API GWEN_TYPE_UINT32 GWEN_RingBuffer_GetUsedBytes | ( | const GWEN_RINGBUFFER * | rb | ) |

| Returns the number of bytes stored inside the ring buffer.

GWENHYWFAR_API char* GWEN_RingBuffer_GetWritePointer | ( | const GWEN_RINGBUFFER * | rb | ) |

Returne the current write pointer. Please note that the return value of GWEN_RingBuffer_GetMaxUnsegmentedWrite indicates the maximum number of bytes at this position available! Trying to access bytes beyond that boundary will most likely result in segmentation faults. Please make sure that you call GWEN_RingBuffer_SkipBytesWrite after writing data to the buffer in order to keep the internal structure intact.

GWENHYWFAR_API GWEN_RINGBUFFER* GWEN_RingBuffer_new | ( | unsigned int | size | ) |

Creates a new ring buffer

Parameters:

  | size | maximum size of the ring buffer

GWENHYWFAR_API int GWEN_RingBuffer_ReadByte | ( | GWEN_RINGBUFFER * | rb | ) |

| Reads a single byte from the ring buffer.

GWENHYWFAR_API int GWEN_RingBuffer_ReadBytes | ( | GWEN_RINGBUFFER * | rb,
|  | char * | buffer,
|  | GWEN_TYPE_UINT32 * | size
| ) |

Read bytes from the ring buffer.

Parameters:

  | rb | ring buffer
  | buffer | pointer to the destination buffer
  | size | pointer to a variable that contains the number of bytes to read. Upon return this variable contains the number of bytes actually copied.

GWENHYWFAR_API void GWEN_RingBuffer_Reset | ( | GWEN_RINGBUFFER * | rb | ) |

GWENHYWFAR_API void GWEN_RingBuffer_ResetEmptyCounter | ( | GWEN_RINGBUFFER * | rb | ) |

GWENHYWFAR_API void GWEN_RingBuffer_ResetFullCounter | ( | GWEN_RINGBUFFER * | rb | ) |

GWENHYWFAR_API void GWEN_RingBuffer_ResetMaxUsedBytes | ( | GWEN_RINGBUFFER * | rb | ) |

| Resets the counter for the maximum number of bytes stored in the buffer.

GWENHYWFAR_API void GWEN_RingBuffer_ResetThroughput | ( | GWEN_RINGBUFFER * | rb | ) |

| Resets the buffers throughput counter to zero.

GWENHYWFAR_API void GWEN_RingBuffer_SkipBytesRead | ( | GWEN_RINGBUFFER * | rb,
|  | GWEN_TYPE_UINT32 | psize
| ) |

| Adjusts the internal pointers and statistical data as if GWEN_RingBuffer_ReadBytes had been called. Please note that the size value given here MUST be <= the value returned by GWEN_RingBuffer_GetMaxUnsegmentedRead !

GWENHYWFAR_API void GWEN_RingBuffer_SkipBytesWrite | ( | GWEN_RINGBUFFER * | rb,
|  | GWEN_TYPE_UINT32 | psize
| ) |

| Adjusts the internal pointers and statistical data as if GWEN_RingBuffer_WriteBytes had been called. Please note that the size value given here MUST be <= the value returned by GWEN_RingBuffer_GetMaxUnsegmentedWrite !

GWENHYWFAR_API int GWEN_RingBuffer_WriteByte | ( | GWEN_RINGBUFFER * | rb,
|  | char | c
| ) |

| Writes a single byte to the ring buffer.

GWENHYWFAR_API int GWEN_RingBuffer_WriteBytes | ( | GWEN_RINGBUFFER * | rb,
|  | const char * | buffer,
|  | GWEN_TYPE_UINT32 * | size
| ) |

Writes the given bytes into the ring buffer.

Parameters:

  | rb | ring buffer
  | buffer | pointer to bytes to write
  | size | pointer to a variable that contains the number of bytes to write. Upon return this variable contains the number of bytes actually copied.