You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
820 B
32 lines
820 B
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) |
|
}
|
|
|