Files
go-cuckoo/hash.go
M.V. Hutz 717408239b
Some checks failed
CI / lint (push) Successful in 51s
CI / unit-test (push) Failing after 25s
CI / fuzz-test (push) Successful in 1m1s
CI / mutation-test (push) Successful in 42s
chore: move from tools/dsa (#1)
Moved the implementation of this hash table from `tools/dsa` #1.

Reviewed-on: #1
Co-authored-by: M.V. Hutz <git@maximhutz.me>
Co-committed-by: M.V. Hutz <git@maximhutz.me>
2026-03-17 01:22:42 +00: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)
}
}