This commit is contained in:
Leon Banik 2023-07-17 21:39:58 -05:00 committed by GitHub
commit 3b02af76eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,18 +1,21 @@
#pragma once #pragma once
#ifdef __cplusplus
#include <cstdint>
#include <cstring>
namespace twml { namespace twml {
inline int64_t mixDiscreteIdAndValue(int64_t key, int64_t value) { inline int64_t mixDiscreteIdAndValue(int64_t key, int64_t value) {
key ^= ((17LL + value) * 2654435761LL); key ^= ((17LL + value) * 2654435761LL);
return key; return key;
} }
inline int64_t mixStringIdAndValue(int64_t key, int32_t str_len, const uint8_t *str) { inline int64_t mixStringIdAndValue(int64_t key, int32_t str_len, const uint8_t* str) {
int32_t hash = 0; const uint8_t* end = str + str_len;
for (int32_t i = 0; i < str_len; i++) { while (str != end) {
hash = (31 * hash) + (int32_t)str[i]; key = (key * 31) + *str++;
} }
return key ^ hash; return key;
} }
}
#endif } // namespace twml