From ce5b2286f1db3d5a01ce139b450140f21c9d9909 Mon Sep 17 00:00:00 2001 From: LeRoyce Pearson Date: Thu, 5 Mar 2020 23:22:55 -0700 Subject: Support caching bools; make caching values infallible --- lib/std/cache_hash.zig | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'lib/std/cache_hash.zig') diff --git a/lib/std/cache_hash.zig b/lib/std/cache_hash.zig index 2993d5a19d..22a1da3d85 100644 --- a/lib/std/cache_hash.zig +++ b/lib/std/cache_hash.zig @@ -61,13 +61,14 @@ pub const CacheHash = struct { }; } - pub fn cache_buf(self: *@This(), val: []const u8) !void { + pub fn cache_buf(self: *@This(), val: []const u8) void { debug.assert(self.manifest_file_path == null); self.blake3.update(val); + self.blake3.update(&[_]u8{0}); } - pub fn cache(self: *@This(), val: var) !void { + pub fn cache(self: *@This(), val: var) void { debug.assert(self.manifest_file_path == null); const val_type = @TypeOf(val); @@ -76,14 +77,17 @@ pub const CacheHash = struct { const buf_len = @divExact(int_info.bits, 8); var buf: [buf_len]u8 = undefined; mem.writeIntNative(val_type, &buf, val); - self.blake3.update(&buf); + self.cache_buf(&buf); } else { @compileError("Unsupported integer size. Please use a multiple of 8, manually convert to a u8 slice."); }, + .Bool => { + var buf: [1]u8 = undefined; + buf[0] = if (val) 1 else 0; + self.blake3.update(&buf); + }, else => @compileError("Unsupported type"), } - - self.blake3.update(&[_]u8{0}); } pub fn cache_file(self: *@This(), file_path: []const u8) !void { @@ -92,7 +96,7 @@ pub const CacheHash = struct { var cache_hash_file = try self.files.addOne(); cache_hash_file.path = try fs.path.resolve(self.alloc, &[_][]const u8{file_path}); - try self.cache_buf(cache_hash_file.path.?); + self.cache_buf(cache_hash_file.path.?); } pub fn hit(self: *@This(), out_digest: *ArrayList(u8)) !bool { @@ -321,8 +325,9 @@ test "cache file and the recall it" { var ch = try CacheHash.init(testing.allocator, temp_manifest_dir); defer ch.release(); - try ch.cache(@as(u16, 1234)); - try ch.cache_buf("1234"); + ch.cache(true); + ch.cache(@as(u16, 1234)); + ch.cache_buf("1234"); try ch.cache_file("test.txt"); // There should be nothing in the cache @@ -334,8 +339,9 @@ test "cache file and the recall it" { var ch = try CacheHash.init(testing.allocator, temp_manifest_dir); defer ch.release(); - try ch.cache(@as(u16, 1234)); - try ch.cache_buf("1234"); + ch.cache(true); + ch.cache(@as(u16, 1234)); + ch.cache_buf("1234"); try ch.cache_file("test.txt"); // Cache hit! We just "built" the same file -- cgit v1.2.3