Files
go-cuckoo/hash.go
M.V. Hutz b762417b80
All checks were successful
CI / lint (pull_request) Successful in 51s
CI / unit-test (pull_request) Successful in 25s
CI / mutation-test (pull_request) Successful in 2m44s
CI / fuzz-test (pull_request) Successful in 1m2s
chore: move from tools/dsa
Moved the implementation of this hash table from `tools/dsa` #1.
2026-03-16 21:10:08 -04:00

28 lines
827 B
Go

package cuckoo
import (
"hash/maphash"
)
// A Hash function maps any data to a fixed-length value (in this case, a
// [uint64]).
//
// It is used by the [Table] to evenly distribute values
// amongst its slots. A good hash function is uniform, [chaotic], and
// deterministic. [Table] uses [NewDefaultHash] by default, which is built on
// [maphash.Comparable].
//
// [chaotic]: https://en.wikipedia.org/wiki/Avalanche_effect
type Hash[K any] = func(key K) (digest uint64)
// NewDefaultHash returns a new [Hash] which uses [maphash.Comparable].
//
// Each hash has a random seed, so calling this function again will return a new
// hash. Do not use this for testing.
func NewDefaultHash[K comparable]() Hash[K] {
seed := maphash.MakeSeed()
return func(key K) (digest uint64) {
return maphash.Comparable(seed, key)
}
}