@@ -209,12 +209,12 @@ func (w *huffmanBitWriter) generateCodegen(numLiterals int, numOffsets int, litE
209
209
// Copy the concatenated code sizes to codegen. Put a marker at the end.
210
210
cgnl := codegen [:numLiterals ]
211
211
for i := range cgnl {
212
- cgnl [i ] = uint8 (litEnc .codes [i ]. len )
212
+ cgnl [i ] = uint8 (litEnc .codes . len [i ])
213
213
}
214
214
215
215
cgnl = codegen [numLiterals : numLiterals + numOffsets ]
216
216
for i := range cgnl {
217
- cgnl [i ] = uint8 (offEnc .codes [i ]. len )
217
+ cgnl [i ] = uint8 (offEnc .codes . len [i ])
218
218
}
219
219
codegen [numLiterals + numOffsets ] = badCode
220
220
@@ -324,12 +324,12 @@ func (w *huffmanBitWriter) storedSize(in []byte) (int, bool) {
324
324
return 0 , false
325
325
}
326
326
327
- func (w * huffmanBitWriter ) writeCode (c hcode ) {
327
+ func (w * huffmanBitWriter ) writeCode (codes , lens [] uint16 , index uint32 ) {
328
328
if w .err != nil {
329
329
return
330
330
}
331
- w .bits |= uint64 (c . code ) << w .nbits
332
- w .nbits += uint (c . len )
331
+ w .bits |= uint64 (codes [ index ] ) << w .nbits
332
+ w .nbits += uint (lens [ index ] )
333
333
if w .nbits >= 48 {
334
334
bits := w .bits
335
335
w .bits >>= 48
@@ -370,7 +370,7 @@ func (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, n
370
370
w .writeBits (int32 (numCodegens - 4 ), 4 )
371
371
372
372
for i := 0 ; i < numCodegens ; i ++ {
373
- value := uint (w .codegenEncoding .codes [codegenOrder [i ]]. len )
373
+ value := uint (w .codegenEncoding .codes . len [codegenOrder [i ]])
374
374
w .writeBits (int32 (value ), 3 )
375
375
}
376
376
@@ -381,7 +381,7 @@ func (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, n
381
381
if codeWord == badCode {
382
382
break
383
383
}
384
- w .writeCode (w .codegenEncoding .codes [ uint32 (codeWord )] )
384
+ w .writeCode (w .codegenEncoding .codes . code , w . codegenEncoding . codes . len , uint32 (codeWord ))
385
385
386
386
switch codeWord {
387
387
case 16 :
@@ -574,19 +574,19 @@ func (w *huffmanBitWriter) indexTokens(tokens []token) (numLiterals, numOffsets
574
574
575
575
// writeTokens writes a slice of tokens to the output.
576
576
// codes for literal and offset encoding must be supplied.
577
- func (w * huffmanBitWriter ) writeTokens (tokens []token , leCodes , oeCodes [] hcode ) {
577
+ func (w * huffmanBitWriter ) writeTokens (tokens []token , leCodes , oeCodes hcode ) {
578
578
if w .err != nil {
579
579
return
580
580
}
581
581
for _ , t := range tokens {
582
582
if t < matchType {
583
- w .writeCode (leCodes [ t .literal ()] )
583
+ w .writeCode (leCodes . code , leCodes . len , t .literal ())
584
584
continue
585
585
}
586
586
// Write the length
587
587
length := t .length ()
588
588
lengthCode := lengthCode (length )
589
- w .writeCode (leCodes [ lengthCode + lengthCodesStart ] )
589
+ w .writeCode (leCodes . code , leCodes . len , lengthCode + lengthCodesStart )
590
590
extraLengthBits := uint (lengthExtraBits [lengthCode ])
591
591
if extraLengthBits > 0 {
592
592
extraLength := int32 (length - lengthBase [lengthCode ])
@@ -595,7 +595,7 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode)
595
595
// Write the offset
596
596
offset := t .offset ()
597
597
offsetCode := offsetCode (offset )
598
- w .writeCode (oeCodes [ offsetCode ] )
598
+ w .writeCode (oeCodes . code , oeCodes . len , offsetCode )
599
599
extraOffsetBits := uint (offsetExtraBits [offsetCode ])
600
600
if extraOffsetBits > 0 {
601
601
extraOffset := int32 (offset - offsetBase [offsetCode ])
@@ -658,13 +658,13 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte) {
658
658
659
659
// Huffman.
660
660
w .writeDynamicHeader (numLiterals , numOffsets , numCodegens , eof )
661
- encoding := w .literalEncoding .codes [:257 ]
661
+ encodingCode := w .literalEncoding .codes .code [:257 ]
662
+ encodingLen := w .literalEncoding .codes .len [:257 ]
662
663
n := w .nbytes
663
664
for _ , t := range input {
664
665
// Bitwriting inlined, ~30% speedup
665
- c := encoding [t ]
666
- w .bits |= uint64 (c .code ) << w .nbits
667
- w .nbits += uint (c .len )
666
+ w .bits |= uint64 (encodingCode [t ]) << w .nbits
667
+ w .nbits += uint (encodingLen [t ])
668
668
if w .nbits < 48 {
669
669
continue
670
670
}
@@ -690,7 +690,7 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte) {
690
690
n = 0
691
691
}
692
692
w .nbytes = n
693
- w .writeCode (encoding [ endBlockMarker ] )
693
+ w .writeCode (encodingCode , encodingLen , endBlockMarker )
694
694
}
695
695
696
696
// histogram accumulates a histogram of b in h.
0 commit comments