mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 00:36:07 +03:00
terminal/new: hashmap k/v offsets were off the wrong base
This commit is contained in:
@ -291,15 +291,16 @@ fn HashMapUnmanaged(
|
||||
assert(@intFromPtr(buf.start()) % base_align == 0);
|
||||
|
||||
// Get all our main pointers
|
||||
const metadata_ptr: [*]Metadata = @ptrCast(buf.start() + @sizeOf(Header));
|
||||
const metadata_buf = buf.rebase(@sizeOf(Header));
|
||||
const metadata_ptr: [*]Metadata = @ptrCast(metadata_buf.start());
|
||||
|
||||
// Build our map
|
||||
var map: Self = .{ .metadata = metadata_ptr };
|
||||
const hdr = map.header();
|
||||
hdr.capacity = layout.capacity;
|
||||
hdr.size = 0;
|
||||
if (@sizeOf([*]K) != 0) hdr.keys = buf.member(K, layout.keys_start);
|
||||
if (@sizeOf([*]V) != 0) hdr.values = buf.member(V, layout.vals_start);
|
||||
if (@sizeOf([*]K) != 0) hdr.keys = metadata_buf.member(K, layout.keys_start);
|
||||
if (@sizeOf([*]V) != 0) hdr.values = metadata_buf.member(V, layout.vals_start);
|
||||
map.initMetadatas();
|
||||
|
||||
return map;
|
||||
|
@ -105,6 +105,15 @@ pub const OffsetBuf = struct {
|
||||
.offset = self.offset + offset,
|
||||
};
|
||||
}
|
||||
|
||||
/// Rebase the offset to have a zero offset by rebasing onto start.
|
||||
/// This is similar to `add` but all of the offsets are merged into base.
|
||||
pub fn rebase(self: OffsetBuf, offset: usize) OffsetBuf {
|
||||
return .{
|
||||
.base = self.start() + offset,
|
||||
.offset = 0,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/// Get the offset for a given type from some base pointer to the
|
||||
|
Reference in New Issue
Block a user