From 1ed7ac2e9483b7eadaa0052fa1dc7c441bbf2572 Mon Sep 17 00:00:00 2001 From: Ali Chraghi Date: Mon, 8 Jan 2024 18:31:05 +0330 Subject: [PATCH] update to latest build API --- build.zig | 2 +- src/benchmark.zig | 6 ++-- src/binaryfusefilter.zig | 4 +-- src/fusefilter.zig | 64 ++++++++++++++++++------------------ src/unique.zig | 2 +- src/xorfilter.zig | 70 ++++++++++++++++++++-------------------- 6 files changed, 74 insertions(+), 74 deletions(-) diff --git a/build.zig b/build.zig index 95cecff9..6039cf0f 100644 --- a/build.zig +++ b/build.zig @@ -5,7 +5,7 @@ pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); _ = b.addModule("fastfilter", .{ - .source_file = .{ .path = "src/main.zig" }, + .root_source_file = .{ .path = "src/main.zig" }, }); const main_tests = b.addTest(.{ diff --git a/src/benchmark.zig b/src/benchmark.zig index 668d1a6e..587d3282 100644 --- a/src/benchmark.zig +++ b/src/benchmark.zig @@ -47,10 +47,10 @@ fn bench(algorithm: []const u8, Filter: anytype, size: usize, trials: usize) !vo const allocator = std.heap.page_allocator; var filterMA = MeasuredAllocator.init(allocator); - var filterAllocator = filterMA.allocator(); + const filterAllocator = filterMA.allocator(); var buildMA = MeasuredAllocator.init(allocator); - var buildAllocator = buildMA.allocator(); + const buildAllocator = buildMA.allocator(); const stdout = std.io.getStdOut().writer(); var timer = try Timer.start(); @@ -80,7 +80,7 @@ fn bench(algorithm: []const u8, Filter: anytype, size: usize, trials: usize) !vo timer.reset(); const randomMatchesTimeStart = timer.lap(); while (i < trials) : (i += 1) { - var random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); + const random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); if (filter.contain(random_key)) { if (random_key >= keys.len) { random_matches += 1; diff --git a/src/binaryfusefilter.zig b/src/binaryfusefilter.zig index 679e8b82..176a0556 100644 --- a/src/binaryfusefilter.zig +++ b/src/binaryfusefilter.zig @@ -308,7 +308,7 @@ pub fn BinaryFuse(comptime T: type) type { /// reports if the specified key is within the set with false-positive rate. pub inline fn contain(self: *const Self, key: u64) bool { - var hash = util.mixSplit(key, self.seed); + const hash = util.mixSplit(key, self.seed); var f = @as(T, @truncate(util.fingerprint(hash))); const hashes = self.fuseHashBatch(hash); f ^= self.fingerprints[hashes.h0] ^ self.fingerprints[hashes.h1] ^ self.fingerprints[hashes.h2]; @@ -444,7 +444,7 @@ fn binaryFuseTest(T: anytype, size: usize, size_in_bytes: usize) !void { var rng = std.rand.DefaultPrng.init(0); const random = rng.random(); while (i < trials) : (i += 1) { - var random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); + const random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); if (filter.contain(random_key)) { if (random_key >= keys.len) { random_matches += 1; diff --git a/src/fusefilter.zig b/src/fusefilter.zig index 109f4539..78fb0f68 100644 --- a/src/fusefilter.zig +++ b/src/fusefilter.zig @@ -54,17 +54,17 @@ pub fn Fuse(comptime T: type) type { /// reports if the specified key is within the set with false-positive rate. pub inline fn contain(self: *const Self, key: u64) bool { - var hash = util.mixSplit(key, self.seed); - var f = @as(T, @truncate(util.fingerprint(hash))); - var r0 = @as(u32, @truncate(hash)); - var r1 = @as(u32, @truncate(util.rotl64(hash, 21))); - var r2 = @as(u32, @truncate(util.rotl64(hash, 42))); - var r3 = @as(u32, @truncate((0xBF58476D1CE4E5B9 *% hash) >> 32)); - var seg = util.reduce(r0, FUSE_SEGMENT_COUNT); - var sl: u64 = self.segmentLength; - var h0 = (seg + 0) * sl + util.reduce(r1, @as(u32, @truncate(sl))); - var h1 = (seg + 1) * sl + util.reduce(r2, @as(u32, @truncate(sl))); - var h2 = (seg + 2) * sl + util.reduce(r3, @as(u32, @truncate(sl))); + const hash = util.mixSplit(key, self.seed); + const f = @as(T, @truncate(util.fingerprint(hash))); + const r0 = @as(u32, @truncate(hash)); + const r1 = @as(u32, @truncate(util.rotl64(hash, 21))); + const r2 = @as(u32, @truncate(util.rotl64(hash, 42))); + const r3 = @as(u32, @truncate((0xBF58476D1CE4E5B9 *% hash) >> 32)); + const seg = util.reduce(r0, FUSE_SEGMENT_COUNT); + const sl: u64 = self.segmentLength; + const h0 = (seg + 0) * sl + util.reduce(r1, @as(u32, @truncate(sl))); + const h1 = (seg + 1) * sl + util.reduce(r2, @as(u32, @truncate(sl))); + const h2 = (seg + 2) * sl + util.reduce(r3, @as(u32, @truncate(sl))); return f == (self.fingerprints[h0] ^ self.fingerprints[h1] ^ self.fingerprints[h2]); } @@ -116,7 +116,7 @@ pub fn Fuse(comptime T: type) type { for (sets[0..sets.len]) |*b| b.* = std.mem.zeroes(Set); while (keys.next()) |key| { - var hs = getH0H1H2(self, key); + const hs = getH0H1H2(self, key); sets[hs.h0].fusemask ^= hs.h; sets[hs.h0].count += 1; sets[hs.h1].fusemask ^= hs.h; @@ -139,13 +139,13 @@ pub fn Fuse(comptime T: type) type { var stack_size: usize = 0; while (Qsize > 0) { Qsize -= 1; - var keyindex = Q[Qsize]; - var index = keyindex.index; + const keyindex = Q[Qsize]; + const index = keyindex.index; if (sets[index].count == 0) { continue; // not actually possible after the initial scan. } - var hash = keyindex.hash; - var hs = getJustH0H1H2(self, hash); + const hash = keyindex.hash; + const hs = getJustH0H1H2(self, hash); stack[stack_size] = keyindex; stack_size += 1; @@ -184,8 +184,8 @@ pub fn Fuse(comptime T: type) type { var stack_size = keys.len(); while (stack_size > 0) { stack_size -= 1; - var ki = stack[stack_size]; - var hs = getJustH0H1H2(self, ki.hash); + const ki = stack[stack_size]; + const hs = getJustH0H1H2(self, ki.hash); var hsh: T = @as(T, @truncate(util.fingerprint(ki.hash))); if (ki.index == hs.h0) { hsh ^= self.fingerprints[hs.h1] ^ self.fingerprints[hs.h2]; @@ -200,13 +200,13 @@ pub fn Fuse(comptime T: type) type { } inline fn getH0H1H2(self: *Self, k: u64) Hashes { - var hash = util.mixSplit(k, self.seed); - var r0 = @as(u32, @truncate(hash)); - var r1 = @as(u32, @truncate(util.rotl64(hash, 21))); - var r2 = @as(u32, @truncate(util.rotl64(hash, 42))); - var r3 = @as(u32, @truncate((0xBF58476D1CE4E5B9 *% hash) >> 32)); - var seg = util.reduce(r0, FUSE_SEGMENT_COUNT); - var sl = self.segmentLength; + const hash = util.mixSplit(k, self.seed); + const r0 = @as(u32, @truncate(hash)); + const r1 = @as(u32, @truncate(util.rotl64(hash, 21))); + const r2 = @as(u32, @truncate(util.rotl64(hash, 42))); + const r3 = @as(u32, @truncate((0xBF58476D1CE4E5B9 *% hash) >> 32)); + const seg = util.reduce(r0, FUSE_SEGMENT_COUNT); + const sl = self.segmentLength; return Hashes{ .h = hash, .h0 = @as(u32, @truncate(@as(u64, @intCast((seg + 0))) * sl + @as(u64, @intCast(util.reduce(r1, @as(u32, @truncate(sl))))))), @@ -216,12 +216,12 @@ pub fn Fuse(comptime T: type) type { } inline fn getJustH0H1H2(self: *Self, hash: u64) H0h1h2 { - var r0 = @as(u32, @truncate(hash)); - var r1 = @as(u32, @truncate(util.rotl64(hash, 21))); - var r2 = @as(u32, @truncate(util.rotl64(hash, 42))); - var r3 = @as(u32, @truncate((0xBF58476D1CE4E5B9 *% hash) >> 32)); - var seg = util.reduce(r0, FUSE_SEGMENT_COUNT); - var sl = self.segmentLength; + const r0 = @as(u32, @truncate(hash)); + const r1 = @as(u32, @truncate(util.rotl64(hash, 21))); + const r2 = @as(u32, @truncate(util.rotl64(hash, 42))); + const r3 = @as(u32, @truncate((0xBF58476D1CE4E5B9 *% hash) >> 32)); + const seg = util.reduce(r0, FUSE_SEGMENT_COUNT); + const sl = self.segmentLength; return H0h1h2{ .h0 = @as(u32, @truncate(@as(u64, @intCast((seg + 0))) * sl + @as(u64, @intCast(util.reduce(r1, @as(u32, @truncate(sl))))))), .h1 = @as(u32, @truncate(@as(u64, @intCast((seg + 1))) * sl + @as(u64, @intCast(util.reduce(r2, @as(u32, @truncate(sl))))))), @@ -283,7 +283,7 @@ fn fuseTest(T: anytype, size: usize, size_in_bytes: usize) !void { var rng = std.rand.DefaultPrng.init(0); const random = rng.random(); while (i < trials) : (i += 1) { - var random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); + const random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); if (filter.contain(random_key)) { if (random_key >= keys.len) { random_matches += 1; diff --git a/src/unique.zig b/src/unique.zig index 53342e3e..cd76bebe 100644 --- a/src/unique.zig +++ b/src/unique.zig @@ -17,7 +17,7 @@ pub fn Unique( } fn swap(data: []T, i: usize, j: usize) void { - var tmp = data[i]; + const tmp = data[i]; data[i] = data[j]; data[j] = tmp; } diff --git a/src/xorfilter.zig b/src/xorfilter.zig index 00266b09..59cdaee0 100644 --- a/src/xorfilter.zig +++ b/src/xorfilter.zig @@ -52,15 +52,15 @@ pub fn Xor(comptime T: type) type { /// reports if the specified key is within the set with false-positive rate. pub inline fn contain(self: *const Self, key: u64) bool { - var hash = util.mixSplit(key, self.seed); - var f = @as(T, @truncate(util.fingerprint(hash))); - var r0 = @as(u32, @truncate(hash)); - var r1 = @as(u32, @truncate(util.rotl64(hash, 21))); - var r2 = @as(u32, @truncate(util.rotl64(hash, 42))); - var bl = @as(u32, @truncate(self.blockLength)); - var h0: u32 = util.reduce(r0, bl); - var h1: u32 = util.reduce(r1, bl) + bl; - var h2: u32 = util.reduce(r2, bl) + 2 * bl; + const hash = util.mixSplit(key, self.seed); + const f = @as(T, @truncate(util.fingerprint(hash))); + const r0 = @as(u32, @truncate(hash)); + const r1 = @as(u32, @truncate(util.rotl64(hash, 21))); + const r2 = @as(u32, @truncate(util.rotl64(hash, 42))); + const bl = @as(u32, @truncate(self.blockLength)); + const h0: u32 = util.reduce(r0, bl); + const h1: u32 = util.reduce(r1, bl) + bl; + const h2: u32 = util.reduce(r2, bl) + 2 * bl; return f == (self.fingerprints[h0] ^ self.fingerprints[h1] ^ self.fingerprints[h2]); } @@ -119,7 +119,7 @@ pub fn Xor(comptime T: type) type { for (sets[0..sets.len]) |*b| b.* = std.mem.zeroes(Set); while (keys.next()) |key| { - var hs = self.getH0H1H2(key); + const hs = self.getH0H1H2(key); sets0[hs.h0].xormask ^= hs.h; sets0[hs.h0].count += 1; sets1[hs.h1].xormask ^= hs.h; @@ -168,14 +168,14 @@ pub fn Xor(comptime T: type) type { while (Q0size + Q1size + Q2size > 0) { while (Q0size > 0) { Q0size -%= 1; - var keyindex = Q0[Q0size]; - var index = keyindex.index; + const keyindex = Q0[Q0size]; + const index = keyindex.index; if (sets0[index].count == 0) { continue; // not actually possible after the initial scan. } - var hash = keyindex.hash; - var h1 = self.getH1(hash); - var h2 = self.getH2(hash); + const hash = keyindex.hash; + const h1 = self.getH1(hash); + const h2 = self.getH2(hash); stack[stack_size] = keyindex; stack_size += 1; @@ -197,13 +197,13 @@ pub fn Xor(comptime T: type) type { while (Q1size > 0) { Q1size -%= 1; var keyindex = Q1[Q1size]; - var index = keyindex.index; + const index = keyindex.index; if (sets1[index].count == 0) { continue; // not actually possible after the initial scan. } - var hash = keyindex.hash; - var h0 = self.getH0(hash); - var h2 = self.getH2(hash); + const hash = keyindex.hash; + const h0 = self.getH0(hash); + const h2 = self.getH2(hash); keyindex.index += @as(u32, @truncate(self.blockLength)); stack[stack_size] = keyindex; @@ -226,13 +226,13 @@ pub fn Xor(comptime T: type) type { while (Q2size > 0) { Q2size -%= 1; var keyindex = Q2[Q2size]; - var index = keyindex.index; + const index = keyindex.index; if (sets2[index].count == 0) { continue; // not actually possible after the initial scan. } - var hash = keyindex.hash; - var h0 = self.getH0(hash); - var h1 = self.getH1(hash); + const hash = keyindex.hash; + const h0 = self.getH0(hash); + const h1 = self.getH1(hash); keyindex.index += @as(u32, @truncate(2 * @as(u64, @intCast(self.blockLength)))); stack[stack_size] = keyindex; @@ -260,14 +260,14 @@ pub fn Xor(comptime T: type) type { self.seed = util.rngSplitMix64(&rng_counter); } - var fingerprints0: []T = self.fingerprints; - var fingerprints1: []T = self.fingerprints[self.blockLength..]; - var fingerprints2: []T = self.fingerprints[2 * self.blockLength ..]; + const fingerprints0: []T = self.fingerprints; + const fingerprints1: []T = self.fingerprints[self.blockLength..]; + const fingerprints2: []T = self.fingerprints[2 * self.blockLength ..]; var stack_size = keys.len(); while (stack_size > 0) { stack_size -= 1; - var ki = stack[stack_size]; + const ki = stack[stack_size]; var val: u64 = util.fingerprint(ki.hash); if (ki.index < @as(u32, @truncate(self.blockLength))) { val ^= fingerprints1[self.getH1(ki.hash)] ^ fingerprints2[self.getH2(ki.hash)]; @@ -282,10 +282,10 @@ pub fn Xor(comptime T: type) type { } inline fn getH0H1H2(self: *Self, k: u64) Hashes { - var hash = util.mixSplit(k, self.seed); - var r0 = @as(u32, @truncate(hash)); - var r1 = @as(u32, @truncate(util.rotl64(hash, 21))); - var r2 = @as(u32, @truncate(util.rotl64(hash, 42))); + const hash = util.mixSplit(k, self.seed); + const r0 = @as(u32, @truncate(hash)); + const r1 = @as(u32, @truncate(util.rotl64(hash, 21))); + const r2 = @as(u32, @truncate(util.rotl64(hash, 42))); return Hashes{ .h = hash, .h0 = util.reduce(r0, @as(u32, @truncate(self.blockLength))), @@ -295,17 +295,17 @@ pub fn Xor(comptime T: type) type { } inline fn getH0(self: *Self, hash: u64) u32 { - var r0 = @as(u32, @truncate(hash)); + const r0 = @as(u32, @truncate(hash)); return util.reduce(r0, @as(u32, @truncate(self.blockLength))); } inline fn getH1(self: *Self, hash: u64) u32 { - var r1 = @as(u32, @truncate(util.rotl64(hash, 21))); + const r1 = @as(u32, @truncate(util.rotl64(hash, 21))); return util.reduce(r1, @as(u32, @truncate(self.blockLength))); } inline fn getH2(self: *Self, hash: u64) u32 { - var r2 = @as(u32, @truncate(util.rotl64(hash, 42))); + const r2 = @as(u32, @truncate(util.rotl64(hash, 42))); return util.reduce(r2, @as(u32, @truncate(self.blockLength))); } }; @@ -363,7 +363,7 @@ fn xorTest(T: anytype, size: usize, size_in_bytes: usize) !void { var rng = std.rand.DefaultPrng.init(0); const random = rng.random(); while (i < trials) : (i += 1) { - var random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); + const random_key: u64 = random.uintAtMost(u64, std.math.maxInt(u64)); if (filter.contain(random_key)) { if (random_key >= keys.len) { random_matches += 1;