1#ifndef SEAD_RING_BUFFER_H_
2#define SEAD_RING_BUFFER_H_
4#include <basis/seadAssert.h>
5#include <basis/seadTypes.h>
49 bool isEmpty()
const {
return mNum == 0; }
50 bool isFull()
const {
return mNum >= mNumMax; }
64 if (
static_cast<u32>(x) <
static_cast<u32>(mNum))
66 return mBuffer[calcRealIndex(x)];
77 if (
static_cast<u32>(x) <
static_cast<u32>(mNum))
79 return mBuffer[calcRealIndex(x)];
90 if (
static_cast<u32>(x) <
static_cast<u32>(mNum))
92 return &mBuffer[calcRealIndex(x)];
103 if (
static_cast<u32>(x) <
static_cast<u32>(mNum))
105 return &mBuffer[calcRealIndex(x)];
116 SEAD_ASSERT_MSG(
static_cast<u32>(x) <
static_cast<u32>(mNum),
"index exceeded [%d/%d/%d]", x, mNum, mNumMax);
117 return &mBuffer[calcRealIndex(x)];
122 SEAD_ASSERT_MSG(
static_cast<u32>(x) <
static_cast<u32>(mNum),
"index exceeded [%d/%d/%d]", x, mNum, mNumMax);
123 return &mBuffer[calcRealIndex(x)];
128 return *unsafeGet(0);
133 return *unsafeGet(0);
140 return mBuffer[calcRealIndex(mNum - 1)];
152 return *unsafeGet(mNum - 1);
170 *unsafeGet(mNum++) = obj;
196 return lhs.mBuffer == rhs.mBuffer && lhs.mIndex == rhs.mIndex;
201 return lhs.mBuffer != rhs.mBuffer || lhs.mIndex != rhs.mIndex;
210 T&
operator*()
const {
return *mBuffer->unsafeGet(mIndex); }
211 T*
operator->()
const {
return mBuffer->unsafeGet(mIndex); }
228 return iterator(
this, size());
238template <
typename T, s32 N>
Definition seadRingBuffer.h:240
bool tryAllocBuffer(s32 numMax, Heap *heap, s32 alignment=4)
void setBuffer(s32 numMax, T *buf)
FixedRingBuffer()
Definition seadRingBuffer.h:242
T mWork[N]
Definition seadRingBuffer.h:255
void allocBuffer(s32 numMax, Heap *heap, s32 alignment=4)
Definition seadRingBuffer.h:186
RingBuffer * mBuffer
Definition seadRingBuffer.h:217
T & operator*() const
Definition seadRingBuffer.h:210
friend bool operator==(const iterator &lhs, const iterator &rhs)
Definition seadRingBuffer.h:194
iterator & operator++()
Definition seadRingBuffer.h:204
iterator(RingBuffer *buffer, s32 index=0)
Definition seadRingBuffer.h:188
s32 getIndex() const
Definition seadRingBuffer.h:213
friend bool operator!=(const iterator &lhs, const iterator &rhs)
Definition seadRingBuffer.h:199
T * operator->() const
Definition seadRingBuffer.h:211
s32 mIndex
Definition seadRingBuffer.h:216
Definition seadRingBuffer.h:13
bool isBufferReady() const
Definition seadRingBuffer.h:48
iterator end()
Definition seadRingBuffer.h:226
T & back()
Definition seadRingBuffer.h:136
const T & back() const
Definition seadRingBuffer.h:149
void allocBuffer(s32 numMax, Heap *heap, s32 alignment=4)
bool tryAllocBuffer(s32 numMax, Heap *heap, s32 alignment=4)
void clear()
Definition seadRingBuffer.h:54
s32 calcRealIndex(s32 x) const
Definition seadRingBuffer.h:176
s32 mNumMax
Definition seadRingBuffer.h:233
s32 mHead
Definition seadRingBuffer.h:234
s32 mNum
Definition seadRingBuffer.h:235
void pushBack(const T &obj)
Definition seadRingBuffer.h:162
RingBuffer()
Definition seadRingBuffer.h:15
const T & operator[](s32 x) const
Definition seadRingBuffer.h:75
T & front()
Definition seadRingBuffer.h:126
T & operator[](s32 x)
Definition seadRingBuffer.h:62
s32 size() const
Definition seadRingBuffer.h:51
iterator begin()
Definition seadRingBuffer.h:221
const T * unsafeGet(s32 x) const
Definition seadRingBuffer.h:120
T * get(s32 x)
Definition seadRingBuffer.h:88
bool isFull() const
Definition seadRingBuffer.h:50
void setBuffer(s32 numMax, T *buf)
Definition seadRingBuffer.h:23
const T * get(s32 x) const
Definition seadRingBuffer.h:101
const T & front() const
Definition seadRingBuffer.h:131
bool isEmpty() const
Definition seadRingBuffer.h:49
T * mBuffer
Definition seadRingBuffer.h:232
T * unsafeGet(s32 x)
Definition seadRingBuffer.h:114
s32 maxSize() const
Definition seadRingBuffer.h:52
Definition seadAssert.h:44
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33