Skip to content

Commit

Permalink
update to latest build API
Browse files Browse the repository at this point in the history
  • Loading branch information
alichraghi authored and slimsag committed Jan 9, 2024
1 parent a584503 commit 827550e
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 74 deletions.
2 changes: 1 addition & 1 deletion build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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(.{
Expand Down
6 changes: 3 additions & 3 deletions src/benchmark.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/binaryfusefilter.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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;
Expand Down
64 changes: 32 additions & 32 deletions src/fusefilter.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
}

Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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];
Expand All @@ -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))))))),
Expand All @@ -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))))))),
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/unique.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
70 changes: 35 additions & 35 deletions src/xorfilter.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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)];
Expand All @@ -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))),
Expand All @@ -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)));
}
};
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 827550e

Please sign in to comment.