public override int Read(IOfcNumberWriter writer, Block block, StreamBitReader reader)
        {
            // ReSharper disable once AssignmentInConditionalExpression
            if (block.OverrideGlobalNb = reader.ReadByte(1) > 0)
            {
                block.NeededBits = reader.ReadByte(Metadata.MaxNeededBitsNeededBitsNumber);
            }

            // ReSharper disable once AssignmentInConditionalExpression
            if (!Metadata.IsAbsolute)
            {
                if (block.AbsoluteSign = reader.ReadByte(1) > 0)
                {
                    block.IsSignNegative = reader.ReadByte(1) > 0;
                }
            }

            var hasAbsoluteSign = block.AbsoluteSign || Metadata.IsAbsolute;
            var isNegative      = block.AbsoluteSign && block.IsSignNegative || Metadata.IsAbsolute && Metadata.IsNegative;

            for (var i = 0; i < block.Length; i++)
            {
                var num = new OfcNumber();

                if (!hasAbsoluteSign)
                {
                    isNegative = reader.ReadByte(1) > 0;
                }

                num.Number = ((long)reader.Read(Metadata.MaxNeededBitsNumber)) * (isNegative ? -1 : 1);
                writer.Write(num);
            }

            return(block.Length);
        }
Beispiel #2
0
        public override int Read(IOfcNumberWriter writer, Block block, StreamBitReader reader)
        {
            var value = ReadSingleValueWithoutControlBit(reader, Metadata);

            for (var i = 0; i < block.Length; i++)
            {
                writer.Write(value);
            }

            return(block.Length);
        }
Beispiel #3
0
        public override int Read(IOfcNumberWriter writer, Block block, StreamBitReader reader)
        {
            var val1 = ReadSingleValueWithoutControlBit(reader, Metadata);
            var val2 = ReadSingleValueWithoutControlBit(reader, Metadata);

            var ppLength = reader.ReadByte(8);
            var total    = ppLength * block.Length;

            for (var i = 0; i < total; i++)
            {
                writer.Write(i % (ppLength * 2) >= ppLength ? val2 : val1);
            }

            return(total);
        }
        public override int Read(IOfcNumberWriter writer, Block block, StreamBitReader reader)
        {
            var val1 = ReadSingleValueWithoutControlBit(reader, Metadata);
            var val2 = ReadSingleValueWithoutControlBit(reader, Metadata);

            writer.Write(val1);
            writer.Write(val2);

            var difference = val2.SubtractEach(val1);

            for (var i = 1; i < block.Length - 1; i++)
            {
                writer.Write(difference.LinearMultiplyEach(i).AddEach(val2));
            }

            return(block.Length);
        }
Beispiel #5
0
 public BlockyDecompression([NotNull] Stream reader, [NotNull] IOfcNumberWriter writer) : this(reader)
 {
     _numberWriter = writer;
 }
Beispiel #6
0
 public BlockyDecompression([NotNull] Stream reader, [NotNull] IReporter <OfcNumber> target) : this(reader)
 {
     _writer       = target;
     _numberWriter = this;
 }
Beispiel #7
0
 public abstract int Read(IOfcNumberWriter writer, Block block, StreamBitReader reader);