pa_ringbuffer.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "pa_ringbuffer.h"
#include <string.h>
#include "pa_memorybarrier.h"

Functions

long PaUtil_InitializeRingBuffer (PaUtilRingBuffer *rbuf, long elementSizeBytes, long elementCount, void *dataPtr)
long PaUtil_GetRingBufferReadAvailable (PaUtilRingBuffer *rbuf)
long PaUtil_GetRingBufferWriteAvailable (PaUtilRingBuffer *rbuf)
void PaUtil_FlushRingBuffer (PaUtilRingBuffer *rbuf)
long PaUtil_GetRingBufferWriteRegions (PaUtilRingBuffer *rbuf, long elementCount, void **dataPtr1, long *sizePtr1, void **dataPtr2, long *sizePtr2)
long PaUtil_AdvanceRingBufferWriteIndex (PaUtilRingBuffer *rbuf, long elementCount)
long PaUtil_GetRingBufferReadRegions (PaUtilRingBuffer *rbuf, long elementCount, void **dataPtr1, long *sizePtr1, void **dataPtr2, long *sizePtr2)
long PaUtil_AdvanceRingBufferReadIndex (PaUtilRingBuffer *rbuf, long elementCount)
long PaUtil_WriteRingBuffer (PaUtilRingBuffer *rbuf, const void *data, long elementCount)
long PaUtil_ReadRingBuffer (PaUtilRingBuffer *rbuf, void *data, long elementCount)

Detailed Description


Function Documentation

long PaUtil_AdvanceRingBufferReadIndex ( PaUtilRingBuffer rbuf,
long  elementCount 
)

Advance the read index to the next location to be read.

Parameters:
rbuf The ring buffer.
elementCount The number of elements to advance.
Returns:
The new position.

References PaUtilRingBuffer::bigMask, and PaUtilRingBuffer::readIndex.

Referenced by PaUtil_ReadRingBuffer().

long PaUtil_AdvanceRingBufferWriteIndex ( PaUtilRingBuffer rbuf,
long  elementCount 
)

Advance the write index to the next location to be written.

Parameters:
rbuf The ring buffer.
elementCount The number of elements to advance.
Returns:
The new position.

References PaUtilRingBuffer::bigMask, and PaUtilRingBuffer::writeIndex.

Referenced by PaUtil_WriteRingBuffer(), and resetBlioRingBuffers().

void PaUtil_FlushRingBuffer ( PaUtilRingBuffer rbuf  ) 

Clear buffer. Should only be called when buffer is NOT being read.

Parameters:
rbuf The ring buffer.

References PaUtilRingBuffer::readIndex, and PaUtilRingBuffer::writeIndex.

Referenced by PaUtil_InitializeRingBuffer(), and resetBlioRingBuffers().

long PaUtil_GetRingBufferReadAvailable ( PaUtilRingBuffer rbuf  ) 

Retrieve the number of elements available in the ring buffer for reading.

Parameters:
rbuf The ring buffer.
Returns:
The number of elements available for reading.

References PaUtilRingBuffer::bigMask, PaUtilRingBuffer::readIndex, and PaUtilRingBuffer::writeIndex.

Referenced by BlioCallback(), GetStreamReadAvailable(), PaUtil_GetRingBufferReadRegions(), PaUtil_GetRingBufferWriteAvailable(), and ReadStream().

long PaUtil_GetRingBufferReadRegions ( PaUtilRingBuffer rbuf,
long  elementCount,
void **  dataPtr1,
long *  sizePtr1,
void **  dataPtr2,
long *  sizePtr2 
)

Get address of region(s) from which we can write data.

Parameters:
rbuf The ring buffer.
elementCount The number of elements desired.
dataPtr1 The address where the first (or only) region pointer will be stored.
sizePtr1 The address where the first (or only) region length will be stored.
dataPtr2 The address where the second region pointer will be stored if the first region is too small to satisfy elementCount.
sizePtr2 The address where the second region length will be stored if the first region is too small to satisfy elementCount.
Returns:
The number of elements available for reading.

References PaUtilRingBuffer::buffer, PaUtilRingBuffer::bufferSize, PaUtilRingBuffer::elementSizeBytes, PaUtil_GetRingBufferReadAvailable(), PaUtilRingBuffer::readIndex, and PaUtilRingBuffer::smallMask.

Referenced by PaUtil_ReadRingBuffer().

long PaUtil_GetRingBufferWriteAvailable ( PaUtilRingBuffer rbuf  ) 

Retrieve the number of elements available in the ring buffer for writing.

Parameters:
rbuf The ring buffer.
Returns:
The number of elements available for writing.

References PaUtilRingBuffer::bufferSize, and PaUtil_GetRingBufferReadAvailable().

Referenced by BlioCallback(), GetStreamWriteAvailable(), PaUtil_GetRingBufferWriteRegions(), waitUntilBlioWriteBufferIsFlushed(), and WriteStream().

long PaUtil_GetRingBufferWriteRegions ( PaUtilRingBuffer rbuf,
long  elementCount,
void **  dataPtr1,
long *  sizePtr1,
void **  dataPtr2,
long *  sizePtr2 
)

Get address of region(s) to which we can write data.

Parameters:
rbuf The ring buffer.
elementCount The number of elements desired.
dataPtr1 The address where the first (or only) region pointer will be stored.
sizePtr1 The address where the first (or only) region length will be stored.
dataPtr2 The address where the second region pointer will be stored if the first region is too small to satisfy elementCount.
sizePtr2 The address where the second region length will be stored if the first region is too small to satisfy elementCount.
Returns:
The room available to be written or elementCount, whichever is smaller.

References PaUtilRingBuffer::buffer, PaUtilRingBuffer::bufferSize, PaUtilRingBuffer::elementSizeBytes, PaUtil_GetRingBufferWriteAvailable(), PaUtilRingBuffer::smallMask, and PaUtilRingBuffer::writeIndex.

Referenced by PaUtil_WriteRingBuffer().

long PaUtil_InitializeRingBuffer ( PaUtilRingBuffer rbuf,
long  elementSizeBytes,
long  elementCount,
void *  dataPtr 
)

Initialize Ring Buffer.

Parameters:
rbuf The ring buffer.
elementSizeBytes The size of a single data element in bytes.
elementCount The number of elements in the buffer (must be power of 2).
dataPtr A pointer to a previously allocated area where the data will be maintained. It must be elementCount*elementSizeBytes long.
Returns:
-1 if elementCount is not a power of 2, otherwise 0.

References PaUtilRingBuffer::bigMask, PaUtilRingBuffer::buffer, PaUtilRingBuffer::bufferSize, PaUtilRingBuffer::elementSizeBytes, PaUtil_FlushRingBuffer(), and PaUtilRingBuffer::smallMask.

Referenced by initializeBlioRingBuffers().

long PaUtil_ReadRingBuffer ( PaUtilRingBuffer rbuf,
void *  data,
long  elementCount 
)

Read data from the ring buffer.

Parameters:
rbuf The ring buffer.
data The address where the data should be stored.
elementCount The number of elements to be read.
Returns:
The number of elements read.

References PaUtilRingBuffer::elementSizeBytes, PaUtil_AdvanceRingBufferReadIndex(), and PaUtil_GetRingBufferReadRegions().

Referenced by BlioCallback(), and ReadStream().

long PaUtil_WriteRingBuffer ( PaUtilRingBuffer rbuf,
const void *  data,
long  elementCount 
)

Write data to the ring buffer.

Parameters:
rbuf The ring buffer.
data The address of new data to write to the buffer.
elementCount The number of elements to be written.
Returns:
The number of elements written.

References PaUtilRingBuffer::elementSizeBytes, PaUtil_AdvanceRingBufferWriteIndex(), and PaUtil_GetRingBufferWriteRegions().

Referenced by BlioCallback(), and WriteStream().


Generated by  doxygen 1.6.2