void Init(uint32_t numEntries)
{
SWR_ASSERT(numEntries > 0);
+ SWR_ASSERT(((1ULL << 32) % numEntries) == 0, "%d is not evenly divisible into 2 ^ 32. Wrap errors will occur!", numEntries);
mNumEntries = numEntries;
mpRingBuffer = (T*)AlignedMalloc(sizeof(T)*numEntries, 64);
SWR_ASSERT(mpRingBuffer != nullptr);
INLINE void Enqueue()
{
mRingHead++; // There's only one producer.
+ // Assert to find wrap-around cases, NEVER ENABLE DURING CHECKIN!!
+ // SWR_REL_ASSERT(mRingHead);
}
INLINE void Dequeue()
INLINE bool IsFull()
{
- ///@note We don't handle wrap case due to using 64-bit indices.
- /// It would take 11 million years to wrap at 50,000 DCs per sec.
- /// If we used 32-bit indices then its about 23 hours to wrap.
- uint64_t numEnqueued = GetHead() - GetTail();
+ uint32_t numEnqueued = GetHead() - GetTail();
SWR_ASSERT(numEnqueued <= mNumEntries);
return (numEnqueued == mNumEntries);