forked from mirror/brotli
Embed HasherCommon in each hasher type.
(Rather than having a pointer to the custom data in HasherCommon.)
This commit is contained in:
parent
7aac2143a1
commit
6a14da654a
4
h10.go
4
h10.go
|
@ -30,6 +30,7 @@ func HashBytesH10(data []byte) uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H10 struct {
|
type H10 struct {
|
||||||
|
HasherCommon
|
||||||
window_mask_ uint
|
window_mask_ uint
|
||||||
buckets_ [1 << 17]uint32
|
buckets_ [1 << 17]uint32
|
||||||
invalid_pos_ uint32
|
invalid_pos_ uint32
|
||||||
|
@ -37,7 +38,7 @@ type H10 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH10(handle HasherHandle) *H10 {
|
func SelfH10(handle HasherHandle) *H10 {
|
||||||
return handle.extra.(*H10)
|
return handle.(*H10)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ForestH10(self *H10) []uint32 {
|
func ForestH10(self *H10) []uint32 {
|
||||||
|
@ -45,7 +46,6 @@ func ForestH10(self *H10) []uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH10(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH10(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H10)
|
|
||||||
var self *H10 = SelfH10(handle)
|
var self *H10 = SelfH10(handle)
|
||||||
self.window_mask_ = (1 << params.lgwin) - 1
|
self.window_mask_ = (1 << params.lgwin) - 1
|
||||||
self.invalid_pos_ = uint32(0 - self.window_mask_)
|
self.invalid_pos_ = uint32(0 - self.window_mask_)
|
||||||
|
|
4
h2.go
4
h2.go
|
@ -35,15 +35,15 @@ func HashBytesH2(data []byte) uint32 {
|
||||||
This is a hash map of fixed size (1 << 16). Starting from the
|
This is a hash map of fixed size (1 << 16). Starting from the
|
||||||
given index, 1 buckets are used to store values of a key. */
|
given index, 1 buckets are used to store values of a key. */
|
||||||
type H2 struct {
|
type H2 struct {
|
||||||
|
HasherCommon
|
||||||
buckets_ [(1 << 16) + 1]uint32
|
buckets_ [(1 << 16) + 1]uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH2(handle HasherHandle) *H2 {
|
func SelfH2(handle HasherHandle) *H2 {
|
||||||
return handle.extra.(*H2)
|
return handle.(*H2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH2(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH2(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrepareH2(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
func PrepareH2(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
||||||
|
|
4
h3.go
4
h3.go
|
@ -31,15 +31,15 @@ func HashBytesH3(data []byte) uint32 {
|
||||||
This is a hash map of fixed size (BUCKET_SIZE). Starting from the
|
This is a hash map of fixed size (BUCKET_SIZE). Starting from the
|
||||||
given index, 2 buckets are used to store values of a key. */
|
given index, 2 buckets are used to store values of a key. */
|
||||||
type H3 struct {
|
type H3 struct {
|
||||||
|
HasherCommon
|
||||||
buckets_ [(1 << 16) + 2]uint32
|
buckets_ [(1 << 16) + 2]uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH3(handle HasherHandle) *H3 {
|
func SelfH3(handle HasherHandle) *H3 {
|
||||||
return handle.extra.(*H3)
|
return handle.(*H3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH3(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH3(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H3)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrepareH3(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
func PrepareH3(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
||||||
|
|
12
h35.go
12
h35.go
|
@ -32,17 +32,17 @@ func StoreLookaheadH35() uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H35 struct {
|
type H35 struct {
|
||||||
|
HasherCommon
|
||||||
ha HasherHandle
|
ha HasherHandle
|
||||||
hb HasherHandle
|
hb HasherHandle
|
||||||
params *BrotliEncoderParams
|
params *BrotliEncoderParams
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH35(handle HasherHandle) *H35 {
|
func SelfH35(handle HasherHandle) *H35 {
|
||||||
return handle.extra.(*H35)
|
return handle.(*H35)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH35(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH35(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H35)
|
|
||||||
var self *H35 = SelfH35(handle)
|
var self *H35 = SelfH35(handle)
|
||||||
self.ha = nil
|
self.ha = nil
|
||||||
self.hb = nil
|
self.hb = nil
|
||||||
|
@ -59,16 +59,16 @@ func PrepareH35(handle HasherHandle, one_shot bool, input_size uint, data []byte
|
||||||
var common_a *HasherCommon
|
var common_a *HasherCommon
|
||||||
var common_b *HasherCommon
|
var common_b *HasherCommon
|
||||||
|
|
||||||
self.ha = new(HasherCommon)
|
self.ha = new(H3)
|
||||||
common_a = (*HasherCommon)(self.ha)
|
common_a = self.ha.Common()
|
||||||
common_a.params = self.params.hasher
|
common_a.params = self.params.hasher
|
||||||
common_a.is_prepared_ = false
|
common_a.is_prepared_ = false
|
||||||
common_a.dict_num_lookups = 0
|
common_a.dict_num_lookups = 0
|
||||||
common_a.dict_num_matches = 0
|
common_a.dict_num_matches = 0
|
||||||
InitializeH3(self.ha, self.params)
|
InitializeH3(self.ha, self.params)
|
||||||
|
|
||||||
self.hb = new(HasherCommon)
|
self.hb = new(HROLLING_FAST)
|
||||||
common_b = (*HasherCommon)(self.hb)
|
common_b = self.hb.Common()
|
||||||
common_b.params = self.params.hasher
|
common_b.params = self.params.hasher
|
||||||
common_b.is_prepared_ = false
|
common_b.is_prepared_ = false
|
||||||
common_b.dict_num_lookups = 0
|
common_b.dict_num_lookups = 0
|
||||||
|
|
4
h4.go
4
h4.go
|
@ -31,15 +31,15 @@ func HashBytesH4(data []byte) uint32 {
|
||||||
This is a hash map of fixed size (BUCKET_SIZE). Starting from the
|
This is a hash map of fixed size (BUCKET_SIZE). Starting from the
|
||||||
given index, 4 buckets are used to store values of a key. */
|
given index, 4 buckets are used to store values of a key. */
|
||||||
type H4 struct {
|
type H4 struct {
|
||||||
|
HasherCommon
|
||||||
buckets_ [(1 << 17) + 4]uint32
|
buckets_ [(1 << 17) + 4]uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH4(handle HasherHandle) *H4 {
|
func SelfH4(handle HasherHandle) *H4 {
|
||||||
return handle.extra.(*H4)
|
return handle.(*H4)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH4(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH4(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H4)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrepareH4(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
func PrepareH4(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
||||||
|
|
4
h40.go
4
h40.go
|
@ -40,6 +40,7 @@ type BankH40 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H40 struct {
|
type H40 struct {
|
||||||
|
HasherCommon
|
||||||
addr [1 << 15]uint32
|
addr [1 << 15]uint32
|
||||||
head [1 << 15]uint16
|
head [1 << 15]uint16
|
||||||
tiny_hash [65536]byte
|
tiny_hash [65536]byte
|
||||||
|
@ -49,11 +50,10 @@ type H40 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH40(handle HasherHandle) *H40 {
|
func SelfH40(handle HasherHandle) *H40 {
|
||||||
return handle.extra.(*H40)
|
return handle.(*H40)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH40(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH40(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H40)
|
|
||||||
var q uint
|
var q uint
|
||||||
if params.quality > 6 {
|
if params.quality > 6 {
|
||||||
q = 7
|
q = 7
|
||||||
|
|
4
h41.go
4
h41.go
|
@ -40,6 +40,7 @@ type BankH41 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H41 struct {
|
type H41 struct {
|
||||||
|
HasherCommon
|
||||||
addr [1 << 15]uint32
|
addr [1 << 15]uint32
|
||||||
head [1 << 15]uint16
|
head [1 << 15]uint16
|
||||||
tiny_hash [65536]byte
|
tiny_hash [65536]byte
|
||||||
|
@ -49,11 +50,10 @@ type H41 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH41(handle HasherHandle) *H41 {
|
func SelfH41(handle HasherHandle) *H41 {
|
||||||
return handle.extra.(*H41)
|
return handle.(*H41)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH41(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH41(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H41)
|
|
||||||
var tmp uint
|
var tmp uint
|
||||||
if params.quality > 6 {
|
if params.quality > 6 {
|
||||||
tmp = 7
|
tmp = 7
|
||||||
|
|
4
h42.go
4
h42.go
|
@ -40,6 +40,7 @@ type BankH42 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H42 struct {
|
type H42 struct {
|
||||||
|
HasherCommon
|
||||||
addr [1 << 15]uint32
|
addr [1 << 15]uint32
|
||||||
head [1 << 15]uint16
|
head [1 << 15]uint16
|
||||||
tiny_hash [65536]byte
|
tiny_hash [65536]byte
|
||||||
|
@ -49,11 +50,10 @@ type H42 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH42(handle HasherHandle) *H42 {
|
func SelfH42(handle HasherHandle) *H42 {
|
||||||
return handle.extra.(*H42)
|
return handle.(*H42)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH42(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH42(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H42)
|
|
||||||
var tmp uint
|
var tmp uint
|
||||||
if params.quality > 6 {
|
if params.quality > 6 {
|
||||||
tmp = 7
|
tmp = 7
|
||||||
|
|
12
h5.go
12
h5.go
|
@ -31,6 +31,7 @@ func HashBytesH5(data []byte, shift int) uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H5 struct {
|
type H5 struct {
|
||||||
|
HasherCommon
|
||||||
bucket_size_ uint
|
bucket_size_ uint
|
||||||
block_size_ uint
|
block_size_ uint
|
||||||
hash_shift_ int
|
hash_shift_ int
|
||||||
|
@ -40,7 +41,7 @@ type H5 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH5(handle HasherHandle) *H5 {
|
func SelfH5(handle HasherHandle) *H5 {
|
||||||
return handle.extra.(*H5)
|
return handle.(*H5)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NumH5(self *H5) []uint16 {
|
func NumH5(self *H5) []uint16 {
|
||||||
|
@ -52,8 +53,7 @@ func BucketsH5(self *H5) []uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH5(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH5(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
var common *HasherCommon = GetHasherCommon(handle)
|
var common *HasherCommon = handle.Common()
|
||||||
handle.extra = new(H5)
|
|
||||||
var self *H5 = SelfH5(handle)
|
var self *H5 = SelfH5(handle)
|
||||||
self.hash_shift_ = 32 - common.params.bucket_bits
|
self.hash_shift_ = 32 - common.params.bucket_bits
|
||||||
self.bucket_size_ = uint(1) << uint(common.params.bucket_bits)
|
self.bucket_size_ = uint(1) << uint(common.params.bucket_bits)
|
||||||
|
@ -88,7 +88,7 @@ func StoreH5(handle HasherHandle, data []byte, mask uint, ix uint) {
|
||||||
var num []uint16 = NumH5(self)
|
var num []uint16 = NumH5(self)
|
||||||
var key uint32 = HashBytesH5(data[ix&mask:], self.hash_shift_)
|
var key uint32 = HashBytesH5(data[ix&mask:], self.hash_shift_)
|
||||||
var minor_ix uint = uint(num[key]) & uint(self.block_mask_)
|
var minor_ix uint = uint(num[key]) & uint(self.block_mask_)
|
||||||
var offset uint = minor_ix + uint(key<<uint(GetHasherCommon(handle).params.block_bits))
|
var offset uint = minor_ix + uint(key<<uint(handle.Common().params.block_bits))
|
||||||
BucketsH5(self)[offset] = uint32(ix)
|
BucketsH5(self)[offset] = uint32(ix)
|
||||||
num[key]++
|
num[key]++
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ func StitchToPreviousBlockH5(handle HasherHandle, num_bytes uint, position uint,
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrepareDistanceCacheH5(handle HasherHandle, distance_cache []int) {
|
func PrepareDistanceCacheH5(handle HasherHandle, distance_cache []int) {
|
||||||
PrepareDistanceCache(distance_cache, GetHasherCommon(handle).params.num_last_distances_to_check)
|
PrepareDistanceCache(distance_cache, handle.Common().params.num_last_distances_to_check)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find a longest backward match of &data[cur_ix] up to the length of
|
/* Find a longest backward match of &data[cur_ix] up to the length of
|
||||||
|
@ -128,7 +128,7 @@ func PrepareDistanceCacheH5(handle HasherHandle, distance_cache []int) {
|
||||||
Writes the best match into |out|.
|
Writes the best match into |out|.
|
||||||
|out|->score is updated only if a better match is found. */
|
|out|->score is updated only if a better match is found. */
|
||||||
func FindLongestMatchH5(handle HasherHandle, dictionary *BrotliEncoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *HasherSearchResult) {
|
func FindLongestMatchH5(handle HasherHandle, dictionary *BrotliEncoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *HasherSearchResult) {
|
||||||
var common *HasherCommon = GetHasherCommon(handle)
|
var common *HasherCommon = handle.Common()
|
||||||
var self *H5 = SelfH5(handle)
|
var self *H5 = SelfH5(handle)
|
||||||
var num []uint16 = NumH5(self)
|
var num []uint16 = NumH5(self)
|
||||||
var buckets []uint32 = BucketsH5(self)
|
var buckets []uint32 = BucketsH5(self)
|
||||||
|
|
4
h54.go
4
h54.go
|
@ -31,15 +31,15 @@ func HashBytesH54(data []byte) uint32 {
|
||||||
This is a hash map of fixed size ((1 << 20)). Starting from the
|
This is a hash map of fixed size ((1 << 20)). Starting from the
|
||||||
given index, 4 buckets are used to store values of a key. */
|
given index, 4 buckets are used to store values of a key. */
|
||||||
type H54 struct {
|
type H54 struct {
|
||||||
|
HasherCommon
|
||||||
buckets_ [(1 << 20) + 4]uint32
|
buckets_ [(1 << 20) + 4]uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH54(handle HasherHandle) *H54 {
|
func SelfH54(handle HasherHandle) *H54 {
|
||||||
return handle.extra.(*H54)
|
return handle.(*H54)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH54(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH54(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H54)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrepareH54(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
func PrepareH54(handle HasherHandle, one_shot bool, input_size uint, data []byte) {
|
||||||
|
|
12
h55.go
12
h55.go
|
@ -30,17 +30,17 @@ func StoreLookaheadH55() uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H55 struct {
|
type H55 struct {
|
||||||
|
HasherCommon
|
||||||
ha HasherHandle
|
ha HasherHandle
|
||||||
hb HasherHandle
|
hb HasherHandle
|
||||||
params *BrotliEncoderParams
|
params *BrotliEncoderParams
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH55(handle HasherHandle) *H55 {
|
func SelfH55(handle HasherHandle) *H55 {
|
||||||
return handle.extra.(*H55)
|
return handle.(*H55)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH55(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH55(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H55)
|
|
||||||
var self *H55 = SelfH55(handle)
|
var self *H55 = SelfH55(handle)
|
||||||
self.ha = nil
|
self.ha = nil
|
||||||
self.hb = nil
|
self.hb = nil
|
||||||
|
@ -57,16 +57,16 @@ func PrepareH55(handle HasherHandle, one_shot bool, input_size uint, data []byte
|
||||||
var common_a *HasherCommon
|
var common_a *HasherCommon
|
||||||
var common_b *HasherCommon
|
var common_b *HasherCommon
|
||||||
|
|
||||||
self.ha = new(HasherCommon)
|
self.ha = new(H54)
|
||||||
common_a = (*HasherCommon)(self.ha)
|
common_a = self.ha.Common()
|
||||||
common_a.params = self.params.hasher
|
common_a.params = self.params.hasher
|
||||||
common_a.is_prepared_ = false
|
common_a.is_prepared_ = false
|
||||||
common_a.dict_num_lookups = 0
|
common_a.dict_num_lookups = 0
|
||||||
common_a.dict_num_matches = 0
|
common_a.dict_num_matches = 0
|
||||||
InitializeH54(self.ha, self.params)
|
InitializeH54(self.ha, self.params)
|
||||||
|
|
||||||
self.hb = new(HasherCommon)
|
self.hb = new(HROLLING_FAST)
|
||||||
common_b = (*HasherCommon)(self.hb)
|
common_b = self.hb.Common()
|
||||||
common_b.params = self.params.hasher
|
common_b.params = self.params.hasher
|
||||||
common_b.is_prepared_ = false
|
common_b.is_prepared_ = false
|
||||||
common_b.dict_num_lookups = 0
|
common_b.dict_num_lookups = 0
|
||||||
|
|
12
h6.go
12
h6.go
|
@ -31,6 +31,7 @@ func HashBytesH6(data []byte, mask uint64, shift int) uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H6 struct {
|
type H6 struct {
|
||||||
|
HasherCommon
|
||||||
bucket_size_ uint
|
bucket_size_ uint
|
||||||
block_size_ uint
|
block_size_ uint
|
||||||
hash_shift_ int
|
hash_shift_ int
|
||||||
|
@ -41,7 +42,7 @@ type H6 struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH6(handle HasherHandle) *H6 {
|
func SelfH6(handle HasherHandle) *H6 {
|
||||||
return handle.extra.(*H6)
|
return handle.(*H6)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NumH6(self *H6) []uint16 {
|
func NumH6(self *H6) []uint16 {
|
||||||
|
@ -53,8 +54,7 @@ func BucketsH6(self *H6) []uint32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH6(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH6(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
var common *HasherCommon = GetHasherCommon(handle)
|
var common *HasherCommon = handle.Common()
|
||||||
handle.extra = new(H6)
|
|
||||||
var self *H6 = SelfH6(handle)
|
var self *H6 = SelfH6(handle)
|
||||||
self.hash_shift_ = 64 - common.params.bucket_bits
|
self.hash_shift_ = 64 - common.params.bucket_bits
|
||||||
self.hash_mask_ = (^(uint64(0))) >> uint(64-8*common.params.hash_len)
|
self.hash_mask_ = (^(uint64(0))) >> uint(64-8*common.params.hash_len)
|
||||||
|
@ -90,7 +90,7 @@ func StoreH6(handle HasherHandle, data []byte, mask uint, ix uint) {
|
||||||
var num []uint16 = NumH6(self)
|
var num []uint16 = NumH6(self)
|
||||||
var key uint32 = HashBytesH6(data[ix&mask:], self.hash_mask_, self.hash_shift_)
|
var key uint32 = HashBytesH6(data[ix&mask:], self.hash_mask_, self.hash_shift_)
|
||||||
var minor_ix uint = uint(num[key]) & uint(self.block_mask_)
|
var minor_ix uint = uint(num[key]) & uint(self.block_mask_)
|
||||||
var offset uint = minor_ix + uint(key<<uint(GetHasherCommon(handle).params.block_bits))
|
var offset uint = minor_ix + uint(key<<uint(handle.Common().params.block_bits))
|
||||||
BucketsH6(self)[offset] = uint32(ix)
|
BucketsH6(self)[offset] = uint32(ix)
|
||||||
num[key]++
|
num[key]++
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ func StitchToPreviousBlockH6(handle HasherHandle, num_bytes uint, position uint,
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrepareDistanceCacheH6(handle HasherHandle, distance_cache []int) {
|
func PrepareDistanceCacheH6(handle HasherHandle, distance_cache []int) {
|
||||||
PrepareDistanceCache(distance_cache, GetHasherCommon(handle).params.num_last_distances_to_check)
|
PrepareDistanceCache(distance_cache, handle.Common().params.num_last_distances_to_check)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find a longest backward match of &data[cur_ix] up to the length of
|
/* Find a longest backward match of &data[cur_ix] up to the length of
|
||||||
|
@ -130,7 +130,7 @@ func PrepareDistanceCacheH6(handle HasherHandle, distance_cache []int) {
|
||||||
Writes the best match into |out|.
|
Writes the best match into |out|.
|
||||||
|out|->score is updated only if a better match is found. */
|
|out|->score is updated only if a better match is found. */
|
||||||
func FindLongestMatchH6(handle HasherHandle, dictionary *BrotliEncoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *HasherSearchResult) {
|
func FindLongestMatchH6(handle HasherHandle, dictionary *BrotliEncoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *HasherSearchResult) {
|
||||||
var common *HasherCommon = GetHasherCommon(handle)
|
var common *HasherCommon = handle.Common()
|
||||||
var self *H6 = SelfH6(handle)
|
var self *H6 = SelfH6(handle)
|
||||||
var num []uint16 = NumH6(self)
|
var num []uint16 = NumH6(self)
|
||||||
var buckets []uint32 = BucketsH6(self)
|
var buckets []uint32 = BucketsH6(self)
|
||||||
|
|
12
h65.go
12
h65.go
|
@ -30,17 +30,17 @@ func StoreLookaheadH65() uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
type H65 struct {
|
type H65 struct {
|
||||||
|
HasherCommon
|
||||||
ha HasherHandle
|
ha HasherHandle
|
||||||
hb HasherHandle
|
hb HasherHandle
|
||||||
params *BrotliEncoderParams
|
params *BrotliEncoderParams
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfH65(handle HasherHandle) *H65 {
|
func SelfH65(handle HasherHandle) *H65 {
|
||||||
return handle.extra.(*H65)
|
return handle.(*H65)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeH65(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeH65(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(H65)
|
|
||||||
var self *H65 = SelfH65(handle)
|
var self *H65 = SelfH65(handle)
|
||||||
self.ha = nil
|
self.ha = nil
|
||||||
self.hb = nil
|
self.hb = nil
|
||||||
|
@ -57,16 +57,16 @@ func PrepareH65(handle HasherHandle, one_shot bool, input_size uint, data []byte
|
||||||
var common_a *HasherCommon
|
var common_a *HasherCommon
|
||||||
var common_b *HasherCommon
|
var common_b *HasherCommon
|
||||||
|
|
||||||
self.ha = new(HasherCommon)
|
self.ha = new(H6)
|
||||||
common_a = (*HasherCommon)(self.ha)
|
common_a = self.ha.Common()
|
||||||
common_a.params = self.params.hasher
|
common_a.params = self.params.hasher
|
||||||
common_a.is_prepared_ = false
|
common_a.is_prepared_ = false
|
||||||
common_a.dict_num_lookups = 0
|
common_a.dict_num_lookups = 0
|
||||||
common_a.dict_num_matches = 0
|
common_a.dict_num_matches = 0
|
||||||
InitializeH6(self.ha, self.params)
|
InitializeH6(self.ha, self.params)
|
||||||
|
|
||||||
self.hb = new(HasherCommon)
|
self.hb = new(HROLLING)
|
||||||
common_b = (*HasherCommon)(self.hb)
|
common_b = self.hb.Common()
|
||||||
common_b.params = self.params.hasher
|
common_b.params = self.params.hasher
|
||||||
common_b.is_prepared_ = false
|
common_b.is_prepared_ = false
|
||||||
common_b.dict_num_lookups = 0
|
common_b.dict_num_lookups = 0
|
||||||
|
|
51
hash.go
51
hash.go
|
@ -23,13 +23,14 @@ type HasherCommon struct {
|
||||||
is_prepared_ bool
|
is_prepared_ bool
|
||||||
dict_num_lookups uint
|
dict_num_lookups uint
|
||||||
dict_num_matches uint
|
dict_num_matches uint
|
||||||
extra interface{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type HasherHandle *HasherCommon
|
func (h *HasherCommon) Common() *HasherCommon {
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
func GetHasherCommon(handle HasherHandle) *HasherCommon {
|
type HasherHandle interface {
|
||||||
return (*HasherCommon)(handle)
|
Common() *HasherCommon
|
||||||
}
|
}
|
||||||
|
|
||||||
type score_t uint
|
type score_t uint
|
||||||
|
@ -166,7 +167,7 @@ func TestStaticDictionaryItem(dictionary *BrotliEncoderDictionary, item uint, da
|
||||||
func SearchInStaticDictionary(dictionary *BrotliEncoderDictionary, handle HasherHandle, data []byte, max_length uint, max_backward uint, max_distance uint, out *HasherSearchResult, shallow bool) {
|
func SearchInStaticDictionary(dictionary *BrotliEncoderDictionary, handle HasherHandle, data []byte, max_length uint, max_backward uint, max_distance uint, out *HasherSearchResult, shallow bool) {
|
||||||
var key uint
|
var key uint
|
||||||
var i uint
|
var i uint
|
||||||
var self *HasherCommon = GetHasherCommon(handle)
|
var self *HasherCommon = handle.Common()
|
||||||
if self.dict_num_matches < self.dict_num_lookups>>7 {
|
if self.dict_num_matches < self.dict_num_lookups>>7 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -238,7 +239,7 @@ func HasherReset(handle HasherHandle) {
|
||||||
if handle == nil {
|
if handle == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
GetHasherCommon(handle).is_prepared_ = false
|
handle.Common().is_prepared_ = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func HasherSetup(handle *HasherHandle, params *BrotliEncoderParams, data []byte, position uint, input_size uint, is_last bool) {
|
func HasherSetup(handle *HasherHandle, params *BrotliEncoderParams, data []byte, position uint, input_size uint, is_last bool) {
|
||||||
|
@ -247,9 +248,37 @@ func HasherSetup(handle *HasherHandle, params *BrotliEncoderParams, data []byte,
|
||||||
var one_shot bool = (position == 0 && is_last)
|
var one_shot bool = (position == 0 && is_last)
|
||||||
if *handle == nil {
|
if *handle == nil {
|
||||||
ChooseHasher(params, ¶ms.hasher)
|
ChooseHasher(params, ¶ms.hasher)
|
||||||
self = new(HasherCommon)
|
switch params.hasher.type_ {
|
||||||
|
case 2:
|
||||||
|
self = new(H2)
|
||||||
|
case 3:
|
||||||
|
self = new(H3)
|
||||||
|
case 4:
|
||||||
|
self = new(H4)
|
||||||
|
case 5:
|
||||||
|
self = new(H5)
|
||||||
|
case 6:
|
||||||
|
self = new(H6)
|
||||||
|
case 40:
|
||||||
|
self = new(H40)
|
||||||
|
case 41:
|
||||||
|
self = new(H41)
|
||||||
|
case 42:
|
||||||
|
self = new(H42)
|
||||||
|
case 54:
|
||||||
|
self = new(H54)
|
||||||
|
case 35:
|
||||||
|
self = new(H35)
|
||||||
|
case 55:
|
||||||
|
self = new(H55)
|
||||||
|
case 65:
|
||||||
|
self = new(H65)
|
||||||
|
case 10:
|
||||||
|
self = new(H10)
|
||||||
|
}
|
||||||
|
|
||||||
*handle = self
|
*handle = self
|
||||||
common = GetHasherCommon(self)
|
common = self.Common()
|
||||||
common.params = params.hasher
|
common.params = params.hasher
|
||||||
switch common.params.type_ {
|
switch common.params.type_ {
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -278,8 +307,6 @@ func HasherSetup(handle *HasherHandle, params *BrotliEncoderParams, data []byte,
|
||||||
InitializeH65(*handle, params)
|
InitializeH65(*handle, params)
|
||||||
case 10:
|
case 10:
|
||||||
InitializeH10(*handle, params)
|
InitializeH10(*handle, params)
|
||||||
break
|
|
||||||
fallthrough
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
|
@ -289,7 +316,7 @@ func HasherSetup(handle *HasherHandle, params *BrotliEncoderParams, data []byte,
|
||||||
}
|
}
|
||||||
|
|
||||||
self = *handle
|
self = *handle
|
||||||
common = GetHasherCommon(self)
|
common = self.Common()
|
||||||
if !common.is_prepared_ {
|
if !common.is_prepared_ {
|
||||||
switch common.params.type_ {
|
switch common.params.type_ {
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -336,7 +363,7 @@ func InitOrStitchToPreviousBlock(handle *HasherHandle, data []byte, mask uint, p
|
||||||
var self HasherHandle
|
var self HasherHandle
|
||||||
HasherSetup(handle, params, data, position, input_size, is_last)
|
HasherSetup(handle, params, data, position, input_size, is_last)
|
||||||
self = *handle
|
self = *handle
|
||||||
switch GetHasherCommon(self).params.type_ {
|
switch self.Common().params.type_ {
|
||||||
case 2:
|
case 2:
|
||||||
StitchToPreviousBlockH2(self, input_size, position, data, mask)
|
StitchToPreviousBlockH2(self, input_size, position, data, mask)
|
||||||
case 3:
|
case 3:
|
||||||
|
|
|
@ -41,6 +41,7 @@ func HashRollingFunctionHROLLING(state uint32, add byte, rem byte, factor uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
type HROLLING struct {
|
type HROLLING struct {
|
||||||
|
HasherCommon
|
||||||
state uint32
|
state uint32
|
||||||
table []uint32
|
table []uint32
|
||||||
next_ix uint
|
next_ix uint
|
||||||
|
@ -50,11 +51,10 @@ type HROLLING struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfHROLLING(handle HasherHandle) *HROLLING {
|
func SelfHROLLING(handle HasherHandle) *HROLLING {
|
||||||
return handle.extra.(*HROLLING)
|
return handle.(*HROLLING)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeHROLLING(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeHROLLING(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(HROLLING)
|
|
||||||
var self *HROLLING = SelfHROLLING(handle)
|
var self *HROLLING = SelfHROLLING(handle)
|
||||||
var i uint
|
var i uint
|
||||||
self.state = 0
|
self.state = 0
|
||||||
|
|
|
@ -39,6 +39,7 @@ func HashRollingFunctionHROLLING_FAST(state uint32, add byte, rem byte, factor u
|
||||||
}
|
}
|
||||||
|
|
||||||
type HROLLING_FAST struct {
|
type HROLLING_FAST struct {
|
||||||
|
HasherCommon
|
||||||
state uint32
|
state uint32
|
||||||
table []uint32
|
table []uint32
|
||||||
next_ix uint
|
next_ix uint
|
||||||
|
@ -48,11 +49,10 @@ type HROLLING_FAST struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelfHROLLING_FAST(handle HasherHandle) *HROLLING_FAST {
|
func SelfHROLLING_FAST(handle HasherHandle) *HROLLING_FAST {
|
||||||
return handle.extra.(*HROLLING_FAST)
|
return handle.(*HROLLING_FAST)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitializeHROLLING_FAST(handle HasherHandle, params *BrotliEncoderParams) {
|
func InitializeHROLLING_FAST(handle HasherHandle, params *BrotliEncoderParams) {
|
||||||
handle.extra = new(HROLLING_FAST)
|
|
||||||
var self *HROLLING_FAST = SelfHROLLING_FAST(handle)
|
var self *HROLLING_FAST = SelfHROLLING_FAST(handle)
|
||||||
var i uint
|
var i uint
|
||||||
self.state = 0
|
self.state = 0
|
||||||
|
|
Loading…
Reference in New Issue