Example #1
0
        /// <summary>
        /// Reads bytes from the current stream position, advancing the
        /// position past the data read.
        /// </summary>
        /// <param name="buffer">The destination buffer.</param>
        /// <param name="offset">Offset where the read data is to be copied.</param>
        /// <param name="count">Number of bytes to read.</param>
        /// <returns>The number of bytes actually read.</returns>
        public override int Read(byte[] buffer, int offset, int count)
        {
            int cbRemain;
            int cbRead;

            cbRemain = length - pos;
            cbRead   = cbRemain >= count ? count : cbRemain;

            if (cbRead == 0)
            {
                return(0);
            }

            blocks.CopyTo(pos, buffer, offset, cbRead);
            pos += cbRead;

            return(cbRead);
        }
Example #2
0
        private void CopyFromTest(int bufSize, int blockSize, int cbCopy)
        {
            BlockArray blocks;

            byte[] arr;
            byte[] cmp;
            int    pos;

            blocks = new BlockArray(bufSize, blockSize);

            Zero(blocks);
            arr = new byte[cbCopy];
            for (int i = 0; i < cbCopy; i++)
            {
                arr[i] = (byte)i;
            }

            blocks.CopyFrom(arr, 0, 0, cbCopy);
            cmp = new byte[bufSize];
            for (int i = 0; i < cbCopy; i++)
            {
                cmp[i] = (byte)i;
            }

            arr = new byte[bufSize];
            blocks.CopyTo(0, arr, 0, bufSize);
            Assert.Equal(cmp, arr);

            Zero(blocks);
            arr = new byte[cbCopy];
            for (int i = 0; i < cbCopy; i++)
            {
                arr[i] = (byte)i;
            }

            if (cbCopy == 0)
            {
                return;
            }

            pos = 0;
            for (int i = 0; i < blockSize / cbCopy; i++)
            {
                blocks.CopyFrom(arr, 0, pos, cbCopy);
                pos += cbCopy;
            }

            pos = 0;
            cmp = new byte[bufSize];
            for (int i = 0; i < blockSize / cbCopy; i++)
            {
                for (int j = 0; j < cbCopy; j++)
                {
                    cmp[pos++] = (byte)j;
                }
            }

            arr = new byte[bufSize];
            blocks.CopyTo(0, arr, 0, bufSize);
            Assert.Equal(cmp, arr);

            Zero(blocks);
            arr = new byte[cbCopy + 10];
            cmp = new byte[cbCopy + 10];
            for (int i = 0; i < cbCopy; i++)
            {
                cmp[i + 10] = (byte)i;
            }

            blocks.CopyFrom(cmp, 10, 0, cbCopy);
            blocks.CopyTo(0, arr, 10, cbCopy);
            Assert.Equal(cmp, arr);
        }
Example #3
0
        private void CopyToTest(int bufSize, int blockSize, int cbCopy)
        {
            BlockArray blocks;

            byte[] arr;
            byte[] cmp;

            blocks = new BlockArray(bufSize, blockSize);
            for (int i = 0; i < blocks.Size; i++)
            {
                blocks[i] = (byte)i;
            }

            blocks.Reset();
            for (int i = 0; i < blocks.Size - cbCopy; i++)
            {
                arr = new byte[cbCopy];

                cmp = new byte[cbCopy];
                for (int j = 0; j < cbCopy; j++)
                {
                    cmp[j] = (byte)(i + j);
                }

                blocks.CopyTo(i, arr, 0, cbCopy);
                Assert.Equal(cmp, arr);

                if (i < blocks.Size - 1)
                {
                    Assert.Equal((byte)(i + 1), blocks[i + 1]);
                }
            }

            blocks.Reset();
            for (int i = 0; i < blocks.Size - cbCopy; i++)
            {
                arr = new byte[cbCopy];

                cmp = new byte[cbCopy];
                for (int j = 0; j < cbCopy; j++)
                {
                    cmp[j] = (byte)(i + j);
                }

                blocks.CopyTo(i, arr, 0, cbCopy);
                Assert.Equal(cmp, arr);
            }

            blocks.Reset();
            for (int i = 0; i < blocks.Size; i++)
            {
                arr = new byte[i];
                blocks.CopyTo(0, arr, 0, i);

                cmp = new byte[i];
                for (int j = 0; j < i; j++)
                {
                    cmp[j] = (byte)j;
                }

                Assert.Equal(cmp, arr);

                if (i < blocks.Size - 1)
                {
                    Assert.Equal((byte)(i + 1), blocks[i + 1]);
                }
            }

            blocks.Reset();
            for (int i = 0; i < blocks.Size; i++)
            {
                arr = new byte[i];
                blocks.CopyTo(0, arr, 0, i);

                cmp = new byte[i];
                for (int j = 0; j < i; j++)
                {
                    cmp[j] = (byte)j;
                }

                Assert.Equal(cmp, arr);
            }

            blocks.Reset();
            arr = new byte[cbCopy + 10];
            cmp = new byte[cbCopy + 10];
            for (int i = 0; i < cbCopy; i++)
            {
                blocks[i]   = (byte)i;
                cmp[i + 10] = (byte)i;
            }

            blocks.CopyTo(0, arr, 10, cbCopy);
            Assert.Equal(cmp, arr);
        }