2121//
2222
2323using System ;
24+ using System . Diagnostics . CodeAnalysis ;
2425using System . IO ;
2526using System . Threading ;
2627using System . Threading . Tasks ;
@@ -39,17 +40,17 @@ internal class LzxStream : ReadOnlyCompatibilityStream
3940{
4041 private static readonly uint [ ] _positionSlots ;
4142 private static readonly uint [ ] _extraBits ;
42- private HuffmanTree _alignedOffsetTree ;
43+ private HuffmanTree ? _alignedOffsetTree ;
4344
4445 private readonly LzxBitStream _bitStream ;
4546
4647 private byte [ ] _buffer ;
4748 private int _bufferCount ;
4849 private readonly int _fileSize ;
49- private HuffmanTree _lengthTree ;
50+ private HuffmanTree ? _lengthTree ;
5051
5152 // Block state
52- private HuffmanTree _mainTree ;
53+ private HuffmanTree ? _mainTree ;
5354 private readonly int _numPositionSlots ;
5455
5556 private long _position ;
@@ -162,7 +163,6 @@ private void ReadBlocks()
162163 {
163164 var blockType = ( BlockType ) _bitStream . Read ( 3 ) ;
164165
165- _buffer = new byte [ 32768 ] ;
166166 _bufferCount = 0 ;
167167
168168 while ( blockType != BlockType . None )
@@ -240,6 +240,7 @@ private void DecodeUncompressedBlock(int blockSize)
240240 }
241241 }
242242
243+ [ MemberNotNull ( nameof ( _mainTree ) , nameof ( _lengthTree ) ) ]
243244 private void DecodeCompressedBlock ( BlockType blockType , int blockSize )
244245 {
245246 if ( blockType == BlockType . AlignedOffset )
@@ -296,7 +297,7 @@ private void DecodeCompressedBlock(BlockType blockType, int blockSize)
296297 if ( extra >= 3 )
297298 {
298299 verbatimBits = _bitStream . Read ( extra - 3 ) << 3 ;
299- alignedBits = _alignedOffsetTree . NextSymbol ( _bitStream ) ;
300+ alignedBits = _alignedOffsetTree ! . NextSymbol ( _bitStream ) ;
300301 }
301302 else if ( extra > 0 )
302303 {
@@ -331,6 +332,7 @@ private void DecodeCompressedBlock(BlockType blockType, int blockSize)
331332 }
332333 }
333334
335+ [ MemberNotNull ( nameof ( _mainTree ) ) ]
334336 private void ReadMainTree ( )
335337 {
336338 uint [ ] lengths ;
@@ -352,6 +354,7 @@ private void ReadMainTree()
352354 _mainTree = new HuffmanTree ( lengths ) ;
353355 }
354356
357+ [ MemberNotNull ( nameof ( _lengthTree ) ) ]
355358 private void ReadLengthTree ( )
356359 {
357360 var preTree = ReadFixedHuffmanTree ( 20 , 4 ) ;
@@ -369,7 +372,7 @@ private HuffmanTree ReadFixedHuffmanTree(int count, int bits)
369372 return new HuffmanTree ( treeLengths ) ;
370373 }
371374
372- private HuffmanTree ReadDynamicHuffmanTree ( int count , HuffmanTree preTree , HuffmanTree oldTree )
375+ private HuffmanTree ReadDynamicHuffmanTree ( int count , HuffmanTree preTree , HuffmanTree ? oldTree )
373376 {
374377 uint [ ] lengths ;
375378
0 commit comments