libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
fnv1a.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <cstdint>
11#include <cstddef>
13
15
28constexpr uint64_t fnv1a(const char *s, uint64_t seed = 0xcbf29ce484222325ULL) {
29 return *s ? fnv1a(s + 1, (seed ^ static_cast<uint64_t>(*s)) * 0x100000001b3ULL) : seed;
30}
31
43constexpr uint64_t fnv1aData(const void *data, size_t len, uint64_t seed = 0xcbf29ce484222325ULL) {
44 const auto *p = static_cast<const unsigned char *>(data);
45 for (size_t i = 0; i < len; ++i) {
46 seed = (seed ^ static_cast<uint64_t>(p[i])) * 0x100000001b3ULL;
47 }
48 return seed;
49}
50
Dynamic array container wrapping std::vector.
Definition list.h:40
constexpr uint64_t fnv1aData(const void *data, size_t len, uint64_t seed=0xcbf29ce484222325ULL)
Computes the FNV-1a hash of a block of data.
Definition fnv1a.h:43
PROMEKI_NAMESPACE_BEGIN constexpr uint64_t fnv1a(const char *s, uint64_t seed=0xcbf29ce484222325ULL)
Computes the FNV-1a hash of a null-terminated string at compile time.
Definition fnv1a.h:28
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19