package flate
const (
l2TableBits = 17
l2TableSize = 1 << l2TableBits
)
type fastEncL2 struct {
fastGen
table [l2TableSize]tableEntry
}
func ( *fastEncL2) ( *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
for {
:= hashLen(, l2TableBits, )
=
= + + (-)>>
if > {
goto
}
= .table[]
:= loadLE64(, )
.table[] = tableEntry{offset: + .cur}
= hashLen(, l2TableBits, )
:= - (.offset - .cur)
if < maxMatchOffset && uint32() == loadLE32(, .offset-.cur) {
.table[] = tableEntry{offset: + .cur}
break
}
=
=
++
= .table[]
>>= 8
.table[] = tableEntry{offset: + .cur}
= - (.offset - .cur)
if < maxMatchOffset && uint32() == loadLE32(, .offset-.cur) {
break
}
=
}
for {
:= .offset - .cur
:= .matchLenLong(int(+4), int(+4), ) + 4
for > 0 && > && [-1] == [-1] {
--
--
++
}
if < {
for , := range [:] {
.tokens[.n] = token()
.litHist[]++
.n++
}
}
.AddMatchLong(, uint32(--baseMatchOffset))
+=
=
if >= {
= + 1
}
if >= {
if int(++8) < len() {
:= loadLE64(, )
.table[hashLen(, l2TableBits, )] = tableEntry{offset: + .cur}
}
goto
}
for := - + 2; < -5; += 7 {
:= loadLE64(, )
:= hashLen(, l2TableBits, )
.table[] = tableEntry{offset: .cur + }
>>= 16
= hashLen(, l2TableBits, )
.table[] = tableEntry{offset: .cur + + 2}
>>= 16
= hashLen(, l2TableBits, )
.table[] = tableEntry{offset: .cur + + 4}
}
:= loadLE64(, -2)
:= .cur + - 2
:= hashLen(, l2TableBits, )
:= hashLen(>>8, l2TableBits, )
.table[] = tableEntry{offset: }
.table[] = tableEntry{offset: + 1}
:= hashLen(>>16, l2TableBits, )
= .table[]
.table[] = tableEntry{offset: + 2}
:= - (.offset - .cur)
if > maxMatchOffset || uint32(>>16) != loadLE32(, .offset-.cur) {
= >> 24
++
break
}
}
}
:
if int() < len() {
if .n == 0 {
return
}
emitLiterals(, [:])
}
}