public void Enqueue( byte[] buffer, int offset, int size )
{
if ( (m_Size + size) > m_Buffer.Length )
SetCapacity( (m_Size + size + 2047) & ~2047 );
if ( m_Head < m_Tail )
{
int rightLength = ( m_Buffer.Length - m_Tail );
if ( rightLength >= size )
{
Buffer.BlockCopy( buffer, offset, m_Buffer, m_Tail, size );
}
else
{
Buffer.BlockCopy( buffer, offset, m_Buffer, m_Tail, rightLength );
Buffer.BlockCopy( buffer, offset + rightLength, m_Buffer, 0, size - rightLength );
}
}
else
{
Buffer.BlockCopy( buffer, offset, m_Buffer, m_Tail, size );
}
m_Tail = ( m_Tail + size ) % m_Buffer.Length;
m_Size += size;
}
}