authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-21 17:37:41-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-02-23 02:37:11-07:00
log17291e072b86b7f2bcb775907cf0984e281662a2
tree5a684ce6b05835c99dc6437bd5cb6b5eef100403
parent2e7d8062cad12510c37bf1b882058c8fc869b6c0

std.ArrayList: fixedWriter

A writer that appends to the list, returning error.OutOfMemory rather than attempting to increase capacity.

1 files changed, 10 insertions(+), 8 deletions(-)

lib/std/array_list.zig+10-8
...@@ -946,18 +946,20 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?u29) typ...@@ -946,18 +946,20 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?u29) typ
946 return m.len;946 return m.len;
947 }947 }
948948
949 pub const WriterAssumeCapacity = std.io.Writer(*Self, error{}, appendWriteAssumeCapacity);949 pub const FixedWriter = std.io.Writer(*Self, Allocator.Error, appendWriteFixed);
950950
951 /// Initializes a Writer which will append to the list, asserting the951 /// Initializes a Writer which will append to the list but will return
952 /// list can hold the additional bytes.952 /// `error.OutOfMemory` rather than increasing capacity.
953 pub fn writerAssumeCapacity(self: *Self) WriterAssumeCapacity {953 pub fn fixedWriter(self: *Self) FixedWriter {
954 return .{ .context = self };954 return .{ .context = self };
955 }955 }
956956
957 /// Same as `appendSliceAssumeCapacity` except it returns the number of bytes written,957 /// The purpose of this function existing is to match `std.io.Writer` API.
958 /// which is always the same as `m.len`. The purpose of this function958 fn appendWriteFixed(self: *Self, m: []const u8) error{OutOfMemory}!usize {
959 /// existing is to match `std.io.Writer` API.959 const available_capacity = self.capacity - self.items.len;
960 fn appendWriteAssumeCapacity(self: *Self, m: []const u8) error{}!usize {960 if (m.len > available_capacity)
961 return error.OutOfMemory;
962
961 self.appendSliceAssumeCapacity(m);963 self.appendSliceAssumeCapacity(m);
962 return m.len;964 return m.len;
963 }965 }