diff options
Diffstat (limited to 'core/templates')
-rw-r--r-- | core/templates/hash_map.h | 1 | ||||
-rw-r--r-- | core/templates/hashfuncs.h | 9 |
2 files changed, 9 insertions, 1 deletions
diff --git a/core/templates/hash_map.h b/core/templates/hash_map.h index b5bb0d7396..1634219c23 100644 --- a/core/templates/hash_map.h +++ b/core/templates/hash_map.h @@ -96,6 +96,7 @@ public: Element(const TKey &p_key) : pair(p_key) {} Element(const Element &p_other) : + hash(p_other.hash), pair(p_other.pair.key, p_other.pair.data) {} }; diff --git a/core/templates/hashfuncs.h b/core/templates/hashfuncs.h index 2e932f9f26..c1a7c4146e 100644 --- a/core/templates/hashfuncs.h +++ b/core/templates/hashfuncs.h @@ -74,6 +74,13 @@ static inline uint32_t hash_djb2_one_32(uint32_t p_in, uint32_t p_prev = 5381) { return ((p_prev << 5) + p_prev) + p_in; } +/** + * Thomas Wang's 64-bit to 32-bit Hash function: + * https://web.archive.org/web/20071223173210/https:/www.concentric.net/~Ttwang/tech/inthash.htm + * + * @param p_int - 64-bit unsigned integer key to be hashed + * @return unsigned 32-bit value representing hashcode + */ static inline uint32_t hash_one_uint64(const uint64_t p_int) { uint64_t v = p_int; v = (~v) + (v << 18); // v = (v << 18) - v - 1; @@ -82,7 +89,7 @@ static inline uint32_t hash_one_uint64(const uint64_t p_int) { v = v ^ (v >> 11); v = v + (v << 6); v = v ^ (v >> 22); - return (int)v; + return uint32_t(v); } static inline uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) { |