@@ -256,17 +256,17 @@ bool LZXCodec<T>::forward(SliceArray<byte>& input, SliceArray<byte>& output, int
256
256
// Emit match
257
257
srcInc = 0 ;
258
258
259
- // Token: 3 bits litLen + 1 bit flag + 4 bits mLen (LLLFFMMM)
259
+ // Token: 3 bits litLen + 2 bits flag + 3 bits mLen (LLLFFMMM)
260
260
// LLL : <= 7 --> LLL == literal length (if 7, remainder encoded outside of token)
261
261
// MMM : <= 6 --> MMMM == match length (if 6, remainder encoded outside of token)
262
262
// FF : if MMM == 7
263
- // FF = 00 if dist == repd0
264
- // FF = 01 if dist == repd1
263
+ // FF = x0 if dist == repd0
264
+ // FF = x1 if dist == repd1
265
265
// else
266
- // FF= 00 => 1 byte dist
267
- // FF= 01 => 2 byte dist
268
- // FF= 10 => 3 byte dist
269
- // FF= 11 => 3 byte dist
266
+ // FF = 00 => 1 byte dist
267
+ // FF = 01 => 2 byte dist
268
+ // FF = 10 => 2 byte dist
269
+ // FF = 11 => 3 byte dist
270
270
const int dist = srcIdx - ref;
271
271
int token;
272
272
@@ -280,17 +280,21 @@ bool LZXCodec<T>::forward(SliceArray<byte>& input, SliceArray<byte>& output, int
280
280
}
281
281
else {
282
282
// Emit distance (since not repeat)
283
- int flag = 0 ;
283
+ int flag;
284
284
285
285
if (dist >= 65536 ) {
286
- _mBuf[mIdx ++] = byte (dist >> 16 );
286
+ _mBuf[mIdx ] = byte (dist >> 16 );
287
+ _mBuf[mIdx + 1 ] = byte (dist >> 8 );
288
+ mIdx += 2 ;
287
289
flag = 2 ;
288
290
}
291
+ else {
292
+ _mBuf[mIdx ] = byte (dist >> 8 );
293
+ const int inc = (dist >= 256 ? 1 : 0 );
294
+ mIdx += inc;
295
+ flag = inc;
296
+ }
289
297
290
- _mBuf[mIdx ] = byte (dist >> 8 );
291
- const int inc = (dist >= 256 ? 1 : 0 );
292
- mIdx += inc;
293
- flag += inc;
294
298
_mBuf[mIdx ++] = byte (dist);
295
299
const int mLen = bestLen - minMatch;
296
300
@@ -469,11 +473,11 @@ bool LZXCodec<T>::inverse(SliceArray<byte>& input, SliceArray<byte>& output, int
469
473
else {
470
474
// Read mLen remainder (if any) outside of token
471
475
mLen = (mLen == 6 ) ? 6 + minMatch + readLength (src, mLenIdx ) : mLen + minMatch;
476
+ const int f2 = (token >> 4 ) & 1 ;
477
+ const int f1 = ((token >> 4 ) | (token >> 3 )) & 1 ;
472
478
dist = int (src[mIdx ++]);
473
- const int f1 = (token >> 3 ) & 1 ;
474
479
dist = (dist << (8 * f1)) | (-f1 & int (src[mIdx ]));
475
480
mIdx += f1;
476
- const int f2 = (token >> 4 ) & 1 ;
477
481
dist = (dist << (8 * f2)) | (-f2 & int (src[mIdx ]));
478
482
mIdx += f2;
479
483
}
0 commit comments