Example #1
0
 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);
 }
Example #2
0
        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;
            }
        }