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;
}