| ... | @@ -61,6 +61,30 @@ pub const AllocatingWriter = struct { | ... | @@ -61,6 +61,30 @@ pub const AllocatingWriter = struct { |
| 61 | self.items.len += bytes.len; | 61 | self.items.len += bytes.len; |
| 62 | } | 62 | } |
| 63 | | 63 | |
| | 64 | pub fn orderedRemove(self: *AllocatingWriter, index: usize) u8 { |
| | 65 | const old_item = self.items[index]; |
| | 66 | std.mem.copyForwards(u8, self.items[index .. self.items.len - 1], self.items[index + 1 .. self.items.len]); |
| | 67 | self.items.len -= 1; |
| | 68 | return old_item; |
| | 69 | } |
| | 70 | |
| | 71 | pub fn last(self: *AllocatingWriter) u8 { |
| | 72 | return self.items[self.items.len - 1]; |
| | 73 | } |
| | 74 | |
| | 75 | pub fn insertAt(self: *AllocatingWriter, index: usize, bytes: []const u8) !void { |
| | 76 | try self.ensureUnusedCapacity(bytes.len); |
| | 77 | self.items.len += bytes.len; |
| | 78 | std.mem.copyBackwards(u8, self.items[index + bytes.len .. self.items.len], self.items[index .. self.items.len - bytes.len]); |
| | 79 | @memcpy(self.items[index..][0..bytes.len], bytes); |
| | 80 | } |
| | 81 | |
| | 82 | pub fn clearAndFree(self: *AllocatingWriter) void { |
| | 83 | self.allocator.free(self.allocatedSlice()); |
| | 84 | self.items.len = 0; |
| | 85 | self.capacity = 0; |
| | 86 | } |
| | 87 | |
| 64 | const W = nio.Writable(@This(), ._var); | 88 | const W = nio.Writable(@This(), ._var); |
| 65 | pub const writeAll = W.writeAll; | 89 | pub const writeAll = W.writeAll; |
| 66 | pub const writevAll = W.writevAll; | 90 | pub const writevAll = W.writevAll; |