diff --git a/src/libraries/util/util/hash.h b/src/libraries/util/util/hash.h index dcd40e0..50a2fc6 100644 --- a/src/libraries/util/util/hash.h +++ b/src/libraries/util/util/hash.h @@ -62,10 +62,13 @@ constexpr inline typename types::sized_uint::type hash_fold(typename types::s template inline uint64_t hash(const T &v) { return fnv1a::hash64(reinterpret_cast(&v), sizeof(T)); } +template <> inline uint64_t hash (const uint8_t &i) { return i; } +template <> inline uint64_t hash(const uint16_t &i) { return i; } +template <> inline uint64_t hash(const uint32_t &i) { return i; } template <> inline uint64_t hash(const uint64_t &i) { return i; } template <> inline uint64_t hash(const char * const &s) { return fnv1a::hash64_string(s); } } // namespace util -constexpr inline uint8_t operator "" _id (const char *s, size_t len) { return util::fnv1a::hash64_const(s); } +constexpr inline uint64_t operator "" _id (const char *s, size_t len) { return util::fnv1a::hash64_const(s); } constexpr inline uint8_t operator "" _id8 (const char *s, size_t len) { return util::hash_fold<8>(util::fnv1a::hash32_const(s)); } diff --git a/src/libraries/util/util/map.h b/src/libraries/util/util/map.h index ca09ca0..09f3bc5 100644 --- a/src/libraries/util/util/map.h +++ b/src/libraries/util/util/map.h @@ -171,6 +171,7 @@ protected: for (size_t i = 0; i < count; ++i) { node &n = old[i]; + if (!n.hash()) continue; insert_node(n.hash(), std::move(n.key), std::move(n.val)); n.~node(); } @@ -183,6 +184,8 @@ protected: } node * insert_node(uint64_t h, K &&k, V &&v) { + assert(h); + size_t i = mod(h); size_t dist = 0;