From 24d984d712694d907335a3eeb1cc8984c3e19d3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Sun, 6 Mar 2022 18:18:35 +0200 Subject: [PATCH] bdz.search_u32: search directly --- src/bdz.zig | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/bdz.zig b/src/bdz.zig index 6da3771..acff6e7 100644 --- a/src/bdz.zig +++ b/src/bdz.zig @@ -7,8 +7,10 @@ pub fn search(packed_mphf: []const u8, key: []const u8) u32 { return @as(u32, bdz_search_packed(packed_mphf.ptr, key.ptr, len)); } +const u32len = 5; + pub fn search_u32(packed_mphf: []const u8, key: u32) u32 { - return search(packed_mphf, unzero(key)[0..]); + return @as(u32, bdz_search_packed(packed_mphf.ptr, &unzero(key), u32len)); } // encode a u32 to 5 bytes so no bytes is a '\0'. @@ -17,12 +19,12 @@ pub fn search_u32(packed_mphf: []const u8, key: u32) u32 { // packing would accept zero bytes. For now we will be doing a dance of not // passing zero bytes. pub fn unzero(x: u32) [5]u8 { - const one: u8 = 0b10000000; - var buf: [5]u8 = undefined; - buf[0] = @truncate(u8, (x & 0b11111110_00000000_00000000_00000000) >> 25) | one; - buf[1] = @truncate(u8, (x & 0b00000001_11111100_00000000_00000000) >> 18) | one; - buf[2] = @truncate(u8, (x & 0b00000000_00000011_11110000_00000000) >> 12) | one; - buf[3] = @truncate(u8, (x & 0b00000000_00000000_00001111_11000000) >> 6) | one; - buf[4] = @truncate(u8, (x & 0b00000000_00000000_00000000_00111111) >> 0) | one; + const bit: u8 = 0b10000000; + var buf: [u32len]u8 = undefined; + buf[0] = @truncate(u8, (x & 0b11111110_00000000_00000000_00000000) >> 25) | bit; + buf[1] = @truncate(u8, (x & 0b00000001_11111100_00000000_00000000) >> 18) | bit; + buf[2] = @truncate(u8, (x & 0b00000000_00000011_11110000_00000000) >> 12) | bit; + buf[3] = @truncate(u8, (x & 0b00000000_00000000_00001111_11000000) >> 6) | bit; + buf[4] = @truncate(u8, (x & 0b00000000_00000000_00000000_00111111) >> 0) | bit; return buf; }