배열을 이용하여 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
참고 : 게임 프로그래밍 패턴