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:
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);