1234567891011121314151617181920212223242526272829303132 |
- package models // import "github.com/influxdata/influxdb/models"
- // from stdlib hash/fnv/fnv.go
- const (
- prime64 = 1099511628211
- offset64 = 14695981039346656037
- )
- // InlineFNV64a is an alloc-free port of the standard library's fnv64a.
- // See https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function.
- type InlineFNV64a uint64
- // NewInlineFNV64a returns a new instance of InlineFNV64a.
- func NewInlineFNV64a() InlineFNV64a {
- return offset64
- }
- // Write adds data to the running hash.
- func (s *InlineFNV64a) Write(data []byte) (int, error) {
- hash := uint64(*s)
- for _, c := range data {
- hash ^= uint64(c)
- hash *= prime64
- }
- *s = InlineFNV64a(hash)
- return len(data), nil
- }
- // Sum64 returns the uint64 of the current resulting hash.
- func (s *InlineFNV64a) Sum64() uint64 {
- return uint64(*s)
- }
|