terminal/new: hashmap k/v offsets were off the wrong base

This commit is contained in:
Mitchell Hashimoto
2024-02-23 19:56:12 -08:00
parent d87a1c694e
commit c2ec97b804
2 changed files with 13 additions and 3 deletions

View File

@ -291,15 +291,16 @@ fn HashMapUnmanaged(
assert(@intFromPtr(buf.start()) % base_align == 0); assert(@intFromPtr(buf.start()) % base_align == 0);
// Get all our main pointers // 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 // Build our map
var map: Self = .{ .metadata = metadata_ptr }; var map: Self = .{ .metadata = metadata_ptr };
const hdr = map.header(); const hdr = map.header();
hdr.capacity = layout.capacity; hdr.capacity = layout.capacity;
hdr.size = 0; hdr.size = 0;
if (@sizeOf([*]K) != 0) hdr.keys = buf.member(K, layout.keys_start); if (@sizeOf([*]K) != 0) hdr.keys = metadata_buf.member(K, layout.keys_start);
if (@sizeOf([*]V) != 0) hdr.values = buf.member(V, layout.vals_start); if (@sizeOf([*]V) != 0) hdr.values = metadata_buf.member(V, layout.vals_start);
map.initMetadatas(); map.initMetadatas();
return map; return map;

View File

@ -105,6 +105,15 @@ pub const OffsetBuf = struct {
.offset = self.offset + offset, .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 /// Get the offset for a given type from some base pointer to the