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) } }