배열을 이용하여 Queue와 같은 방식으로 사용 가능한 원형 버퍼
배열을 이용하기 때문에 캐시 친화적이고, 속도도 빠르며 구조가 단순하다.
template<typename T>
class CircularBuffer
{
public:
CircularBuffer(int bufferSize) : mMaxBuffer(bufferSize)
{
assert(mMaxBuffer > 0);
mBuffer.resize(mMaxBuffer);
}
~CircularBuffer()
{
mBuffer.clear();
}
public:
void PushElem(T&& elem)
{
mBuffer[mTail] = std::move(elem);
mTail = (mTail + 1) % mMaxBuffer;
}
T&& PopElem()
{
int head = mHead;
mHead = (mHead + 1) % mMaxBuffer;
return std::move(mBuffer[head]);
}
private:
int mMaxBuffer = 0;
int mHead = 0;
int mTail = 0;
std::vector<T> mBuffer;
};
참고 : https://en.wikipedia.org/wiki/Circular_buffer
참고 : 게임 프로그래밍 패턴