// Package wyhash implements a hashing algorithm derived from the Go runtime's // internal hashing fallback, which uses a variation of the wyhash algorithm.
package wyhash import ( ) const ( m1 = 0xa0761d6478bd642f m2 = 0xe7037ed1a0b428db m3 = 0x8ebc6af09c88c6e3 m4 = 0x589965cc75374cc3 m5 = 0x1d8e4e27c47d124f ) func mix(, uint64) uint64 { , := bits.Mul64(, ) return ^ } func ( uint32, uintptr) uintptr { return uintptr(mix(m5^4, mix(uint64()^m2, uint64()^uint64()^m1))) } func ( uint64, uintptr) uintptr { return uintptr(mix(m5^8, mix(^m2, ^uint64()^m1))) } func ( [16]byte, uintptr) uintptr { := binary.LittleEndian.Uint64([:8]) := binary.LittleEndian.Uint64([8:]) return uintptr(mix(m5^16, mix(^m2, ^uint64()^m1))) } func ( []uintptr, []uint32, uintptr) { MultiHashUint32Array(, sparse.MakeUint32Array(), ) } func ( []uintptr, []uint64, uintptr) { MultiHashUint64Array(, sparse.MakeUint64Array(), ) } func ( []uintptr, [][16]byte, uintptr) { MultiHashUint128Array(, sparse.MakeUint128Array(), ) }