From f1999712b0a8560bd84726c8a5e8fd37dbdf5375 Mon Sep 17 00:00:00 2001 From: InKryption Date: Thu, 11 Aug 2022 18:28:35 +0200 Subject: [PATCH] std.io.Reader: bounded array functions * Add readIntoBoundedBytes * Add readBoundedBytes --- lib/std/io/reader.zig | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/std/io/reader.zig b/lib/std/io/reader.zig index 16acef8e48..6acc004851 100644 --- a/lib/std/io/reader.zig +++ b/lib/std/io/reader.zig @@ -247,6 +247,27 @@ pub fn Reader( return bytes; } + /// Reads bytes into the bounded array, until + /// the bounded array is full, or the stream ends. + pub fn readIntoBoundedBytes( + self: Self, + comptime num_bytes: usize, + bounded: *std.BoundedArray(u8, num_bytes), + ) !void { + while (bounded.len < num_bytes) { + const bytes_read = try self.read(bounded.unusedCapacitySlice()); + if (bytes_read == 0) return; + bounded.len += bytes_read; + } + } + + /// Reads at most `num_bytes` and returns as a bounded array. + pub fn readBoundedBytes(self: Self, comptime num_bytes: usize) !std.BoundedArray(u8, num_bytes) { + var result = std.BoundedArray(u8, num_bytes){}; + try self.readIntoBoundedBytes(num_bytes, &result); + return result; + } + /// Reads a native-endian integer pub fn readIntNative(self: Self, comptime T: type) !T { const bytes = try self.readBytesNoEof((@typeInfo(T).Int.bits + 7) / 8);