diff --git a/src/gtl.zig b/src/gtl.zig index 6e05095..6058a0c 100644 --- a/src/gtl.zig +++ b/src/gtl.zig @@ -71,10 +71,10 @@ test "SlotMap" { for (materials.items) |material| { // --- REGISTER SHADER --- - const shader = shaders.getByKey(material.shader) orelse blk: { - const handle = try shaders.put(material.shader, .{ .raw = undefined }); - break :blk shaders.get(handle).?; - }; + const shader = try shaders.getOrPut( + material.shader, + .{ .raw = undefined }, + ); _ = shader; // --- DEBUG --- diff --git a/src/keyed_slot_map.zig b/src/keyed_slot_map.zig index 0a11245..d262275 100644 --- a/src/keyed_slot_map.zig +++ b/src/keyed_slot_map.zig @@ -100,6 +100,29 @@ pub fn KeyedSlotMap( return &entry.value; } + /// ---------------------------------------------------- + /// ---------------------------------------------------- + pub fn getOrPut( + self: *Self, + key: K, + value: V, + ) !*V { + if (self.getByKey(key)) |v| return v; + const handle = try self.put(key, value); + return self.get(handle).?; + } + + /// ---------------------------------------------------- + /// ---------------------------------------------------- + pub fn getOrPutHandle( + self: *Self, + key: K, + value: V, + ) !*Handle(V) { + if (self.getHandle(key)) |h| return h; + return try self.put(key, value); + } + /// ---------------------------------------------------- /// ---------------------------------------------------- pub fn getByKey(self: *Self, key: K) ?*V {