aboutsummaryrefslogtreecommitdiff
path: root/lib/std/array_list.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-02-21 17:37:41 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-02-23 02:37:11 -0700
commit17291e072b86b7f2bcb775907cf0984e281662a2 (patch)
tree5a684ce6b05835c99dc6437bd5cb6b5eef100403 /lib/std/array_list.zig
parent2e7d8062cad12510c37bf1b882058c8fc869b6c0 (diff)
downloadzig-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.zig18
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;
}