@@ -137,14 +137,16 @@ final class Decode {
137
137
private static int log2floor (int i ) {
138
138
int result = -1 ;
139
139
int step = 16 ;
140
+ int v = i ;
140
141
while (step > 0 ) {
141
- if ((i >>> step ) != 0 ) {
142
+ int next = v >>> step ;
143
+ if (next != 0 ) {
142
144
result += step ;
143
- i = i >>> step ;
145
+ v = next ;
144
146
}
145
147
step = step >> 1 ;
146
148
}
147
- return result + i ;
149
+ return result + v ;
148
150
}
149
151
150
152
private static int calculateDistanceAlphabetSize (int npostfix , int ndirect , int maxndistbits ) {
@@ -164,14 +166,12 @@ private static int calculateDistanceAlphabetLimit(int maxDistance, int npostfix,
164
166
}
165
167
166
168
private static void unpackCommandLookupTable (short [] cmdLookup ) {
167
- final short [] insertLengthOffsets = new short [24 ];
168
- final short [] copyLengthOffsets = new short [24 ];
169
+ final int [] insertLengthOffsets = new int [24 ];
170
+ final int [] copyLengthOffsets = new int [24 ];
169
171
copyLengthOffsets [0 ] = 2 ;
170
172
for (int i = 0 ; i < 23 ; ++i ) {
171
- insertLengthOffsets [i + 1 ] =
172
- (short ) (insertLengthOffsets [i ] + (1 << INSERT_LENGTH_N_BITS [i ]));
173
- copyLengthOffsets [i + 1 ] =
174
- (short ) (copyLengthOffsets [i ] + (1 << COPY_LENGTH_N_BITS [i ]));
173
+ insertLengthOffsets [i + 1 ] = insertLengthOffsets [i ] + (1 << (int ) INSERT_LENGTH_N_BITS [i ]);
174
+ copyLengthOffsets [i + 1 ] = copyLengthOffsets [i ] + (1 << (int ) COPY_LENGTH_N_BITS [i ]);
175
175
}
176
176
177
177
for (int cmdCode = 0 ; cmdCode < NUM_COMMAND_CODES ; ++cmdCode ) {
@@ -184,14 +184,15 @@ private static void unpackCommandLookupTable(short[] cmdLookup) {
184
184
}
185
185
final int insertCode = (((0x29850 >>> (rangeIdx * 2 )) & 0x3 ) << 3 ) | ((cmdCode >>> 3 ) & 7 );
186
186
final int copyCode = (((0x26244 >>> (rangeIdx * 2 )) & 0x3 ) << 3 ) | (cmdCode & 7 );
187
- final short copyLengthOffset = copyLengthOffsets [copyCode ];
187
+ final int copyLengthOffset = copyLengthOffsets [copyCode ];
188
188
final int distanceContext =
189
- distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2 );
189
+ distanceContextOffset + (copyLengthOffset > 4 ? 3 : ( copyLengthOffset - 2 ) );
190
190
final int index = cmdCode * 4 ;
191
191
cmdLookup [index + 0 ] =
192
- (short ) (INSERT_LENGTH_N_BITS [insertCode ] | (COPY_LENGTH_N_BITS [copyCode ] << 8 ));
193
- cmdLookup [index + 1 ] = insertLengthOffsets [insertCode ];
194
- cmdLookup [index + 2 ] = copyLengthOffsets [copyCode ];
192
+ (short )
193
+ ((int ) INSERT_LENGTH_N_BITS [insertCode ] | ((int ) COPY_LENGTH_N_BITS [copyCode ] << 8 ));
194
+ cmdLookup [index + 1 ] = (short ) insertLengthOffsets [insertCode ];
195
+ cmdLookup [index + 2 ] = (short ) copyLengthOffsets [copyCode ];
195
196
cmdLookup [index + 3 ] = (short ) distanceContext ;
196
197
}
197
198
}
@@ -357,7 +358,7 @@ private static void decodeMetaBlockLength(State s) {
357
358
if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1 ) {
358
359
throw new BrotliRuntimeException ("Exuberant nibble" );
359
360
}
360
- s .metaBlockLength | = bits << (i * 8 );
361
+ s .metaBlockLength + = bits << (i * 8 );
361
362
}
362
363
} else {
363
364
for (int i = 0 ; i < sizeNibbles ; ++i ) {
@@ -366,7 +367,7 @@ private static void decodeMetaBlockLength(State s) {
366
367
if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4 ) {
367
368
throw new BrotliRuntimeException ("Exuberant nibble" );
368
369
}
369
- s .metaBlockLength | = bits << (i * 4 );
370
+ s .metaBlockLength + = bits << (i * 4 );
370
371
}
371
372
}
372
373
s .metaBlockLength ++;
@@ -380,8 +381,8 @@ private static void decodeMetaBlockLength(State s) {
380
381
*/
381
382
private static int readSymbol (int [] tableGroup , int tableIdx , State s ) {
382
383
int offset = tableGroup [tableIdx ];
383
- final int val = BitReader .peekBits (s );
384
- offset += val & HUFFMAN_TABLE_MASK ;
384
+ final int v = BitReader .peekBits (s );
385
+ offset += v & HUFFMAN_TABLE_MASK ;
385
386
final int bits = tableGroup [offset ] >> 16 ;
386
387
final int sym = tableGroup [offset ] & 0xFFFF ;
387
388
if (bits <= HUFFMAN_TABLE_BITS ) {
@@ -390,7 +391,7 @@ private static int readSymbol(int[] tableGroup, int tableIdx, State s) {
390
391
}
391
392
offset += sym ;
392
393
final int mask = (1 << bits ) - 1 ;
393
- offset += (val & mask ) >>> HUFFMAN_TABLE_BITS ;
394
+ offset += (v & mask ) >>> HUFFMAN_TABLE_BITS ;
394
395
s .bitOffset += ((tableGroup [offset ] >> 16 ) + HUFFMAN_TABLE_BITS );
395
396
return tableGroup [offset ] & 0xFFFF ;
396
397
}
@@ -404,10 +405,11 @@ private static int readBlockLength(int[] tableGroup, int tableIdx, State s) {
404
405
}
405
406
406
407
private static void moveToFront (int [] v , int index ) {
407
- final int value = v [index ];
408
- while (index > 0 ) {
409
- v [index ] = v [index - 1 ];
410
- index --;
408
+ int i = index ;
409
+ final int value = v [i ];
410
+ while (i > 0 ) {
411
+ v [i ] = v [i - 1 ];
412
+ i --;
411
413
}
412
414
v [0 ] = value ;
413
415
}
@@ -418,7 +420,7 @@ private static void inverseMoveToFrontTransform(byte[] v, int vLen) {
418
420
mtf [i ] = i ;
419
421
}
420
422
for (int i = 0 ; i < vLen ; ++i ) {
421
- final int index = v [i ] & 0xFF ;
423
+ final int index = ( int ) v [i ] & 0xFF ;
422
424
v [i ] = (byte ) mtf [index ];
423
425
if (index != 0 ) {
424
426
moveToFront (mtf , index );
@@ -463,7 +465,7 @@ private static void readHuffmanCodeLengths(
463
465
final int oldRepeat = repeat ;
464
466
if (repeat > 0 ) {
465
467
repeat -= 2 ;
466
- repeat <<= extraBits ;
468
+ repeat = repeat << extraBits ;
467
469
}
468
470
BitReader .fillBitWindow (s );
469
471
repeat += BitReader .readFewBits (s , extraBits ) + 3 ;
@@ -689,8 +691,8 @@ private static void decodeLiteralBlockSwitch(State s) {
689
691
s .literalBlockLength = decodeBlockTypeAndLength (s , 0 , s .numLiteralBlockTypes );
690
692
final int literalBlockType = s .rings [5 ];
691
693
s .contextMapSlice = literalBlockType << LITERAL_CONTEXT_BITS ;
692
- s .literalTreeIdx = s .contextMap [s .contextMapSlice ] & 0xFF ;
693
- final int contextMode = s .contextModes [literalBlockType ];
694
+ s .literalTreeIdx = ( int ) s .contextMap [s .contextMapSlice ] & 0xFF ;
695
+ final int contextMode = ( int ) s .contextModes [literalBlockType ];
694
696
s .contextLookupOffset1 = contextMode << 9 ;
695
697
s .contextLookupOffset2 = s .contextLookupOffset1 + 256 ;
696
698
}
@@ -711,7 +713,7 @@ private static void maybeReallocateRingBuffer(State s) {
711
713
/* TODO(eustas): Handle 2GB+ cases more gracefully. */
712
714
final int minimalNewSize = s .expectedTotalSize ;
713
715
while ((newSize >> 1 ) > minimalNewSize ) {
714
- newSize >>= 1 ;
716
+ newSize = newSize >> 1 ;
715
717
}
716
718
if ((s .inputEnd == 0 ) && newSize < 16384 && s .maxRingBufferSize >= 16384 ) {
717
719
newSize = 16384 ;
@@ -722,8 +724,9 @@ private static void maybeReallocateRingBuffer(State s) {
722
724
}
723
725
final int ringBufferSizeWithSlack = newSize + MAX_TRANSFORMED_WORD_LENGTH ;
724
726
final byte [] newBuffer = new byte [ringBufferSizeWithSlack ];
725
- if (s .ringBuffer .length != 0 ) {
726
- System .arraycopy (s .ringBuffer , 0 , newBuffer , 0 , s .ringBufferSize );
727
+ final byte [] oldBuffer = s .ringBuffer ;
728
+ if (oldBuffer .length != 0 ) {
729
+ System .arraycopy (oldBuffer , 0 , newBuffer , 0 , s .ringBufferSize );
727
730
}
728
731
s .ringBuffer = newBuffer ;
729
732
s .ringBufferSize = newSize ;
@@ -850,7 +853,7 @@ private static void readMetablockHuffmanCodesAndContextMaps(State s) {
850
853
final int numLiteralTrees = decodeContextMap (contextMapLength , s .contextMap , s );
851
854
s .trivialLiteralContext = 1 ;
852
855
for (int j = 0 ; j < contextMapLength ; ++j ) {
853
- if (s .contextMap [j ] != j >> LITERAL_CONTEXT_BITS ) {
856
+ if (( int ) s .contextMap [j ] != j >> LITERAL_CONTEXT_BITS ) {
854
857
s .trivialLiteralContext = 0 ;
855
858
break ;
856
859
}
@@ -1021,7 +1024,7 @@ private static void initializeCompoundDictionaryCopy(State s, int address, int l
1021
1024
if (s .cdBlockBits == -1 ) {
1022
1025
initializeCompoundDictionary (s );
1023
1026
}
1024
- int index = s .cdBlockMap [address >>> s .cdBlockBits ];
1027
+ int index = ( int ) s .cdBlockMap [address >>> s .cdBlockBits ];
1025
1028
while (address >= s .cdChunkOffsets [index + 1 ]) {
1026
1029
index ++;
1027
1030
}
@@ -1123,10 +1126,10 @@ static void decompress(State s) {
1123
1126
s .commandBlockLength --;
1124
1127
BitReader .fillBitWindow (s );
1125
1128
final int cmdCode = readSymbol (s .commandTreeGroup , s .commandTreeIdx , s ) << 2 ;
1126
- final short insertAndCopyExtraBits = CMD_LOOKUP [cmdCode ];
1127
- final int insertLengthOffset = CMD_LOOKUP [cmdCode + 1 ];
1128
- final int copyLengthOffset = CMD_LOOKUP [cmdCode + 2 ];
1129
- s .distanceCode = CMD_LOOKUP [cmdCode + 3 ];
1129
+ final int insertAndCopyExtraBits = ( int ) CMD_LOOKUP [cmdCode ];
1130
+ final int insertLengthOffset = ( int ) CMD_LOOKUP [cmdCode + 1 ];
1131
+ final int copyLengthOffset = ( int ) CMD_LOOKUP [cmdCode + 2 ];
1132
+ s .distanceCode = ( int ) CMD_LOOKUP [cmdCode + 3 ];
1130
1133
BitReader .fillBitWindow (s );
1131
1134
{
1132
1135
final int insertLengthExtraBits = insertAndCopyExtraBits & 0xFF ;
@@ -1161,16 +1164,17 @@ static void decompress(State s) {
1161
1164
}
1162
1165
}
1163
1166
} else {
1164
- int prevByte1 = ringBuffer [(s .pos - 1 ) & ringBufferMask ] & 0xFF ;
1165
- int prevByte2 = ringBuffer [(s .pos - 2 ) & ringBufferMask ] & 0xFF ;
1167
+ int prevByte1 = ( int ) ringBuffer [(s .pos - 1 ) & ringBufferMask ] & 0xFF ;
1168
+ int prevByte2 = ( int ) ringBuffer [(s .pos - 2 ) & ringBufferMask ] & 0xFF ;
1166
1169
while (s .j < s .insertLength ) {
1167
1170
BitReader .readMoreInput (s );
1168
1171
if (s .literalBlockLength == 0 ) {
1169
1172
decodeLiteralBlockSwitch (s );
1170
1173
}
1171
1174
final int literalContext = Context .LOOKUP [s .contextLookupOffset1 + prevByte1 ]
1172
1175
| Context .LOOKUP [s .contextLookupOffset2 + prevByte2 ];
1173
- final int literalTreeIdx = s .contextMap [s .contextMapSlice + literalContext ] & 0xFF ;
1176
+ final int literalTreeIdx =
1177
+ (int ) s .contextMap [s .contextMapSlice + literalContext ] & 0xFF ;
1174
1178
s .literalBlockLength --;
1175
1179
prevByte2 = prevByte1 ;
1176
1180
BitReader .fillBitWindow (s );
@@ -1204,7 +1208,8 @@ static void decompress(State s) {
1204
1208
}
1205
1209
s .distanceBlockLength --;
1206
1210
BitReader .fillBitWindow (s );
1207
- final int distTreeIdx = s .distContextMap [s .distContextMapSlice + distanceCode ] & 0xFF ;
1211
+ final int distTreeIdx =
1212
+ (int ) s .distContextMap [s .distContextMapSlice + distanceCode ] & 0xFF ;
1208
1213
distanceCode = readSymbol (s .distanceTreeGroup , distTreeIdx , s );
1209
1214
if (distanceCode < NUM_DISTANCE_SHORT_CODES ) {
1210
1215
final int index =
@@ -1214,7 +1219,7 @@ static void decompress(State s) {
1214
1219
throw new BrotliRuntimeException ("Negative distance" ); // COV_NF_LINE
1215
1220
}
1216
1221
} else {
1217
- final int extraBits = s .distExtraBits [distanceCode ];
1222
+ final int extraBits = ( int ) s .distExtraBits [distanceCode ];
1218
1223
int bits ;
1219
1224
if (s .bitOffset + extraBits <= BitReader .BITNESS ) {
1220
1225
bits = BitReader .readFewBits (s , extraBits );
@@ -1337,7 +1342,7 @@ static void decompress(State s) {
1337
1342
if (s .pos > s .ringBufferSize ) {
1338
1343
Utils .copyBytesWithin (ringBuffer , 0 , s .ringBufferSize , s .pos );
1339
1344
}
1340
- s .pos &= ringBufferMask ;
1345
+ s .pos = s . pos & ringBufferMask ;
1341
1346
s .ringBufferBytesWritten = 0 ;
1342
1347
}
1343
1348
s .runningState = s .nextRunningState ;
0 commit comments