From 9684c99dd37ff987114824b2af17b6160b908b79 Mon Sep 17 00:00:00 2001 From: andersfr Date: Sat, 6 Jul 2019 23:44:43 +0200 Subject: [PATCH] Proper use of @truncate instead of @intCast --- std/hash/cityhash.zig | 20 ++++++++++---------- std/hash/murmur.zig | 18 +++++++++--------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/std/hash/cityhash.zig b/std/hash/cityhash.zig index 3599d95ef..156267627 100644 --- a/std/hash/cityhash.zig +++ b/std/hash/cityhash.zig @@ -45,7 +45,7 @@ pub const CityHash32 = struct { } fn hash32Len0To4(str: []const u8) u32 { - const len: u32 = @intCast(u32, str.len); + const len: u32 = @truncate(u32, str.len); var b: u32 = 0; var c: u32 = 9; for (str) |v| { @@ -56,7 +56,7 @@ pub const CityHash32 = struct { } fn hash32Len5To12(str: []const u8) u32 { - var a: u32 = @intCast(u32, str.len); + var a: u32 = @truncate(u32, str.len); var b: u32 = a *% 5; var c: u32 = 9; const d: u32 = b; @@ -69,7 +69,7 @@ pub const CityHash32 = struct { } fn hash32Len13To24(str: []const u8) u32 { - const len: u32 = @intCast(u32, str.len); + const len: u32 = @truncate(u32, str.len); const a: u32 = fetch32(str.ptr + (str.len >> 1) - 4); const b: u32 = fetch32(str.ptr + 4); const c: u32 = fetch32(str.ptr + str.len - 8); @@ -91,7 +91,7 @@ pub const CityHash32 = struct { } } - const len: u32 = @intCast(u32, str.len); + const len: u32 = @truncate(u32, str.len); var h: u32 = len; var g: u32 = c1 *% len; var f: u32 = g; @@ -214,7 +214,7 @@ pub const CityHash64 = struct { } fn hashLen0To16(str: []const u8) u64 { - const len: u64 = @intCast(u64, str.len); + const len: u64 = @truncate(u64, str.len); if (len >= 8) { const mul: u64 = k2 +% len *% 2; const a: u64 = fetch64(str.ptr) + k2; @@ -233,14 +233,14 @@ pub const CityHash64 = struct { const b: u8 = str[str.len >> 1]; const c: u8 = str[str.len - 1]; const y: u32 = @intCast(u32, a) +% (@intCast(u32, b) << 8); - const z: u32 = @intCast(u32, str.len) +% (@intCast(u32, c) << 2); + const z: u32 = @truncate(u32, str.len) +% (@intCast(u32, c) << 2); return shiftmix(@intCast(u64, y) *% k2 ^ @intCast(u64, z) *% k0) *% k2; } return k2; } fn hashLen17To32(str: []const u8) u64 { - const len: u64 = @intCast(u64, str.len); + const len: u64 = @truncate(u64, str.len); const mul: u64 = k2 +% len *% 2; const a: u64 = fetch64(str.ptr) *% k1; const b: u64 = fetch64(str.ptr + 8); @@ -251,7 +251,7 @@ pub const CityHash64 = struct { } fn hashLen33To64(str: []const u8) u64 { - const len: u64 = @intCast(u64, str.len); + const len: u64 = @truncate(u64, str.len); const mul: u64 = k2 +% len *% 2; const a: u64 = fetch64(str.ptr) *% k2; const b: u64 = fetch64(str.ptr + 8); @@ -305,7 +305,7 @@ pub const CityHash64 = struct { return hashLen33To64(str); } - var len: u64 = @intCast(u64, str.len); + var len: u64 = @truncate(u64, str.len); var x: u64 = fetch64(str.ptr + str.len - 40); var y: u64 = fetch64(str.ptr + str.len - 16) +% fetch64(str.ptr + str.len - 56); @@ -367,7 +367,7 @@ fn SMHasherTest(comptime hash_fn: var, comptime hashbits: u32) u32 { @memcpy(@ptrCast([*]u8, &hashes[i * hashbytes]), @ptrCast([*]u8, &h), hashbytes); } - return @intCast(u32, hash_fn(hashes, 0) & 0xffffffff); + return @truncate(u32, hash_fn(hashes, 0)); } fn CityHash32hashIgnoreSeed(str: []const u8, seed: u32) u32 { diff --git a/std/hash/murmur.zig b/std/hash/murmur.zig index 52d65b056..79d05bf46 100644 --- a/std/hash/murmur.zig +++ b/std/hash/murmur.zig @@ -13,7 +13,7 @@ pub const Murmur2_32 = struct { pub fn hashWithSeed(str: []const u8, seed: u32) u32 { const m: u32 = 0x5bd1e995; - const len = @intCast(u32, str.len); + const len = @truncate(u32, str.len); var h1: u32 = seed ^ len; for (@ptrCast([*]allowzero align(1) const u32, str.ptr)[0..(len >> 2)]) |v| { var k1: u32 = v; @@ -72,12 +72,12 @@ pub const Murmur2_32 = struct { const len: u32 = 8; var h1: u32 = seed ^ len; var k1: u32 = undefined; - k1 = @intCast(u32, v & 0xffffffff) *% m; + k1 = @truncate(u32, v) *% m; k1 ^= k1 >> 24; k1 *%= m; h1 *%= m; h1 ^= k1; - k1 = @intCast(u32, v >> 32) *% m; + k1 = @truncate(u32, v >> 32) *% m; k1 ^= k1 >> 24; k1 *%= m; h1 *%= m; @@ -98,7 +98,7 @@ pub const Murmur2_64 = struct { pub fn hashWithSeed(str: []const u8, seed: u64) u64 { const m: u64 = 0xc6a4a7935bd1e995; - const len = @intCast(u64, str.len); + const len = @truncate(u64, str.len); var h1: u64 = seed ^ (len *% m); for (@ptrCast([*]allowzero align(1) const u64, str.ptr)[0..(len >> 3)]) |v| { var k1: u64 = v; @@ -178,7 +178,7 @@ pub const Murmur3_32 = struct { pub fn hashWithSeed(str: []const u8, seed: u32) u32 { const c1: u32 = 0xcc9e2d51; const c2: u32 = 0x1b873593; - const len = @intCast(u32, str.len); + const len = @truncate(u32, str.len); var h1: u32 = seed; for (@ptrCast([*]allowzero align(1) const u32, str.ptr)[0..(len >> 2)]) |v| { var k1: u32 = v; @@ -255,14 +255,14 @@ pub const Murmur3_32 = struct { const len: u32 = 8; var h1: u32 = seed; var k1: u32 = undefined; - k1 = @intCast(u32, v & 0xffffffff) *% c1; + k1 = @truncate(u32, v) *% c1; k1 = rotl32(k1, 15); k1 *%= c2; h1 ^= k1; h1 = rotl32(h1, 13); h1 *%= 5; h1 +%= 0xe6546b64; - k1 = @intCast(u32, v >> 32) *% c1; + k1 = @truncate(u32, v >> 32) *% c1; k1 = rotl32(k1, 15); k1 *%= c2; h1 ^= k1; @@ -291,7 +291,7 @@ fn SMHasherTest(comptime hash_fn: var, comptime hashbits: u32) u32 { var i: u32 = 0; while (i < 256) : (i += 1) { - key[i] = @intCast(u8, i); + key[i] = @truncate(u8, i); var h = hash_fn(key[0..i], 256 - i); if (builtin.endian == builtin.Endian.Big) @@ -299,7 +299,7 @@ fn SMHasherTest(comptime hash_fn: var, comptime hashbits: u32) u32 { @memcpy(@ptrCast([*]u8, &hashes[i * hashbytes]), @ptrCast([*]u8, &h), hashbytes); } - return @intCast(u32, hash_fn(hashes, 0) & 0xffffffff); + return @truncate(u32, hash_fn(hashes, 0)); } test "murmur2_32" {