bool CircularBuffer::Read()

in Shared/CircularBuffer.cpp [42:103]


bool CircularBuffer::Read(OUT char* destbuf, size_t bytes)
{
	assert(mBuffer != nullptr);

	if (mARegionSize + mBRegionSize < bytes)
		return false;

	size_t cnt = bytes;
	size_t aRead = 0;


	/// A, B ���� �Ѵ� �����Ͱ� �ִ� ���� A���� �д´�
	if (mARegionSize > 0)
	{
		aRead = (cnt > mARegionSize) ? mARegionSize : cnt;
		memcpy(destbuf, mARegionPointer, aRead);
		mARegionSize -= aRead;
		mARegionPointer += aRead;
		cnt -= aRead;
	}

	/// �б� �䱸�� �����Ͱ� �� �ִٸ� B �������� �д´�
	if (cnt > 0 && mBRegionSize > 0)
	{
		assert(cnt <= mBRegionSize);

		/// ������ ���� �� �б�
		size_t bRead = cnt;

		memcpy(destbuf + aRead, mBRegionPointer, bRead);
		mBRegionSize -= bRead;
		mBRegionPointer += bRead;
		cnt -= bRead;
	}

	assert(cnt == 0);

	/// A ���۰� ����ٸ� B���۸� �� ������ ���� A ���۷� ���� 
	if (mARegionSize == 0)
	{
		if (mBRegionSize > 0)
		{
			if (mBRegionPointer != mBuffer)
				memmove(mBuffer, mBRegionPointer, mBRegionSize);

			mARegionPointer = mBuffer;
			mARegionSize = mBRegionSize;
			mBRegionPointer = nullptr;
			mBRegionSize = 0;
		}
		else
		{
			/// B�� �ƹ��͵� ���� ��� �׳� A�� ����ġ
			mBRegionPointer = nullptr;
			mBRegionSize = 0;
			mARegionPointer = mBuffer;
			mARegionSize = 0;
		}
	}

	return true;
}