Kea  2.3.5-git
hash.h
Go to the documentation of this file.
1 // Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef HASH_H
8 #define HASH_H
9 
10 #include <cstddef>
11 #include <cstdint>
12 #include <string>
13 
14 namespace isc {
15 namespace util {
16 
19 struct Hash64 {
27  static uint64_t hash(const uint8_t* data, size_t length) {
28  uint64_t hash = FNV_offset_basis;
29  for (size_t i = 0; i < length; ++i) {
30  hash = hash ^ data[i];
31  hash = hash * FNV_prime;
32  }
33  return (hash);
34  }
35 
42  static uint64_t hash(const std::string& str) {
43  return (hash(reinterpret_cast<const uint8_t*>(str.c_str()),
44  str.size()));
45  }
46 
48  static const uint64_t FNV_offset_basis = 14695981039346656037ull;
49 
51  static const uint64_t FNV_prime = 1099511628211ull;
52 };
53 
54 } // end of namespace isc::util
55 } // end of namespace isc
56 
57 #endif
static const uint64_t FNV_prime
Prime.
Definition: hash.h:51
Defines the logger used by the top-level component of kea-lfc.
static uint64_t hash(const std::string &str)
Compute the hash.
Definition: hash.h:42
Hash implementation based on Fowler-Noll-Vo hash function.
Definition: hash.h:19
static const uint64_t FNV_offset_basis
Offset basis.
Definition: hash.h:48
static uint64_t hash(const uint8_t *data, size_t length)
Compute the hash.
Definition: hash.h:27