mirror of https://github.com/ethereum/go-ethereum
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
837 B
29 lines
837 B
6 years ago
|
package bigcache
|
||
|
|
||
|
// newDefaultHasher returns a new 64-bit FNV-1a Hasher which makes no memory allocations.
|
||
|
// Its Sum64 method will lay the value out in big-endian byte order.
|
||
|
// See https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function
|
||
|
func newDefaultHasher() Hasher {
|
||
|
return fnv64a{}
|
||
|
}
|
||
|
|
||
|
type fnv64a struct{}
|
||
|
|
||
|
const (
|
||
|
// offset64 FNVa offset basis. See https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function#FNV-1a_hash
|
||
|
offset64 = 14695981039346656037
|
||
|
// prime64 FNVa prime value. See https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function#FNV-1a_hash
|
||
|
prime64 = 1099511628211
|
||
|
)
|
||
|
|
||
|
// Sum64 gets the string and returns its uint64 hash value.
|
||
|
func (f fnv64a) Sum64(key string) uint64 {
|
||
|
var hash uint64 = offset64
|
||
|
for i := 0; i < len(key); i++ {
|
||
|
hash ^= uint64(key[i])
|
||
|
hash *= prime64
|
||
|
}
|
||
|
|
||
|
return hash
|
||
|
}
|