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