From b2a9d05cd4bc39cf238e18bc5b44e613ba167297 Mon Sep 17 00:00:00 2001 From: "Paul \"Dettorer\" Hervot" Date: Sun, 29 Nov 2015 09:39:01 +0100 Subject: [PATCH] Hash: Fix casts and signedness on integer values --- src/common/hash.cpp | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/common/hash.cpp b/src/common/hash.cpp index c49c2f60e..6886adbc5 100644 --- a/src/common/hash.cpp +++ b/src/common/hash.cpp @@ -36,7 +36,7 @@ static FORCE_INLINE u64 fmix64(u64 k) { // platforms (MurmurHash3_x64_128). It was taken from: // https://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp void MurmurHash3_128(const void* key, int len, u32 seed, void* out) { - const u8 * data = (const u8*)key; + const u8* data = static_cast(key); const int nblocks = len / 16; u64 h1 = seed; @@ -47,7 +47,7 @@ void MurmurHash3_128(const void* key, int len, u32 seed, void* out) { // Body - const u64 * blocks = (const u64 *)(data); + const u64* blocks = reinterpret_cast(data); for (int i = 0; i < nblocks; i++) { u64 k1 = getblock64(blocks,i*2+0); @@ -64,35 +64,36 @@ void MurmurHash3_128(const void* key, int len, u32 seed, void* out) { // Tail - const u8 * tail = (const u8*)(data + nblocks*16); + const u8* tail = static_cast(data + nblocks*16); u64 k1 = 0; u64 k2 = 0; switch (len & 15) { - case 15: k2 ^= ((u64)tail[14]) << 48; - case 14: k2 ^= ((u64)tail[13]) << 40; - case 13: k2 ^= ((u64)tail[12]) << 32; - case 12: k2 ^= ((u64)tail[11]) << 24; - case 11: k2 ^= ((u64)tail[10]) << 16; - case 10: k2 ^= ((u64)tail[ 9]) << 8; - case 9: k2 ^= ((u64)tail[ 8]) << 0; + case 15: k2 ^= static_cast(tail[14]) << 48; + case 14: k2 ^= static_cast(tail[13]) << 40; + case 13: k2 ^= static_cast(tail[12]) << 32; + case 12: k2 ^= static_cast(tail[11]) << 24; + case 11: k2 ^= static_cast(tail[10]) << 16; + case 10: k2 ^= static_cast(tail[ 9]) << 8; + case 9: k2 ^= static_cast(tail[ 8]) << 0; k2 *= c2; k2 = _rotl64(k2,33); k2 *= c1; h2 ^= k2; - case 8: k1 ^= ((u64)tail[ 7]) << 56; - case 7: k1 ^= ((u64)tail[ 6]) << 48; - case 6: k1 ^= ((u64)tail[ 5]) << 40; - case 5: k1 ^= ((u64)tail[ 4]) << 32; - case 4: k1 ^= ((u64)tail[ 3]) << 24; - case 3: k1 ^= ((u64)tail[ 2]) << 16; - case 2: k1 ^= ((u64)tail[ 1]) << 8; - case 1: k1 ^= ((u64)tail[ 0]) << 0; + case 8: k1 ^= static_cast(tail[ 7]) << 56; + case 7: k1 ^= static_cast(tail[ 6]) << 48; + case 6: k1 ^= static_cast(tail[ 5]) << 40; + case 5: k1 ^= static_cast(tail[ 4]) << 32; + case 4: k1 ^= static_cast(tail[ 3]) << 24; + case 3: k1 ^= static_cast(tail[ 2]) << 16; + case 2: k1 ^= static_cast(tail[ 1]) << 8; + case 1: k1 ^= static_cast(tail[ 0]) << 0; k1 *= c1; k1 = _rotl64(k1,31); k1 *= c2; h1 ^= k1; }; // Finalization - h1 ^= len; h2 ^= len; + h1 ^= static_cast(len); + h2 ^= static_cast(len); h1 += h2; h2 += h1; @@ -103,8 +104,8 @@ void MurmurHash3_128(const void* key, int len, u32 seed, void* out) { h1 += h2; h2 += h1; - ((u64*)out)[0] = h1; - ((u64*)out)[1] = h2; + static_cast(out)[0] = h1; + static_cast(out)[1] = h2; } } // namespace Common