aboutsummaryrefslogtreecommitdiff
path: root/src/thread_safe_hash_map.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread_safe_hash_map.zig')
-rw-r--r--src/thread_safe_hash_map.zig19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/thread_safe_hash_map.zig b/src/thread_safe_hash_map.zig
index 40aeff7d6..5c3a8cf51 100644
--- a/src/thread_safe_hash_map.zig
+++ b/src/thread_safe_hash_map.zig
@@ -1,9 +1,10 @@
const std = @import("std");
const sync = @import("sync.zig");
usingnamespace @import("global.zig");
+const hash_map = @import("hash_map.zig");
pub fn ThreadSafeStringHashMap(comptime Value: type) type {
- const HashMapType = std.StringHashMap(Value);
+ const HashMapType = hash_map.StringHashMap(Value);
return struct {
backing: HashMapType,
lock: sync.RwLock,
@@ -22,12 +23,22 @@ pub fn ThreadSafeStringHashMap(comptime Value: type) type {
return self.backing.get(key);
}
+ pub fn getHash(key: string) u64 {
+ return HashMapType.getHash(key);
+ }
+
pub fn contains(self: *HashMap, str: string) bool {
self.lock.lockShared();
defer self.lock.unlockShared();
return self.backing.contains(str);
}
+ pub fn containsHash(self: *HashMap, hash: u64) bool {
+ self.lock.lockShared();
+ defer self.lock.unlockShared();
+ return self.backing.contains(str);
+ }
+
pub fn deinit(self: *HashMap, allocator: *std.mem.Allocator) void {
self.backing.deinit();
}
@@ -37,5 +48,11 @@ pub fn ThreadSafeStringHashMap(comptime Value: type) type {
defer self.lock.unlock();
try self.backing.put(key, value);
}
+
+ pub fn putWithHash(self: *HashMap, key: string, hash: u64, value: Value) !void {
+ self.lock.lock();
+ defer self.lock.unlock();
+ try self.backing.put(key, value);
+ }
};
}