17#ifndef FLATBUFFERS_HASH_H_
18#define FLATBUFFERS_HASH_H_
38 static const uint64_t
kFnvPrime = 0x00000100000001b3ULL;
42template<
typename T> T
HashFnv1(
const char *input) {
44 for (
const char *c = input; *c; ++c) {
46 hash ^=
static_cast<unsigned char>(*c);
51template<
typename T> T
HashFnv1a(
const char *input) {
53 for (
const char *c = input; *c; ++c) {
54 hash ^=
static_cast<unsigned char>(*c);
61 uint32_t hash = HashFnv1<uint32_t>(input);
62 return (hash >> 16) ^ (hash & 0xffff);
66 uint32_t hash = HashFnv1a<uint32_t>(input);
67 return (hash >> 16) ^ (hash & 0xffff);
83 {
"fnv1_32", HashFnv1<uint32_t> },
84 {
"fnv1a_32", HashFnv1a<uint32_t> },
88 {
"fnv1_64", HashFnv1<uint64_t> },
89 {
"fnv1a_64", HashFnv1a<uint64_t> },
95 for (std::size_t i = 0; i <
size; ++i) {
106 for (std::size_t i = 0; i <
size; ++i) {
117 for (std::size_t i = 0; i <
size; ++i) {
NamedHashFunction< uint64_t >::HashFunction FindHashFunction64(const char *name)
T HashFnv1a(const char *input)
const NamedHashFunction< uint32_t > kHashFunctions32[]
const NamedHashFunction< uint16_t > kHashFunctions16[]
NamedHashFunction< uint32_t >::HashFunction FindHashFunction32(const char *name)
uint16_t HashFnv1< uint16_t >(const char *input)
T HashFnv1(const char *input)
NamedHashFunction< uint16_t >::HashFunction FindHashFunction16(const char *name)
uint16_t HashFnv1a< uint16_t >(const char *input)
const NamedHashFunction< uint64_t > kHashFunctions64[]
static const T kOffsetBasis
T(* HashFunction)(const char *)