zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit f1999712b0a8560bd84726c8a5e8fd37dbdf5375 (tree)
parent cd5a9ba1f4e38292d8e8c122c2e8ce4d3879367f
Author: InKryption <inkryption07@gmail.com>
Date:   Thu, 11 Aug 2022 18:28:35 +0200

std.io.Reader: bounded array functions
 * Add readIntoBoundedBytes
 * Add readBoundedBytes

Diffstat:
Mlib/std/io/reader.zig | 21+++++++++++++++++++++
1 file changed, 21 insertions(+), 0 deletions(-)

diff --git 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);