public PooledMemoryStream(long p_Capacity, PooledMemoryStreamManager p_StreamManager) { m_StreamManager = p_StreamManager; m_DataBlocks = new List <PooledMemoryStreamDataBlock>(); m_AccessBlock = new PooledMemoryStreamDataBlock(); m_BlockAndOffset = new PooledMemoryStreamBlockAndOffset(); EnsureCapacity(p_Capacity); }
private void EnsureCapacity(long p_Value) { if (m_Capacity > p_Value) { return; } List <MemoryBlock> l_Blocks = m_StreamManager.GetBlock(m_Capacity, p_Value); PooledMemoryStreamDataBlock l_LastBock; if (m_DataBlocks.Count != 0) { l_LastBock = m_DataBlocks[m_DataBlocks.Count - 1]; } else { l_LastBock = PooledMemoryStreamDataBlock.EMPTY; } foreach (MemoryBlock l_Block in l_Blocks) { PooledMemoryStreamDataBlock l_DataBlock = new PooledMemoryStreamDataBlock(); l_DataBlock.SourceBlock = l_Block; l_DataBlock.Read = l_Block.Read; l_DataBlock.Write = l_Block.Write; l_DataBlock.ReadByte = l_Block.ReadByte; l_DataBlock.WriteByte = l_Block.WriteByte; l_DataBlock.Length = l_Block.GetLength(); l_DataBlock.Start = l_LastBock.Start + l_LastBock.Length; m_DataBlocks.Add(l_DataBlock); m_Capacity = m_Capacity + l_DataBlock.Length; l_LastBock = l_DataBlock; } }