Commit deea36250f

Andrew Kelley <andrew@ziglang.org>
2024-07-09 08:41:08
std.Build.Cache.Path: add `subPathOpt` and `TableAdapter`
Helpful methods when using one of these structs as a hash table key.
1 parent 6c64090
Changed files (1)
lib
std
Build
Cache
lib/std/Build/Cache/Path.zig
@@ -151,6 +151,26 @@ pub fn eql(self: Path, other: Path) bool {
     return self.root_dir.eql(other.root_dir) and std.mem.eql(u8, self.sub_path, other.sub_path);
 }
 
+pub fn subPathOpt(self: Path) ?[]const u8 {
+    return if (self.sub_path.len == 0) null else self.sub_path;
+}
+
+/// Useful to make `Path` a key in `std.ArrayHashMap`.
+pub const TableAdapter = struct {
+    pub const Hash = std.hash.Wyhash;
+
+    pub fn hash(self: TableAdapter, a: Cache.Path) u32 {
+        _ = self;
+        const seed: u32 = @bitCast(a.root_dir.handle.fd);
+        return @truncate(Hash.hash(seed, a.sub_path));
+    }
+    pub fn eql(self: TableAdapter, a: Cache.Path, b: Cache.Path, b_index: usize) bool {
+        _ = self;
+        _ = b_index;
+        return a.eql(b);
+    }
+};
+
 const Path = @This();
 const std = @import("../../std.zig");
 const fs = std.fs;