143Â
if (m_writeIndex + in_nbItems
149Â
AkUInt32 uItemsBeforeWrap = m_nbItems - m_writeIndex;
150Â
AkUInt32 uItemsAfterWrap = in_nbItems - uItemsBeforeWrap;
155Â m_writeIndex = (m_writeIndex + in_nbItems);
156Â m_writeIndex -= m_writeIndex >= m_nbItems ? m_nbItems : 0;
169Â
return &m_data[m_readIndex];
176Â
AkUInt32 uReadIndex = (m_readIndex + uOffset) % m_nbItems;
177Â
return &m_data[uReadIndex];
184Â m_readIndex = (m_readIndex + nbItems) % m_nbItems;
208Â
AKASSERT(in_nbItems
211Â
if (m_readIndex + in_nbItems
217Â
AkUInt32 uItemsBeforeWrap = m_nbItems - m_readIndex;
218Â
AkUInt32 uItemsAfterWrap = in_nbItems - uItemsBeforeWrap;
222Â m_readIndex = (m_readIndex + in_nbItems);
223Â m_readIndex -= m_readIndex >= m_nbItems? m_nbItems: 0;
231Â
AkUInt32 uTargetItems = m_nbItems + in_uGrowBy;
232Â
if (T* pNewData =
reinterpret_castT*>(TAlloc::Alloc(uTargetItems * sizeof(T))))
237Â
if (m_readIndex >= m_writeIndex)
242Â memcpy(pNewData, m_data,
sizeof(T) * m_writeIndex);
244Â memcpy(pNewData + m_readIndex + in_uGrowBy, m_data + m_readIndex,
sizeof(T) * (m_nbItems - m_readIndex));
245Â m_readIndex += in_uGrowBy;
251Â memcpy(pNewData + m_readIndex, m_data + m_readIndex,
sizeof(T) * uReadableItems);
257Â m_nbItems = uTargetItems;
const T * Peek(AkUInt32 uOffset) const
AkUInt32 GetReadIndex() const
const T * GetReadPtr() const
AkUInt32 GetWriteIndex() const
#define AkFree(_pool, _pvmem)
static AkForceInline void Free(void *in_pAddress)
AKSOUNDENGINE_API void Free(AkMemPoolId in_poolId, void *in_pMemAddress)
static AkForceInline void * Alloc(size_t in_uSize)
AKRESULT
Standard function call result.
AkRingBufferAllocatorAligned AkRingBufferAllocatorLEngineAligned
static AkForceInline void * Alloc(size_t in_uSize)
volatile int32_t AkAtomic32
AkRingBufferAllocatorNoAlign AkRingBufferAllocatorDefault
#define AkAlloc(_pool, _size)
@ AK_Success
The operation was successful.
static AkForceInline void Free(void *in_pAddress)
void IncrementReadIndex(AkUInt32 nbItems)
void WriteDataToRing(T *in_pDest, AkUInt32 in_nbItems)
AkUInt32 GetNbReadableItems() const
AkUInt32 GetNbWritableItems() const
#define AKASSERT(Condition)
AKRESULT Init(AkUInt32 nbItems)
AkForceInline void AkMemCpy(void *pDest, const void *pSrc, AkUInt32 uSize)
Platform Independent Helper for memcpy/memmove/memset.
void ReadDataFromRing(T *in_pSrc, AkUInt32 in_nbItems)
#define AkMalign(_pool, _size, _align)
void IncrementWriteIndex(AkUInt32 nbItems)
uint32_t AkUInt32
Unsigned 32-bit integer.
@ AK_InsufficientMemory
Memory error.
bool Grow(AkUInt32 in_uGrowBy)
AkRingBufferAllocatorNoAlign AkRingBufferAllocatorLEngine