package flate
type fastEncL1 struct {
fastGen
table [tableSize]tableEntry
}
func ( *fastEncL1) ( *tokens, []byte) {
const (
= 12 - 1
= 1 + 1 +
= 5
)
for .cur >= bufferReset {
if len(.hist) == 0 {
clear(.table[:])
.cur = maxMatchOffset
break
}
:= .cur + int32(len(.hist)) - maxMatchOffset
for := range .table[:] {
:= .table[].offset
if <= {
= 0
} else {
= - .cur + maxMatchOffset
}
.table[].offset =
}
.cur = maxMatchOffset
}
:= .addBlock()
if len() < {
.n = uint16(len())
return
}
= .hist
:=
:= int32(len() - )
:= loadLE64(, )
for {
const = 5
const = 2
:=
var tableEntry
var int32
for {
:= hashLen(, tableBits, )
= .table[]
= + + (-)>>
if > {
goto
}
:= loadLE64(, )
.table[] = tableEntry{offset: + .cur}
= hashLen(, tableBits, )
= .offset - .cur
if - < maxMatchOffset && uint32() == loadLE32(, ) {
.table[] = tableEntry{offset: + .cur}
break
}
=
=
++
= .table[]
>>= 8
.table[] = tableEntry{offset: + .cur}
= .offset - .cur
if - < maxMatchOffset && uint32() == loadLE32(, ) {
.table[] = tableEntry{offset: + .cur}
break
}
=
=
}
for {
:= .matchLenLong(int(+4), int(+4), ) + 4
for > 0 && > && loadLE8(, -1) == loadLE8(, -1) {
--
--
++
}
if < {
for , := range [:] {
.tokens[.n] = token()
.litHist[]++
.n++
}
}
:= uint32( - - baseMatchOffset)
:=
:= offsetCode()
|= << 16
for > 0 {
:=
if > 258 {
if > 258+baseMatchLength {
= 258
} else {
= 258 - baseMatchLength
}
}
-=
-= baseMatchLength
.extraHist[lengthCodes1[uint8()]]++
.offHist[]++
.tokens[.n] = token(matchType | uint32()<<lengthShift | )
.n++
}
+=
=
if >= {
= + 1
}
if >= {
if int(++8) < len() {
:= loadLE64(, )
.table[hashLen(, tableBits, )] = tableEntry{offset: + .cur}
}
goto
}
:= loadLE64(, -2)
:= .cur + - 2
:= hashLen(, tableBits, )
.table[] = tableEntry{offset: }
>>= 16
:= hashLen(, tableBits, )
= .table[]
.table[] = tableEntry{offset: + 2}
= .offset - .cur
if - > maxMatchOffset || uint32() != loadLE32(, ) {
= >> 8
++
break
}
}
}
:
if int() < len() {
if .n == 0 {
return
}
emitLiterals(, [:])
}
}