/// <summary> /// Appends a block to the end of the underlying BlockArray. /// </summary> /// <param name="block">The block to append.</param> /// <remarks> /// <para> /// The underyling block array's SetExactSize() method will be /// called before appending the block. The stream position will /// be set to the end of the stream before the method returns. /// </para> /// <para> /// This method is a performance improvement over writing the /// a buffer to the stream via one of the write methods. /// </para> /// </remarks> public void Append(Block block) { blocks.SetExactSize(length); blocks.Append(block); length += block.Length; pos = length; }
public void SetExactSize() { BlockArray blocks; blocks = new BlockArray(); blocks.SetExactSize(0); Assert.Equal(0, blocks.Size); Assert.Equal(0, blocks.Count); blocks.SetExactSize(1); Assert.Equal(1, blocks.Size); Assert.Equal(1, blocks.Count); Assert.Equal(1, blocks.GetBlock(0).Length); blocks.SetExactSize(blocks.BlockSize); Assert.Equal(blocks.BlockSize, blocks.Size); Assert.Equal(2, blocks.Count); Assert.Equal(1, blocks.GetBlock(0).Length); Assert.Equal(blocks.BlockSize - 1, blocks.GetBlock(1).Length); blocks.SetExactSize(blocks.BlockSize + 1); Assert.Equal(blocks.BlockSize + 1, blocks.Size); Assert.Equal(3, blocks.Count); Assert.Equal(1, blocks.GetBlock(0).Length); Assert.Equal(blocks.BlockSize - 1, blocks.GetBlock(1).Length); Assert.Equal(1, blocks.GetBlock(2).Length); blocks = new BlockArray(); blocks.ExtendTo(blocks.BlockSize * 3); blocks.SetExactSize(blocks.Size - blocks.BlockSize / 2); Assert.Equal(3, blocks.Count); Assert.Equal(blocks.BlockSize, blocks.GetBlock(0).Length); Assert.Equal(blocks.BlockSize, blocks.GetBlock(1).Length); Assert.Equal(blocks.BlockSize - blocks.BlockSize / 2, blocks.GetBlock(2).Length); blocks.SetExactSize(blocks.BlockSize * 2); Assert.Equal(2, blocks.Count); Assert.Equal(blocks.BlockSize, blocks.GetBlock(0).Length); Assert.Equal(blocks.BlockSize, blocks.GetBlock(1).Length); blocks.SetExactSize(blocks.BlockSize + 1); Assert.Equal(2, blocks.Count); Assert.Equal(blocks.BlockSize, blocks.GetBlock(0).Length); Assert.Equal(1, blocks.GetBlock(1).Length); }
public void AddFromBlockArray() { BlockArray ba1; BlockArray ba2; ba1 = new BlockArray(); ba1.Append(new byte[] { 0, 1, 2, 3, 4 }); ba2 = new BlockArray(); ba2.Append(new byte[] { 5, 6, 7, 8, 9 }); ba2.Append(new byte[] { 10, 11, 12, 13, 14 }); ba2.Append(new byte[] { 15, 16, 17, 18, 19 }); ba2.Append(new byte[] { 20, 21, 22, 23, 24 }); ba1.Append(ba2, 2, 2); Assert.Equal(new byte[] { 0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, ba1.ToByteArray()); ba1.SetExactSize(5); Assert.Equal(new byte[] { 0, 1, 2, 3, 4 }, ba1.ToByteArray()); ba1.Append(ba2); Assert.Equal(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, ba1.ToByteArray()); }