Initial commit

This commit is contained in:
Donny
2019-04-22 20:46:32 +08:00
commit 49ab8aadd1
25441 changed files with 4055000 additions and 0 deletions

28
vendor/github.com/Dai0522/go-hash/murmur3/BUILD.bazel generated vendored Normal file
View File

@@ -0,0 +1,28 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"murmur3.go",
"murmur3_128.go",
"murmur3_32.go",
"murmur3_64.go",
],
importmap = "go-common/vendor/github.com/Dai0522/go-hash/murmur3",
importpath = "github.com/Dai0522/go-hash/murmur3",
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

39
vendor/github.com/Dai0522/go-hash/murmur3/murmur3.go generated vendored Normal file
View File

@@ -0,0 +1,39 @@
package murmur3
// Murmur3 .
type Murmur3 struct {
seed uint32
}
// New .
func New() *Murmur3 {
return NewWithSeed(0)
}
// NewWithSeed .
func NewWithSeed(s uint32) *Murmur3 {
return &Murmur3{
seed: s,
}
}
// Murmur3_32 .
func (h *Murmur3) Murmur3_32(b []byte) []byte {
return murmur3_32(h.seed, b)
}
// Murmur3_64 .
func (h *Murmur3) Murmur3_64(b []byte) []byte {
return murmur3_64(h.seed, b)
}
// Murmur3_128 little endian []byte.
func (h *Murmur3) Murmur3_128(b []byte) []byte {
h1, h2 := murmur3_128(h.seed, b)
return []byte{
byte(h1), byte(h1 >> 8), byte(h1 >> 16), byte(h1 >> 24),
byte(h1 >> 32), byte(h1 >> 40), byte(h1 >> 48), byte(h1 >> 56),
byte(h2), byte(h2 >> 8), byte(h2 >> 16), byte(h2 >> 24),
byte(h2 >> 32), byte(h2 >> 40), byte(h2 >> 48), byte(h2 >> 56),
}
}

View File

@@ -0,0 +1,133 @@
package murmur3
import (
"unsafe"
)
const (
c1_128 = 0x87c37b91114253d5
c2_128 = 0x4cf5ad432745937f
size128 = 16
)
// murmur3_128
func murmur3_128(seed uint32, b []byte) (uint64, uint64) {
h1 := uint64(seed)
h2 := uint64(seed)
length := len(b)
h1, h2 = bmix64(b, h1, h2)
// tail
tail := b[length-(length&15):]
var k1, k2 uint64
switch length & 15 {
case 15:
k2 ^= uint64(tail[14]) << 48
fallthrough
case 14:
k2 ^= uint64(tail[13]) << 40
fallthrough
case 13:
k2 ^= uint64(tail[12]) << 32
fallthrough
case 12:
k2 ^= uint64(tail[11]) << 24
fallthrough
case 11:
k2 ^= uint64(tail[10]) << 16
fallthrough
case 10:
k2 ^= uint64(tail[9]) << 8
fallthrough
case 9:
k2 ^= uint64(tail[8]) << 0
k2 *= c2_128
k2 = (k2 << 33) | (k2 >> 31) // rotl64(k2, 33)
k2 *= c1_128
h2 ^= k2
fallthrough
case 8:
k1 ^= uint64(tail[7]) << 56
fallthrough
case 7:
k1 ^= uint64(tail[6]) << 48
fallthrough
case 6:
k1 ^= uint64(tail[5]) << 40
fallthrough
case 5:
k1 ^= uint64(tail[4]) << 32
fallthrough
case 4:
k1 ^= uint64(tail[3]) << 24
fallthrough
case 3:
k1 ^= uint64(tail[2]) << 16
fallthrough
case 2:
k1 ^= uint64(tail[1]) << 8
fallthrough
case 1:
k1 ^= uint64(tail[0]) << 0
k1 *= c1_128
k1 = (k1 << 31) | (k1 >> 33) // rotl64(k1, 31)
k1 *= c2_128
h1 ^= k1
}
h1 ^= uint64(length)
h2 ^= uint64(length)
h1 += h2
h2 += h1
h1 = fmix64(h1)
h2 = fmix64(h2)
h1 += h2
h2 += h1
return h1, h2
}
// bmix64 .
func bmix64(b []byte, h1, h2 uint64) (uint64, uint64) {
nblocks := len(b) / 16
// body
for i := 0; i < nblocks; i++ {
t := (*[2]uint64)(unsafe.Pointer(&b[i*16]))
k1, k2 := t[0], t[1]
k1 *= c1_128
k1 = (k1 << 31) | (k1 >> 33) // rotl64(k1, 31)
k1 *= c2_128
h1 ^= k1
h1 = (h1 << 27) | (h1 >> 37) // rotl64(h1, 27)
h1 += h2
h1 = h1*5 + 0x52dce729
k2 *= c2_128
k2 = (k2 << 33) | (k2 >> 31) // rotl64(k2, 33)
k2 *= c1_128
h2 ^= k2
h2 = (h2 << 31) | (h2 >> 33) // rotl64(h2, 31)
h2 += h1
h2 = h2*5 + 0x38495ab5
}
return h1, h2
}
// fmix64 .
func fmix64(k uint64) uint64 {
k ^= k >> 33
k *= 0xff51afd7ed558ccd
k ^= k >> 33
k *= 0xc4ceb9fe1a85ec53
k ^= k >> 33
return k
}

View File

@@ -0,0 +1,6 @@
package murmur3
func murmur3_32(seed uint32, b []byte) []byte {
// TODO: implement
return b
}

View File

@@ -0,0 +1,6 @@
package murmur3
func murmur3_64(seed uint32, b []byte) []byte {
// TODO: implement
return b
}