Skip to content

Commit

Permalink
Support caching bools; make caching values infallible
Browse files Browse the repository at this point in the history
  • Loading branch information
leroycep committed Mar 6, 2020
1 parent ba70a90 commit 2e5adc1
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions lib/std/cache_hash.zig
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 2e5adc1

Please sign in to comment.