Ejemplo n.º 1
0
        void TestRoundTrip(byte[] values, int?expectedEncodeLength = null)
        {
            var stream = new MemoryStream();
            var writer = new ByteRunLengthEncodingWriter(stream);

            writer.Write(values);

            //If we know the encode length, make sure it's correct
            if (expectedEncodeLength.HasValue)
            {
                Assert.Equal(expectedEncodeLength.Value, stream.Length);
            }

            stream.Seek(0, SeekOrigin.Begin);

            var reader = new ByteRunLengthEncodingReader(stream);
            var result = reader.Read().ToArray();

            //Make sure all bytes in the written stream were consumed
            Assert.Equal(stream.Length, stream.Position);

            //Check the actual values
            Assert.Equal(values.Length, result.Length);
            for (int i = 0; i < values.Length; i++)
            {
                Assert.Equal(values[i], result[i]);
            }
        }
Ejemplo n.º 2
0
        void TestWrite(byte[] expected, byte[] input)
        {
            var stream = new MemoryStream();
            var writer = new ByteRunLengthEncodingWriter(stream);

            writer.Write(input);
            var actual = stream.ToArray();

            Assert.Equal(expected.Length, actual.Length);
            for (int i = 0; i < expected.Length; i++)
            {
                Assert.Equal(expected[i], actual[i]);
            }
        }
Ejemplo n.º 3
0
        public void AddBlock(IList <byte?> values)
        {
            var stats = new LongWriterStatistics();

            Statistics.Add(stats);
            if (_isNullable)
            {
                _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0);
            }
            _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0);

            var valList = new List <byte>(values.Count);

            if (_isNullable)
            {
                var presentList = new List <bool>(values.Count);

                foreach (var value in values)
                {
                    stats.AddValue(value);
                    if (value.HasValue)
                    {
                        valList.Add(value.Value);
                    }
                    presentList.Add(value.HasValue);
                }

                var presentEncoder = new BitWriter(_presentBuffer);
                presentEncoder.Write(presentList);
                if (stats.HasNull)
                {
                    _presentBuffer.MustBeIncluded = true;
                }
            }
            else
            {
                foreach (var value in values)
                {
                    stats.AddValue(value);
                    valList.Add(value.Value);
                }
            }

            var valEncoder = new ByteRunLengthEncodingWriter(_dataBuffer);

            valEncoder.Write(valList);
        }