authorgravatar for chrisj.stephen2@gmail.comchristian-stephen <chrisj.stephen2@gmail.com> 2020-10-04 12:44:01-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-11-27 18:01:49-07:00
loga6222d1d4bd239530bccf42a1d20b4d48fb94139
tree7e91df410e3bec8643c77a71b96b8decf0ed1ce6
parentf09f960ce44ef00c4c05be5919068790898cc049

Add readAllArrayListAligned to Reader which can accept an arbitrary alignment


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

lib/std/fs/file.zig+1-1
...@@ -394,7 +394,7 @@ pub const File = struct {...@@ -394,7 +394,7 @@ pub const File = struct {
394 var array_list = try std.ArrayListAligned(u8, alignment).initCapacity(allocator, initial_cap);394 var array_list = try std.ArrayListAligned(u8, alignment).initCapacity(allocator, initial_cap);
395 defer array_list.deinit();395 defer array_list.deinit();
396396
397 self.reader().readAllArrayList(&array_list, max_bytes) catch |err| switch (err) {397 self.reader().readAllArrayListAligned(alignment, &array_list, max_bytes) catch |err| switch (err) {
398 error.StreamTooLong => return error.FileTooBig,398 error.StreamTooLong => return error.FileTooBig,
399 else => |e| return e,399 else => |e| return e,
400 };400 };
lib/std/io/reader.zig+9
...@@ -57,6 +57,15 @@ pub fn Reader(...@@ -57,6 +57,15 @@ pub fn Reader(
57 /// If the number of bytes appended would exceed `max_append_size`, `error.StreamTooLong` is returned57 /// If the number of bytes appended would exceed `max_append_size`, `error.StreamTooLong` is returned
58 /// and the `std.ArrayList` has exactly `max_append_size` bytes appended.58 /// and the `std.ArrayList` has exactly `max_append_size` bytes appended.
59 pub fn readAllArrayList(self: Self, array_list: *std.ArrayList(u8), max_append_size: usize) !void {59 pub fn readAllArrayList(self: Self, array_list: *std.ArrayList(u8), max_append_size: usize) !void {
60 return self.readAllArrayListAligned(null, array_list, max_append_size);
61 }
62
63 pub fn readAllArrayListAligned(
64 self: Self,
65 comptime alignment: ?u29,
66 array_list: *std.ArrayListAligned(u8, alignment),
67 max_append_size: usize
68 ) !void {
60 try array_list.ensureCapacity(math.min(max_append_size, 4096));69 try array_list.ensureCapacity(math.min(max_append_size, 4096));
61 const original_len = array_list.items.len;70 const original_len = array_list.items.len;
62 var start_index: usize = original_len;71 var start_index: usize = original_len;