From c59d387451cd268df31ab76d27ae2cb8155f76b8 Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 4 Jun 2026 10:45:04 +0800 Subject: [PATCH] perf(hash): add inline FNV-1a hash functions to internal/hash package Zero-allocation alternative to hash/fnv.New64a(). Computes FNV-1a inline without heap-allocating a hash.Hash64 object per call. --- internal/hash/hash.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 internal/hash/hash.go diff --git a/internal/hash/hash.go b/internal/hash/hash.go new file mode 100644 index 0000000..55316c1 --- /dev/null +++ b/internal/hash/hash.go @@ -0,0 +1,19 @@ +package hash + +func FNV64a(key string) uint64 { + var h uint64 = 14695981039346656037 + for i := 0; i < len(key); i++ { + h ^= uint64(key[i]) + h *= 1099511628211 + } + return h +} + +func FNV64aBytes(key []byte) uint64 { + var h uint64 = 14695981039346656037 + for i := 0; i < len(key); i++ { + h ^= uint64(key[i]) + h *= 1099511628211 + } + return h +}