diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-09-15 14:46:31 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-09-15 14:51:08 -0700 |
| commit | f3ebfcae3882c03da84821abed40167ea07a8c78 (patch) | |
| tree | f1b759c94cba5b020a9ffb141fc62cb686fc5f04 /lib/std/hash_map.zig | |
| parent | 111a2dcf3ad53c0c8ad2c9e7c9bd042b81e90c82 (diff) | |
| parent | 0395b35cee8d4082cc40b0dcd0298f797f42309d (diff) | |
| download | zig-f3ebfcae3882c03da84821abed40167ea07a8c78.tar.gz zig-f3ebfcae3882c03da84821abed40167ea07a8c78.zip | |
Merge remote-tracking branch 'origin/master' into llvm13
Conflicts:
* cmake/Findclang.cmake
* cmake/Findlld.cmake
* cmake/Findllvm.cmake
In master branch, more search paths were added to these files with "12"
in the path. In this commit I updated them to "13".
* src/stage1/codegen.cpp
* src/zig_llvm.cpp
* src/zig_llvm.h
In master branch, ZigLLVMBuildCmpXchg is improved to add
`is_single_threaded`. However, the LLVM 13 C API has this already, and
in the llvm13 branch, ZigLLVMBuildCmpXchg is deleted in favor of the C
API. In this commit I updated stage2 to use the LLVM 13 C API rather
than depending on an improved ZigLLVMBuildCmpXchg.
Additionally, src/target.zig largestAtomicBits needed to be updated to
include the new m68k ISA.
Diffstat (limited to 'lib/std/hash_map.zig')
| -rw-r--r-- | lib/std/hash_map.zig | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/lib/std/hash_map.zig b/lib/std/hash_map.zig index 06071f0a0b..644429f871 100644 --- a/lib/std/hash_map.zig +++ b/lib/std/hash_map.zig @@ -92,6 +92,34 @@ pub fn hashString(s: []const u8) u64 { return std.hash.Wyhash.hash(0, s); } +pub const StringIndexContext = struct { + bytes: *std.ArrayListUnmanaged(u8), + + pub fn eql(self: @This(), a: u32, b: u32) bool { + _ = self; + return a == b; + } + + pub fn hash(self: @This(), x: u32) u64 { + const x_slice = mem.spanZ(@ptrCast([*:0]const u8, self.bytes.items.ptr) + x); + return hashString(x_slice); + } +}; + +pub const StringIndexAdapter = struct { + bytes: *std.ArrayListUnmanaged(u8), + + pub fn eql(self: @This(), a_slice: []const u8, b: u32) bool { + const b_slice = mem.spanZ(@ptrCast([*:0]const u8, self.bytes.items.ptr) + b); + return mem.eql(u8, a_slice, b_slice); + } + + pub fn hash(self: @This(), adapted_key: []const u8) u64 { + _ = self; + return hashString(adapted_key); + } +}; + /// Deprecated use `default_max_load_percentage` pub const DefaultMaxLoadPercentage = default_max_load_percentage; @@ -622,8 +650,12 @@ pub fn HashMap( return other.promoteContext(self.allocator, new_ctx); } - /// Creates a copy of this map, using a specified allocator and context - pub fn cloneWithAllocatorAndContext(new_allocator: *Allocator, new_ctx: anytype) !HashMap(K, V, @TypeOf(new_ctx), max_load_percentage) { + /// Creates a copy of this map, using a specified allocator and context. + pub fn cloneWithAllocatorAndContext( + self: Self, + new_allocator: *Allocator, + new_ctx: anytype, + ) !HashMap(K, V, @TypeOf(new_ctx), max_load_percentage) { var other = try self.unmanaged.cloneContext(new_allocator, new_ctx); return other.promoteContext(new_allocator, new_ctx); } |
