이 파일의 문서화 페이지로 가기
27 #ifndef _AKFIFOQUEUE_H
28 #define _AKFIFOQUEUE_H
36 template<
typename T, T TDEFAULT,
class TAlloc = ArrayPoolDefault>
43 , m_uQueueIndexMask(0)
61 AKASSERT((in_uMaxEntries & (in_uMaxEntries - 1)) == 0);
63 m_uQueueIndexMask = in_uMaxEntries - 1;
67 m_buffer = (FifoQueueEntry*)TAlloc::Alloc(
sizeof(FifoQueueEntry) * in_uMaxEntries);
68 if (m_buffer ==
nullptr)
74 for (
AkUInt32 i = 0; i < in_uMaxEntries; ++i)
76 m_buffer[i].value = TDEFAULT;
103 const AkUInt64 uQueueIndexMask = m_uQueueIndexMask;
104 FifoQueueEntry* pBuffer = m_buffer;
111 if (sequenceDelta == 0)
118 else if (sequenceDelta < 0)
131 pBuffer[writePos & uQueueIndexMask].value = in_value;
132 AkAtomicStore64(&pBuffer[writePos & uQueueIndexMask].uSequence, writePos + 1);
140 const AkInt64 uQueueIndexMask = m_uQueueIndexMask;
141 FifoQueueEntry* pBuffer = m_buffer;
146 AkInt64 sequenceDelta =
AkAtomicLoad64(&pBuffer[readPos & uQueueIndexMask].uSequence) - (readPos + 1);
148 if (sequenceDelta == 0)
156 else if (sequenceDelta < 0)
168 io_value = pBuffer[readPos & uQueueIndexMask].value;
169 AkAtomicStore64(&pBuffer[readPos & uQueueIndexMask].uSequence, readPos + m_uQueueIndexMask + 1);
178 AkInt64 sequenceDelta =
AkAtomicLoad64(&m_buffer[readPos & m_uQueueIndexMask].uSequence) - (readPos + 1);
179 return sequenceDelta < 0;
183 struct FifoQueueEntry
192 FifoQueueEntry* m_buffer;
202 #endif // _AKFIFOQUEUE_H
AKSOUNDENGINE_API void Free(AkMemPoolId in_poolId, void *in_pMemAddress)
AKRESULT
Standard function call result.
bool Dequeue(T &io_value)
@ AK_Success
The operation was successful.
bool Empty()
Checks if there is a value available to be dequeued
#define AKASSERT(Condition)
volatile int64_t AkAtomic64
AK_NODISCARD bool Enqueue(T in_value)
int64_t AkInt64
Signed 64-bit integer
uint64_t AkUInt64
Unsigned 64-bit integer
uint32_t AkUInt32
Unsigned 32-bit integer
@ AK_InsufficientMemory
Memory error.
AKRESULT Init(AkUInt32 in_uMaxEntries)
지원이 필요하신가요?
질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!
지원 페이지를 방문해 주세요
작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요