rename generational_array_list to slot_map

This commit is contained in:
Rokas Puzonas 2026-03-22 12:01:20 +02:00
parent b901c474f0
commit 9becd7d56b
4 changed files with 15 additions and 15 deletions

View File

@ -255,7 +255,7 @@ const SokolSetupOptions = struct {
buffer_frames: u32 buffer_frames: u32
}; };
const SoundList = Lib.GenerationalArrayList(u8, u8, Sound); const SoundList = Lib.SlotMap(u8, u8, Sound);
comptime { comptime {
assert(@bitSizeOf(SoundList.Id) == @bitSizeOf(Lib.Sound.Id)); assert(@bitSizeOf(SoundList.Id) == @bitSizeOf(Lib.Sound.Id));
} }

View File

@ -77,13 +77,13 @@ const Font = struct {
} }
}; };
const FontArray = Lib.GenerationalArrayList(u8, u8, Font); const FontArray = Lib.SlotMap(u8, u8, Font);
comptime { comptime {
assert(@bitSizeOf(FontArray.Id) == @bitSizeOf(Lib.Font.Id)); assert(@bitSizeOf(FontArray.Id) == @bitSizeOf(Lib.Font.Id));
assert(FontArray.Id.none.asInt() == @intFromEnum(Lib.Font.Id.nil)); assert(FontArray.Id.none.asInt() == @intFromEnum(Lib.Font.Id.nil));
} }
const TexturesArray = Lib.GenerationalArrayList(u8, u8, Texture); const TexturesArray = Lib.SlotMap(u8, u8, Texture);
comptime { comptime {
// TODO: This is PITA, can this be refactored? // TODO: This is PITA, can this be refactored?
assert(@bitSizeOf(TexturesArray.Id) == @bitSizeOf(Lib.Texture.Id)); assert(@bitSizeOf(TexturesArray.Id) == @bitSizeOf(Lib.Texture.Id));

View File

@ -4,7 +4,7 @@ const log = std.log.scoped(.engine);
pub const build_options = @import("build_options"); pub const build_options = @import("build_options");
pub const ImGui = @import("./imgui.zig"); pub const ImGui = @import("./imgui.zig");
pub const Math = @import("./math.zig"); pub const Math = @import("./math.zig");
pub const GenerationalArrayList = @import("./generational_array_list.zig").GenerationalArrayList; pub const SlotMap = @import("./slot_map.zig").SlotMap;
const STBImage = @import("stb_image"); const STBImage = @import("stb_image");
const rgb = Math.rgb; const rgb = Math.rgb;

View File

@ -9,7 +9,7 @@ const Allocator = std.mem.Allocator;
/// - Unique IDs for every inserted item (assuming that generation doesn't overflow) /// - Unique IDs for every inserted item (assuming that generation doesn't overflow)
/// TODO: Use a stack of unused indexes to implement O(1) insertion /// TODO: Use a stack of unused indexes to implement O(1) insertion
/// TODO: Implement a way to use a list *assumeCapacity() style of functions. /// TODO: Implement a way to use a list *assumeCapacity() style of functions.
pub fn GenerationalArrayList( pub fn SlotMap(
Index: type, Index: type,
Generation: type, Generation: type,
Item: type Item: type
@ -368,13 +368,13 @@ pub fn GenerationalArrayList(
}; };
} }
const TestArray = GenerationalArrayList(u24, u8, u32); const TestMap = SlotMap(u24, u8, u32);
test "insert & remove" { test "insert & remove" {
const expect = std.testing.expect; const expect = std.testing.expect;
const gpa = std.testing.allocator; const gpa = std.testing.allocator;
var array_list: TestArray = .empty; var array_list: TestMap = .empty;
defer array_list.deinit(gpa); defer array_list.deinit(gpa);
const id1 = try array_list.insert(gpa, 10); const id1 = try array_list.insert(gpa, 10);
@ -393,7 +393,7 @@ test "generation wrap around" {
const expectEqual = std.testing.expectEqual; const expectEqual = std.testing.expectEqual;
const gpa = std.testing.allocator; const gpa = std.testing.allocator;
var array_list: TestArray = .empty; var array_list: TestMap = .empty;
defer array_list.deinit(gpa); defer array_list.deinit(gpa);
// Grow array list so that at least 1 slot exists // Grow array list so that at least 1 slot exists
@ -401,7 +401,7 @@ test "generation wrap around" {
array_list.removeAssumeExists(id1); array_list.removeAssumeExists(id1);
// Artificially increase generation count // Artificially increase generation count
array_list.generations[id1.index] = std.math.maxInt(@FieldType(TestArray.Id, "generation")); array_list.generations[id1.index] = std.math.maxInt(@FieldType(TestMap.Id, "generation"));
// Check if generation wraps around // Check if generation wraps around
const id2 = try array_list.insert(gpa, 10); const id2 = try array_list.insert(gpa, 10);
@ -414,7 +414,7 @@ test "iterator" {
const expectEqual = std.testing.expectEqual; const expectEqual = std.testing.expectEqual;
const gpa = std.testing.allocator; const gpa = std.testing.allocator;
var array_list: TestArray = .empty; var array_list: TestMap = .empty;
defer array_list.deinit(gpa); defer array_list.deinit(gpa);
// Create array which has a hole // Create array which has a hole
@ -426,14 +426,14 @@ test "iterator" {
var iter = array_list.iterator(); var iter = array_list.iterator();
try expectEqual( try expectEqual(
TestArray.ItemWithId{ TestMap.ItemWithId{
.id = id1, .id = id1,
.item = array_list.getAssumeExists(id1) .item = array_list.getAssumeExists(id1)
}, },
iter.next().? iter.next().?
); );
try expectEqual( try expectEqual(
TestArray.ItemWithId{ TestMap.ItemWithId{
.id = id3, .id = id3,
.item = array_list.getAssumeExists(id3) .item = array_list.getAssumeExists(id3)
}, },
@ -446,10 +446,10 @@ test "read & write" {
const expectEqual = std.testing.expectEqual; const expectEqual = std.testing.expectEqual;
const gpa = std.testing.allocator; const gpa = std.testing.allocator;
var array_list1: TestArray = .empty; var array_list1: TestMap = .empty;
defer array_list1.deinit(gpa); defer array_list1.deinit(gpa);
var array_list2: TestArray = .empty; var array_list2: TestMap = .empty;
defer array_list2.deinit(gpa); defer array_list2.deinit(gpa);
const id1 = try array_list1.insert(gpa, 1); const id1 = try array_list1.insert(gpa, 1);
@ -475,7 +475,7 @@ test "clear retaining capacity" {
const expectEqual = std.testing.expectEqual; const expectEqual = std.testing.expectEqual;
const gpa = std.testing.allocator; const gpa = std.testing.allocator;
var array_list: TestArray = .empty; var array_list: TestMap = .empty;
defer array_list.deinit(gpa); defer array_list.deinit(gpa);
const id1 = try array_list.insert(gpa, 10); const id1 = try array_list.insert(gpa, 10);