From 777e31f720d2e64bcdb17ba36880c5bc85f959ee Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 4 Jun 2026 19:38:53 -0700 Subject: [PATCH] AllocatingWriter: add more methods from ArrayList.Writer --- allocating_writer.zig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/allocating_writer.zig b/allocating_writer.zig index b2980f5d1c87259ef891588af7c10b2ea83c7128..6d6f4380c8b75946962e5da6c2637a0c131142b5 100644 --- a/allocating_writer.zig +++ b/allocating_writer.zig @@ -61,6 +61,30 @@ pub const AllocatingWriter = struct { self.items.len += bytes.len; } + pub fn orderedRemove(self: *AllocatingWriter, index: usize) u8 { + const old_item = self.items[index]; + std.mem.copyForwards(u8, self.items[index .. self.items.len - 1], self.items[index + 1 .. self.items.len]); + self.items.len -= 1; + return old_item; + } + + pub fn last(self: *AllocatingWriter) u8 { + return self.items[self.items.len - 1]; + } + + pub fn insertAt(self: *AllocatingWriter, index: usize, bytes: []const u8) !void { + try self.ensureUnusedCapacity(bytes.len); + self.items.len += bytes.len; + std.mem.copyBackwards(u8, self.items[index + bytes.len .. self.items.len], self.items[index .. self.items.len - bytes.len]); + @memcpy(self.items[index..][0..bytes.len], bytes); + } + + pub fn clearAndFree(self: *AllocatingWriter) void { + self.allocator.free(self.allocatedSlice()); + self.items.len = 0; + self.capacity = 0; + } + const W = nio.Writable(@This(), ._var); pub const writeAll = W.writeAll; pub const writevAll = W.writevAll; -- 2.54.0