// Copyright 2019+ Klaus Post. All rights reserved.// License information can be found in the LICENSE file.// Based on work by Yann Collet, released under BSD License.package zstdimporttype seqCoders struct { llEnc, ofEnc, mlEnc *fseEncoder llPrev, ofPrev, mlPrev *fseEncoder}// swap coders with another (block).func ( *seqCoders) ( *seqCoders) { *, * = *, *}// setPrev will update the previous encoders to the actually used ones// and make sure a fresh one is in the main slot.func ( *seqCoders) (, , *fseEncoder) { := func( *fseEncoder, , **fseEncoder) {// We used the new one, more current to history and reuse the previous historyif * == { *, * = *, * := * := * .reUsed = false .reUsed = truereturn }if == * {return }// Ensure we cannot reuse by accident := * .symbolLen = 0 } (, &.llEnc, &.llPrev) (, &.mlEnc, &.mlPrev) (, &.ofEnc, &.ofPrev)}func highBit( uint32) ( uint32) {returnuint32(bits.Len32() - 1)}var llCodeTable = [64]byte{0, 1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12, 13, 14, 15,16, 16, 17, 17, 18, 18, 19, 19,20, 20, 20, 20, 21, 21, 21, 21,22, 22, 22, 22, 22, 22, 22, 22,23, 23, 23, 23, 23, 23, 23, 23,24, 24, 24, 24, 24, 24, 24, 24,24, 24, 24, 24, 24, 24, 24, 24}// Up to 6 bitsconst maxLLCode = 35// llBitsTable translates from ll code to number of bits.var llBitsTable = [maxLLCode + 1]byte{0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,1, 1, 1, 1, 2, 2, 3, 3,4, 6, 7, 8, 9, 10, 11, 12,13, 14, 15, 16}// llCode returns the code that represents the literal length requested.func llCode( uint32) uint8 {const = 19if <= 63 {returnllCodeTable[&63] }returnuint8(highBit()) + }var mlCodeTable = [128]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}// Up to 6 bitsconst maxMLCode = 52// mlBitsTable translates from ml code to number of bits.var mlBitsTable = [maxMLCode + 1]byte{0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,1, 1, 1, 1, 2, 2, 3, 3,4, 4, 5, 7, 8, 9, 10, 11,12, 13, 14, 15, 16}// note : mlBase = matchLength - MINMATCH;// because it's the format it's stored in seqStore->sequencesfunc mlCode( uint32) uint8 {const = 36if <= 127 {returnmlCodeTable[&127] }returnuint8(highBit()) + }func ofCode( uint32) uint8 {// A valid offset will always be > 0.returnuint8(bits.Len32() - 1)}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.