blob: be586d27668c984d0ca02d73c2d952774c1d4ed0 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(https://fxbug.dev/42097124): De-dupe this.
#ifndef ZIRCON_SYSTEM_ULIB_TRACE_PROVIDER_FNV1HASH_H_
#define ZIRCON_SYSTEM_ULIB_TRACE_PROVIDER_FNV1HASH_H_
#include <stdint.h>
#include <string.h>
// FNV-1a Hash
//
// http://www.isthe.com/chongo/tech/comp/fnv/index.html
#define FNV64_PRIME (1099511628211ULL)
#define FNV64_OFFSET_BASIS (14695981039346656037ULL)
static inline uint64_t fnv1a64(const void* ptr, size_t len) {
uint64_t n = FNV64_OFFSET_BASIS;
const uint8_t* data = (const uint8_t*)ptr;
while (len-- > 0) {
n = (n ^ (*data++)) * FNV64_PRIME;
}
return n;
}
#define fnv1a64str(str) fnv1a64(str, strlen(str))
#endif // ZIRCON_SYSTEM_ULIB_TRACE_PROVIDER_FNV1HASH_H_