Optimize LZMA range decoder

This commit is contained in:
J.D. Purcell
2025-03-22 17:14:38 -04:00
parent 227f66f299
commit 14affd8ffa
2 changed files with 4 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
#nullable disable
using System.IO;
using System.Runtime.CompilerServices;
namespace SharpCompress.Compressors.LZMA.RangeCoder;
@@ -152,6 +153,7 @@ internal class Decoder
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Normalize2()
{
if (_range < K_TOP_VALUE)

View File

@@ -107,24 +107,13 @@ internal struct BitDecoder
{
rangeDecoder._range = newBound;
_prob += (K_BIT_MODEL_TOTAL - _prob) >> K_NUM_MOVE_BITS;
if (rangeDecoder._range < Decoder.K_TOP_VALUE)
{
rangeDecoder._code =
(rangeDecoder._code << 8) | (byte)rangeDecoder._stream.ReadByte();
rangeDecoder._range <<= 8;
rangeDecoder._total++;
}
rangeDecoder.Normalize2();
return 0;
}
rangeDecoder._range -= newBound;
rangeDecoder._code -= newBound;
_prob -= (_prob) >> K_NUM_MOVE_BITS;
if (rangeDecoder._range < Decoder.K_TOP_VALUE)
{
rangeDecoder._code = (rangeDecoder._code << 8) | (byte)rangeDecoder._stream.ReadByte();
rangeDecoder._range <<= 8;
rangeDecoder._total++;
}
rangeDecoder.Normalize2();
return 1;
}
}