aboutsummaryrefslogtreecommitdiff
path: root/std/hash_map.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-08-28 16:59:35 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-08-28 16:59:35 -0400
commit928ce5e326ccd1b7456002c28f34975b5bc4b13f (patch)
tree5706376fe74103223511f5a4954ce2dff0b08d0e /std/hash_map.zig
parent2f3ad48c9b35ccac377e710a4eee6b35f60b119f (diff)
parente8a9caa3dd0aef7b745b8197afecec90598b2cdd (diff)
downloadzig-928ce5e326ccd1b7456002c28f34975b5bc4b13f.tar.gz
zig-928ce5e326ccd1b7456002c28f34975b5bc4b13f.zip
Merge remote-tracking branch 'origin/master' into llvm9
Diffstat (limited to 'std/hash_map.zig')
-rw-r--r--std/hash_map.zig15
1 files changed, 15 insertions, 0 deletions
diff --git a/std/hash_map.zig b/std/hash_map.zig
index ab3c4c248d..5a852d4302 100644
--- a/std/hash_map.zig
+++ b/std/hash_map.zig
@@ -17,6 +17,21 @@ pub fn AutoHashMap(comptime K: type, comptime V: type) type {
return HashMap(K, V, getAutoHashFn(K), getAutoEqlFn(K));
}
+/// Builtin hashmap for strings as keys.
+pub fn StringHashMap(comptime V: type) type {
+ return HashMap([]const u8, V, hashString, eqlString);
+}
+
+pub fn eqlString(a: []const u8, b: []const u8) bool {
+ if (a.len != b.len) return false;
+ if (a.ptr == b.ptr) return true;
+ return mem.compare(u8, a, b) == .Equal;
+}
+
+pub fn hashString(s: []const u8) u32 {
+ return @truncate(u32, std.hash.Wyhash.hash(0, s));
+}
+
pub fn HashMap(comptime K: type, comptime V: type, comptime hash: fn (key: K) u32, comptime eql: fn (a: K, b: K) bool) type {
return struct {
entries: []Entry,