Use fnv1a instead of std::hash for everything

This commit is contained in:
Erica Fischer
2024-02-02 12:00:19 -08:00
parent f862d7b651
commit ef66f39aa5
7 changed files with 2637 additions and 2608 deletions
+13 -1
View File
@@ -199,7 +199,6 @@ unsigned long long fnv1a(std::string const &s) {
}
unsigned long long fnv1a(const char *s, char additional) {
// Store tiles by a hash of their contents (fnv1a 64-bit)
// http://www.isthe.com/chongo/tech/comp/fnv/
const unsigned long long fnv_offset_basis = 14695981039346656037u;
const unsigned long long fnv_prime = 1099511628211u;
@@ -212,3 +211,16 @@ unsigned long long fnv1a(const char *s, char additional) {
h *= fnv_prime;
return h;
}
unsigned long long fnv1a(size_t size, void *p) {
// http://www.isthe.com/chongo/tech/comp/fnv/
unsigned char *s = (unsigned char *) p;
const unsigned long long fnv_offset_basis = 14695981039346656037u;
const unsigned long long fnv_prime = 1099511628211u;
unsigned long long h = fnv_offset_basis;
for (size_t i = 0; i < size; i++) {
h ^= (unsigned char) s[i];
h *= fnv_prime;
}
return h;
}