forked from mirror/brotli
Use some Go library functions.
This commit is contained in:
parent
7ed41e6356
commit
74ae18c776
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* Copyright 2013 Google Inc. All Rights Reserved.
|
/* Copyright 2013 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
Distributed under MIT license.
|
Distributed under MIT license.
|
||||||
|
@ -112,7 +114,7 @@ func BrotliFillBitWindow(br *BrotliBitReader, n_bits uint32) {
|
||||||
if br.bit_pos_ >= 32 {
|
if br.bit_pos_ >= 32 {
|
||||||
br.val_ >>= 32
|
br.val_ >>= 32
|
||||||
br.bit_pos_ ^= 32 /* here same as -= 32 because of the if condition */
|
br.bit_pos_ ^= 32 /* here same as -= 32 because of the if condition */
|
||||||
br.val_ |= (uint64(BROTLI_UNALIGNED_LOAD32LE(br.input[br.byte_pos:]))) << 32
|
br.val_ |= (uint64(binary.LittleEndian.Uint32(br.input[br.byte_pos:]))) << 32
|
||||||
br.byte_pos += 4
|
br.byte_pos += 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* Copyright 2015 Google Inc. All Rights Reserved.
|
/* Copyright 2015 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
Distributed under MIT license.
|
Distributed under MIT license.
|
||||||
|
@ -47,7 +49,7 @@ package brotli
|
||||||
OUTPUT: maximal copy distance <= |input_size|
|
OUTPUT: maximal copy distance <= |input_size|
|
||||||
OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
|
OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
|
||||||
func Hash5(p []byte, shift uint) uint32 {
|
func Hash5(p []byte, shift uint) uint32 {
|
||||||
var h uint64 = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * uint64(kHashMul32_a)
|
var h uint64 = (binary.LittleEndian.Uint64(p) << 24) * uint64(kHashMul32_a)
|
||||||
return uint32(h >> shift)
|
return uint32(h >> shift)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,7 +697,7 @@ emit_commands:
|
||||||
compression we first update "table" with the hashes of some positions
|
compression we first update "table" with the hashes of some positions
|
||||||
within the last copy. */
|
within the last copy. */
|
||||||
{
|
{
|
||||||
var input_bytes uint64 = BROTLI_UNALIGNED_LOAD64LE(in[ip-3:])
|
var input_bytes uint64 = binary.LittleEndian.Uint64(in[ip-3:])
|
||||||
var prev_hash uint32 = HashBytesAtOffset5(input_bytes, 0, shift)
|
var prev_hash uint32 = HashBytesAtOffset5(input_bytes, 0, shift)
|
||||||
var cur_hash uint32 = HashBytesAtOffset5(input_bytes, 3, shift)
|
var cur_hash uint32 = HashBytesAtOffset5(input_bytes, 3, shift)
|
||||||
table[prev_hash] = int(ip - base_ip - 3)
|
table[prev_hash] = int(ip - base_ip - 3)
|
||||||
|
@ -732,7 +734,7 @@ emit_commands:
|
||||||
compression we first update "table" with the hashes of some positions
|
compression we first update "table" with the hashes of some positions
|
||||||
within the last copy. */
|
within the last copy. */
|
||||||
{
|
{
|
||||||
var input_bytes uint64 = BROTLI_UNALIGNED_LOAD64LE(in[ip-3:])
|
var input_bytes uint64 = binary.LittleEndian.Uint64(in[ip-3:])
|
||||||
var prev_hash uint32 = HashBytesAtOffset5(input_bytes, 0, shift)
|
var prev_hash uint32 = HashBytesAtOffset5(input_bytes, 0, shift)
|
||||||
var cur_hash uint32 = HashBytesAtOffset5(input_bytes, 3, shift)
|
var cur_hash uint32 = HashBytesAtOffset5(input_bytes, 3, shift)
|
||||||
table[prev_hash] = int(ip - base_ip - 3)
|
table[prev_hash] = int(ip - base_ip - 3)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* Copyright 2015 Google Inc. All Rights Reserved.
|
/* Copyright 2015 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
Distributed under MIT license.
|
Distributed under MIT license.
|
||||||
|
@ -25,7 +27,7 @@ package brotli
|
||||||
var kCompressFragmentTwoPassBlockSize uint = 1 << 17
|
var kCompressFragmentTwoPassBlockSize uint = 1 << 17
|
||||||
|
|
||||||
func Hash1(p []byte, shift uint, length uint) uint32 {
|
func Hash1(p []byte, shift uint, length uint) uint32 {
|
||||||
var h uint64 = (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * uint64(kHashMul32_a)
|
var h uint64 = (binary.LittleEndian.Uint64(p) << ((8 - length) * 8)) * uint64(kHashMul32_a)
|
||||||
return uint32(h >> shift)
|
return uint32(h >> shift)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,7 +351,7 @@ func CreateCommands(input []byte, block_size uint, input_size uint, base_ip_ptr
|
||||||
|
|
||||||
var prev_hash uint32
|
var prev_hash uint32
|
||||||
if min_match == 4 {
|
if min_match == 4 {
|
||||||
input_bytes = BROTLI_UNALIGNED_LOAD64LE(input[ip-3:])
|
input_bytes = binary.LittleEndian.Uint64(input[ip-3:])
|
||||||
cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match)
|
cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 3)
|
table[prev_hash] = int(ip - base_ip - 3)
|
||||||
|
@ -358,14 +360,14 @@ func CreateCommands(input []byte, block_size uint, input_size uint, base_ip_ptr
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 1)
|
table[prev_hash] = int(ip - base_ip - 1)
|
||||||
} else {
|
} else {
|
||||||
input_bytes = BROTLI_UNALIGNED_LOAD64LE(input[ip-5:])
|
input_bytes = binary.LittleEndian.Uint64(input[ip-5:])
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 5)
|
table[prev_hash] = int(ip - base_ip - 5)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 4)
|
table[prev_hash] = int(ip - base_ip - 4)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 3)
|
table[prev_hash] = int(ip - base_ip - 3)
|
||||||
input_bytes = BROTLI_UNALIGNED_LOAD64LE(input[ip-2:])
|
input_bytes = binary.LittleEndian.Uint64(input[ip-2:])
|
||||||
cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 2)
|
table[prev_hash] = int(ip - base_ip - 2)
|
||||||
|
@ -402,7 +404,7 @@ func CreateCommands(input []byte, block_size uint, input_size uint, base_ip_ptr
|
||||||
|
|
||||||
var prev_hash uint32
|
var prev_hash uint32
|
||||||
if min_match == 4 {
|
if min_match == 4 {
|
||||||
input_bytes = BROTLI_UNALIGNED_LOAD64LE(input[ip-3:])
|
input_bytes = binary.LittleEndian.Uint64(input[ip-3:])
|
||||||
cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match)
|
cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 3)
|
table[prev_hash] = int(ip - base_ip - 3)
|
||||||
|
@ -411,14 +413,14 @@ func CreateCommands(input []byte, block_size uint, input_size uint, base_ip_ptr
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 1)
|
table[prev_hash] = int(ip - base_ip - 1)
|
||||||
} else {
|
} else {
|
||||||
input_bytes = BROTLI_UNALIGNED_LOAD64LE(input[ip-5:])
|
input_bytes = binary.LittleEndian.Uint64(input[ip-5:])
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 5)
|
table[prev_hash] = int(ip - base_ip - 5)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 4)
|
table[prev_hash] = int(ip - base_ip - 4)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 3)
|
table[prev_hash] = int(ip - base_ip - 3)
|
||||||
input_bytes = BROTLI_UNALIGNED_LOAD64LE(input[ip-2:])
|
input_bytes = binary.LittleEndian.Uint64(input[ip-2:])
|
||||||
cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match)
|
||||||
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match)
|
||||||
table[prev_hash] = int(ip - base_ip - 2)
|
table[prev_hash] = int(ip - base_ip - 2)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "math"
|
||||||
|
|
||||||
/* Copyright 2013 Google Inc. All Rights Reserved.
|
/* Copyright 2013 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
Distributed under MIT license.
|
Distributed under MIT license.
|
||||||
|
@ -311,5 +313,5 @@ func FastLog2(v uint) float64 {
|
||||||
return float64(kLog2Table[v])
|
return float64(kLog2Table[v])
|
||||||
}
|
}
|
||||||
|
|
||||||
return log2(float64(v))
|
return math.Log2(float64(v))
|
||||||
}
|
}
|
||||||
|
|
4
h10.go
4
h10.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2016 Google Inc. All Rights Reserved.
|
/* Copyright 2016 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -22,7 +24,7 @@ func (*H10) StoreLookahead() uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
func HashBytesH10(data []byte) uint32 {
|
func HashBytesH10(data []byte) uint32 {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h2.go
4
h2.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2010 Google Inc. All Rights Reserved.
|
/* Copyright 2010 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -22,7 +24,7 @@ func (*H2) StoreLookahead() uint {
|
||||||
the address in. The HashLongestMatch and H2
|
the address in. The HashLongestMatch and H2
|
||||||
classes have separate, different implementations of hashing. */
|
classes have separate, different implementations of hashing. */
|
||||||
func HashBytesH2(data []byte) uint32 {
|
func HashBytesH2(data []byte) uint32 {
|
||||||
var h uint64 = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8*5)) * kHashMul64)
|
var h uint64 = ((binary.LittleEndian.Uint64(data) << (64 - 8*5)) * kHashMul64)
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h3.go
4
h3.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2010 Google Inc. All Rights Reserved.
|
/* Copyright 2010 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -18,7 +20,7 @@ func (*H3) StoreLookahead() uint {
|
||||||
the address in. The HashLongestMatch and H3
|
the address in. The HashLongestMatch and H3
|
||||||
classes have separate, different implementations of hashing. */
|
classes have separate, different implementations of hashing. */
|
||||||
func HashBytesH3(data []byte) uint32 {
|
func HashBytesH3(data []byte) uint32 {
|
||||||
var h uint64 = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8*5)) * kHashMul64)
|
var h uint64 = ((binary.LittleEndian.Uint64(data) << (64 - 8*5)) * kHashMul64)
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h4.go
4
h4.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2010 Google Inc. All Rights Reserved.
|
/* Copyright 2010 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -18,7 +20,7 @@ func (*H4) StoreLookahead() uint {
|
||||||
the address in. The HashLongestMatch and H4
|
the address in. The HashLongestMatch and H4
|
||||||
classes have separate, different implementations of hashing. */
|
classes have separate, different implementations of hashing. */
|
||||||
func HashBytesH4(data []byte) uint32 {
|
func HashBytesH4(data []byte) uint32 {
|
||||||
var h uint64 = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8*5)) * kHashMul64)
|
var h uint64 = ((binary.LittleEndian.Uint64(data) << (64 - 8*5)) * kHashMul64)
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h40.go
4
h40.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2016 Google Inc. All Rights Reserved.
|
/* Copyright 2016 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ func (*H40) StoreLookahead() uint {
|
||||||
|
|
||||||
/* HashBytes is the function that chooses the bucket to place the address in.*/
|
/* HashBytes is the function that chooses the bucket to place the address in.*/
|
||||||
func HashBytesH40(data []byte) uint {
|
func HashBytesH40(data []byte) uint {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h41.go
4
h41.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2016 Google Inc. All Rights Reserved.
|
/* Copyright 2016 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ func (*H41) StoreLookahead() uint {
|
||||||
|
|
||||||
/* HashBytes is the function that chooses the bucket to place the address in.*/
|
/* HashBytes is the function that chooses the bucket to place the address in.*/
|
||||||
func HashBytesH41(data []byte) uint {
|
func HashBytesH41(data []byte) uint {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h42.go
4
h42.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2016 Google Inc. All Rights Reserved.
|
/* Copyright 2016 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ func (*H42) StoreLookahead() uint {
|
||||||
|
|
||||||
/* HashBytes is the function that chooses the bucket to place the address in.*/
|
/* HashBytes is the function that chooses the bucket to place the address in.*/
|
||||||
func HashBytesH42(data []byte) uint {
|
func HashBytesH42(data []byte) uint {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h5.go
4
h5.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2010 Google Inc. All Rights Reserved.
|
/* Copyright 2010 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ func (*H5) StoreLookahead() uint {
|
||||||
|
|
||||||
/* HashBytes is the function that chooses the bucket to place the address in. */
|
/* HashBytes is the function that chooses the bucket to place the address in. */
|
||||||
func HashBytesH5(data []byte, shift int) uint32 {
|
func HashBytesH5(data []byte, shift int) uint32 {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h54.go
4
h54.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2010 Google Inc. All Rights Reserved.
|
/* Copyright 2010 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -18,7 +20,7 @@ func (*H54) StoreLookahead() uint {
|
||||||
the address in. The HashLongestMatch and H54
|
the address in. The HashLongestMatch and H54
|
||||||
classes have separate, different implementations of hashing. */
|
classes have separate, different implementations of hashing. */
|
||||||
func HashBytesH54(data []byte) uint32 {
|
func HashBytesH54(data []byte) uint32 {
|
||||||
var h uint64 = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8*7)) * kHashMul64)
|
var h uint64 = ((binary.LittleEndian.Uint64(data) << (64 - 8*7)) * kHashMul64)
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
h6.go
4
h6.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* NOLINT(build/header_guard) */
|
/* NOLINT(build/header_guard) */
|
||||||
/* Copyright 2010 Google Inc. All Rights Reserved.
|
/* Copyright 2010 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ func (*H6) StoreLookahead() uint {
|
||||||
|
|
||||||
/* HashBytes is the function that chooses the bucket to place the address in. */
|
/* HashBytes is the function that chooses the bucket to place the address in. */
|
||||||
func HashBytesH6(data []byte, mask uint64, shift int) uint32 {
|
func HashBytesH6(data []byte, mask uint64, shift int) uint32 {
|
||||||
var h uint64 = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long
|
var h uint64 = (binary.LittleEndian.Uint64(data) & mask) * kHashMul64Long
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
4
hash.go
4
hash.go
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* Matches data against static dictionary words, and for each length l,
|
/* Matches data against static dictionary words, and for each length l,
|
||||||
for which a match is found, updates matches[l] to be the minimum possible
|
for which a match is found, updates matches[l] to be the minimum possible
|
||||||
(distance << 5) + len_code.
|
(distance << 5) + len_code.
|
||||||
|
@ -70,7 +72,7 @@ var kHashMul64 uint64 = 0x1E35A7BD1E35A7BD
|
||||||
var kHashMul64Long uint64 = 0x1FE35A7BD3579BD3
|
var kHashMul64Long uint64 = 0x1FE35A7BD3579BD3
|
||||||
|
|
||||||
func Hash14(data []byte) uint32 {
|
func Hash14(data []byte) uint32 {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "math"
|
||||||
|
|
||||||
/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */
|
/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */
|
||||||
const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS = 544
|
const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS = 544
|
||||||
|
|
||||||
|
@ -12,7 +14,7 @@ type HistogramLiteral struct {
|
||||||
func HistogramClearLiteral(self *HistogramLiteral) {
|
func HistogramClearLiteral(self *HistogramLiteral) {
|
||||||
self.data_ = [BROTLI_NUM_LITERAL_SYMBOLS]uint32{}
|
self.data_ = [BROTLI_NUM_LITERAL_SYMBOLS]uint32{}
|
||||||
self.total_count_ = 0
|
self.total_count_ = 0
|
||||||
self.bit_cost_ = HUGE_VAL
|
self.bit_cost_ = math.MaxFloat64
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClearHistogramsLiteral(array []HistogramLiteral, length uint) {
|
func ClearHistogramsLiteral(array []HistogramLiteral, length uint) {
|
||||||
|
@ -61,7 +63,7 @@ type HistogramCommand struct {
|
||||||
func HistogramClearCommand(self *HistogramCommand) {
|
func HistogramClearCommand(self *HistogramCommand) {
|
||||||
self.data_ = [BROTLI_NUM_COMMAND_SYMBOLS]uint32{}
|
self.data_ = [BROTLI_NUM_COMMAND_SYMBOLS]uint32{}
|
||||||
self.total_count_ = 0
|
self.total_count_ = 0
|
||||||
self.bit_cost_ = HUGE_VAL
|
self.bit_cost_ = math.MaxFloat64
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClearHistogramsCommand(array []HistogramCommand, length uint) {
|
func ClearHistogramsCommand(array []HistogramCommand, length uint) {
|
||||||
|
@ -110,7 +112,7 @@ type HistogramDistance struct {
|
||||||
func HistogramClearDistance(self *HistogramDistance) {
|
func HistogramClearDistance(self *HistogramDistance) {
|
||||||
self.data_ = [BROTLI_NUM_DISTANCE_SYMBOLS]uint32{}
|
self.data_ = [BROTLI_NUM_DISTANCE_SYMBOLS]uint32{}
|
||||||
self.total_count_ = 0
|
self.total_count_ = 0
|
||||||
self.bit_cost_ = HUGE_VAL
|
self.bit_cost_ = math.MaxFloat64
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClearHistogramsDistance(array []HistogramDistance, length uint) {
|
func ClearHistogramsDistance(array []HistogramDistance, length uint) {
|
||||||
|
|
40
platform.go
40
platform.go
|
@ -30,46 +30,6 @@ package brotli
|
||||||
*/
|
*/
|
||||||
type brotli_reg_t uint64
|
type brotli_reg_t uint64
|
||||||
|
|
||||||
/* Read / store values byte-wise; hopefully compiler will understand. */
|
|
||||||
func BROTLI_UNALIGNED_LOAD16LE(p []byte) uint16 {
|
|
||||||
var in []byte = []byte(p)
|
|
||||||
return uint16(in[0] | in[1]<<8)
|
|
||||||
}
|
|
||||||
|
|
||||||
func BROTLI_UNALIGNED_LOAD32LE(p []byte) uint32 {
|
|
||||||
var in []byte = []byte(p)
|
|
||||||
var value uint32 = uint32(in[0])
|
|
||||||
value |= uint32(in[1]) << 8
|
|
||||||
value |= uint32(in[2]) << 16
|
|
||||||
value |= uint32(in[3]) << 24
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
func BROTLI_UNALIGNED_LOAD64LE(p []byte) uint64 {
|
|
||||||
var in []byte = []byte(p)
|
|
||||||
var value uint64 = uint64(in[0])
|
|
||||||
value |= uint64(in[1]) << 8
|
|
||||||
value |= uint64(in[2]) << 16
|
|
||||||
value |= uint64(in[3]) << 24
|
|
||||||
value |= uint64(in[4]) << 32
|
|
||||||
value |= uint64(in[5]) << 40
|
|
||||||
value |= uint64(in[6]) << 48
|
|
||||||
value |= uint64(in[7]) << 56
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
|
|
||||||
func BROTLI_UNALIGNED_STORE64LE(p []byte, v uint64) {
|
|
||||||
var out []byte = []byte(p)
|
|
||||||
out[0] = byte(v)
|
|
||||||
out[1] = byte(v >> 8)
|
|
||||||
out[2] = byte(v >> 16)
|
|
||||||
out[3] = byte(v >> 24)
|
|
||||||
out[4] = byte(v >> 32)
|
|
||||||
out[5] = byte(v >> 40)
|
|
||||||
out[6] = byte(v >> 48)
|
|
||||||
out[7] = byte(v >> 56)
|
|
||||||
}
|
|
||||||
|
|
||||||
func brotli_min_double(a float64, b float64) float64 {
|
func brotli_min_double(a float64, b float64) float64 {
|
||||||
if a < b {
|
if a < b {
|
||||||
return a
|
return a
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package brotli
|
package brotli
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
/* Copyright 2013 Google Inc. All Rights Reserved.
|
/* Copyright 2013 Google Inc. All Rights Reserved.
|
||||||
|
|
||||||
Distributed under MIT license.
|
Distributed under MIT license.
|
||||||
|
@ -17,7 +19,7 @@ var kInvalidMatch uint32 = 0xFFFFFFF
|
||||||
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
|
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
func Hash(data []byte) uint32 {
|
func Hash(data []byte) uint32 {
|
||||||
var h uint32 = BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32
|
var h uint32 = binary.LittleEndian.Uint32(data) * kDictHashMul32
|
||||||
|
|
||||||
/* The higher bits contain more mixture from the multiplication,
|
/* The higher bits contain more mixture from the multiplication,
|
||||||
so we take our results from there. */
|
so we take our results from there. */
|
||||||
|
|
Loading…
Reference in New Issue