11// Copyright (c) Six Labors.
22// Licensed under the Apache License, Version 2.0.
33
4- using System . Collections . Generic ;
54using System . Runtime . CompilerServices ;
65using SixLabors . ImageSharp . Formats . Tiff . Constants ;
76using SixLabors . ImageSharp . IO ;
@@ -16,38 +15,23 @@ internal sealed class T6BitReader : T4BitReader
1615 {
1716 private readonly int maxCodeLength = 12 ;
1817
19- private static readonly CcittTwoDimensionalCode None = new ( CcittTwoDimensionalCodeType . None , 0 ) ;
18+ private static readonly CcittTwoDimensionalCode None = new ( 0 , CcittTwoDimensionalCodeType . None , 0 ) ;
2019
21- private static readonly Dictionary < uint , CcittTwoDimensionalCode > Len1Codes = new ( )
22- {
23- { 0b1 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . Vertical0 , 1 ) }
24- } ;
20+ private static readonly CcittTwoDimensionalCode Len1Code1 = new ( 0b1 , CcittTwoDimensionalCodeType . Vertical0 , 1 ) ;
2521
26- private static readonly Dictionary < uint , CcittTwoDimensionalCode > Len3Codes = new ( )
27- {
28- { 0b001 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . Horizontal , 3 ) } ,
29- { 0b010 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . VerticalL1 , 3 ) } ,
30- { 0b011 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . VerticalR1 , 3 ) }
31- } ;
22+ private static readonly CcittTwoDimensionalCode Len3Code001 = new ( 0b001 , CcittTwoDimensionalCodeType . Horizontal , 3 ) ;
23+ private static readonly CcittTwoDimensionalCode Len3Code010 = new ( 0b010 , CcittTwoDimensionalCodeType . VerticalL1 , 3 ) ;
24+ private static readonly CcittTwoDimensionalCode Len3Code011 = new ( 0b011 , CcittTwoDimensionalCodeType . VerticalR1 , 3 ) ;
3225
33- private static readonly Dictionary < uint , CcittTwoDimensionalCode > Len4Codes = new ( )
34- {
35- { 0b0001 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . Pass , 4 ) }
36- } ;
26+ private static readonly CcittTwoDimensionalCode Len4Code0001 = new ( 0b0001 , CcittTwoDimensionalCodeType . Pass , 4 ) ;
3727
38- private static readonly Dictionary < uint , CcittTwoDimensionalCode > Len6Codes = new ( )
39- {
40- { 0b000011 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . VerticalR2 , 6 ) } ,
41- { 0b000010 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . VerticalL2 , 6 ) }
42- } ;
28+ private static readonly CcittTwoDimensionalCode Len6Code000011 = new ( 0b000011 , CcittTwoDimensionalCodeType . VerticalR2 , 6 ) ;
29+ private static readonly CcittTwoDimensionalCode Len6Code000010 = new ( 0b000010 , CcittTwoDimensionalCodeType . VerticalL2 , 6 ) ;
4330
44- private static readonly Dictionary < uint , CcittTwoDimensionalCode > Len7Codes = new ( )
45- {
46- { 0b0000011 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . VerticalR3 , 7 ) } ,
47- { 0b0000010 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . VerticalL3 , 7 ) } ,
48- { 0b0000001 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . Extensions2D , 7 ) } ,
49- { 0b0000000 , new CcittTwoDimensionalCode ( CcittTwoDimensionalCodeType . Extensions1D , 7 ) }
50- } ;
31+ private static readonly CcittTwoDimensionalCode Len7Code0000011 = new ( 0b0000011 , CcittTwoDimensionalCodeType . VerticalR3 , 7 ) ;
32+ private static readonly CcittTwoDimensionalCode Len7Code0000010 = new ( 0b0000010 , CcittTwoDimensionalCodeType . VerticalL3 , 7 ) ;
33+ private static readonly CcittTwoDimensionalCode Len7Code0000001 = new ( 0b0000001 , CcittTwoDimensionalCodeType . Extensions2D , 7 ) ;
34+ private static readonly CcittTwoDimensionalCode Len7Code0000000 = new ( 0b0000000 , CcittTwoDimensionalCodeType . Extensions1D , 7 ) ;
5135
5236 /// <summary>
5337 /// Initializes a new instance of the <see cref="T6BitReader"/> class.
@@ -61,7 +45,7 @@ public T6BitReader(BufferedReadStream input, TiffFillOrder fillOrder, int bytesT
6145 }
6246
6347 /// <inheritdoc/>
64- public override bool HasMoreData => this . Position < ( ulong ) this . DataLength - 1 || ( ( uint ) ( this . BitsRead - 1 ) < ( 7 - 1 ) ) ;
48+ public override bool HasMoreData => this . Position < ( ulong ) this . DataLength - 1 || ( uint ) ( this . BitsRead - 1 ) < ( 7 - 1 ) ;
6549
6650 /// <summary>
6751 /// Gets or sets the two dimensional code.
@@ -84,45 +68,81 @@ public bool ReadNextCodeWord()
8468 switch ( this . CurValueBitsRead )
8569 {
8670 case 1 :
87- if ( Len1Codes . ContainsKey ( value ) )
71+ if ( value == Len1Code1 . Code )
8872 {
89- this . Code = Len1Codes [ value ] ;
73+ this . Code = Len1Code1 ;
9074 return false ;
9175 }
9276
9377 break ;
9478
9579 case 3 :
96- if ( Len3Codes . ContainsKey ( value ) )
80+ if ( value == Len3Code001 . Code )
9781 {
98- this . Code = Len3Codes [ value ] ;
82+ this . Code = Len3Code001 ;
83+ return false ;
84+ }
85+
86+ if ( value == Len3Code010 . Code )
87+ {
88+ this . Code = Len3Code010 ;
89+ return false ;
90+ }
91+
92+ if ( value == Len3Code011 . Code )
93+ {
94+ this . Code = Len3Code011 ;
9995 return false ;
10096 }
10197
10298 break ;
10399
104100 case 4 :
105- if ( Len4Codes . ContainsKey ( value ) )
101+ if ( value == Len4Code0001 . Code )
106102 {
107- this . Code = Len4Codes [ value ] ;
103+ this . Code = Len4Code0001 ;
108104 return false ;
109105 }
110106
111107 break ;
112108
113109 case 6 :
114- if ( Len6Codes . ContainsKey ( value ) )
110+ if ( value == Len6Code000010 . Code )
115111 {
116- this . Code = Len6Codes [ value ] ;
112+ this . Code = Len6Code000010 ;
113+ return false ;
114+ }
115+
116+ if ( value == Len6Code000011 . Code )
117+ {
118+ this . Code = Len6Code000011 ;
117119 return false ;
118120 }
119121
120122 break ;
121123
122124 case 7 :
123- if ( Len7Codes . ContainsKey ( value ) )
125+ if ( value == Len7Code0000000 . Code )
126+ {
127+ this . Code = Len7Code0000000 ;
128+ return false ;
129+ }
130+
131+ if ( value == Len7Code0000001 . Code )
132+ {
133+ this . Code = Len7Code0000001 ;
134+ return false ;
135+ }
136+
137+ if ( value == Len7Code0000011 . Code )
138+ {
139+ this . Code = Len7Code0000011 ;
140+ return false ;
141+ }
142+
143+ if ( value == Len7Code0000010 . Code )
124144 {
125- this . Code = Len7Codes [ value ] ;
145+ this . Code = Len7Code0000010 ;
126146 return false ;
127147 }
128148
0 commit comments