배열을 이용하여 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

참고 : 게임 프로그래밍 패턴

+ Recent posts