diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-02-21 17:37:41 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-02-23 02:37:11 -0700 |
| commit | 17291e072b86b7f2bcb775907cf0984e281662a2 (patch) | |
| tree | 5a684ce6b05835c99dc6437bd5cb6b5eef100403 /lib/std/array_list.zig | |
| parent | 2e7d8062cad12510c37bf1b882058c8fc869b6c0 (diff) | |
| download | zig-17291e072b86b7f2bcb775907cf0984e281662a2.tar.gz zig-17291e072b86b7f2bcb775907cf0984e281662a2.zip | |
std.ArrayList: fixedWriter
A writer that appends to the list, returning error.OutOfMemory rather
than attempting to increase capacity.
Diffstat (limited to 'lib/std/array_list.zig')
| -rw-r--r-- | lib/std/array_list.zig | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/std/array_list.zig b/lib/std/array_list.zig index e5fcb8f4fa..1926f627f3 100644 --- a/lib/std/array_list.zig +++ b/lib/std/array_list.zig @@ -946,18 +946,20 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?u29) typ return m.len; } - pub const WriterAssumeCapacity = std.io.Writer(*Self, error{}, appendWriteAssumeCapacity); + pub const FixedWriter = std.io.Writer(*Self, Allocator.Error, appendWriteFixed); - /// Initializes a Writer which will append to the list, asserting the - /// list can hold the additional bytes. - pub fn writerAssumeCapacity(self: *Self) WriterAssumeCapacity { + /// Initializes a Writer which will append to the list but will return + /// `error.OutOfMemory` rather than increasing capacity. + pub fn fixedWriter(self: *Self) FixedWriter { return .{ .context = self }; } - /// Same as `appendSliceAssumeCapacity` except it returns the number of bytes written, - /// which is always the same as `m.len`. The purpose of this function - /// existing is to match `std.io.Writer` API. - fn appendWriteAssumeCapacity(self: *Self, m: []const u8) error{}!usize { + /// The purpose of this function existing is to match `std.io.Writer` API. + fn appendWriteFixed(self: *Self, m: []const u8) error{OutOfMemory}!usize { + const available_capacity = self.capacity - self.items.len; + if (m.len > available_capacity) + return error.OutOfMemory; + self.appendSliceAssumeCapacity(m); return m.len; } |
