diff --git a/allocating_writer.zig b/allocating_writer.zig index 6d6f4380c8b75946962e5da6c2637a0c131142b5..810011f25430e370132d5d4b9d5a0dfae61ecbc1 100644 --- a/allocating_writer.zig +++ b/allocating_writer.zig @@ -85,6 +85,16 @@ pub const AllocatingWriter = struct { self.capacity = 0; } + pub fn replaceRangeAssumeCapacity(self: *AllocatingWriter, start: usize, len: usize, new_items: []const u8) void { + std.debug.assert(self.capacity - self.items.len >= new_items.len -| len); + const tail = self.items[start + len ..]; + const vacated = self.items[self.items.len - (len -| new_items.len) ..]; + self.items.len = self.items.len - len + new_items.len; + @memmove(self.items[start + new_items.len ..], tail); + @memcpy(self.items[start..][0..new_items.len], new_items); + @memset(vacated, undefined); + } + const W = nio.Writable(@This(), ._var); pub const writeAll = W.writeAll; pub const writevAll = W.writevAll;