Merge pull request #910 from jdpurcell/pr-rangedecoderoptim

Optimize LZMA range decoder
This commit is contained in:
Adam Hathcock 2025-03-24 08:17:28 +00:00 committed by GitHub
commit 35ac2b9d71
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
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;
}
}