示例#1
0
        /// <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;
        }
示例#2
0
        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);
        }
示例#3
0
        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());
        }