Commit b531c0e676

daurnimator <quae@daurnimator.com>
2020-04-25 12:34:47
std: add instream.readBytesNoEof function
1 parent a7a8c43
Changed files (1)
lib
lib/std/io/in_stream.zig
@@ -184,35 +184,38 @@ pub fn InStream(
             return @bitCast(i8, try self.readByte());
         }
 
+        /// Reads exactly `num_bytes` bytes and returns as an array.
+        /// `num_bytes` must be comptime-known
+        pub fn readBytesNoEof(self: Self, comptime num_bytes: usize) ![num_bytes]u8 {
+            var bytes: [num_bytes]u8 = undefined;
+            try self.readNoEof(&bytes);
+            return bytes;
+        }
+
         /// Reads a native-endian integer
         pub fn readIntNative(self: Self, comptime T: type) !T {
-            var bytes: [(T.bit_count + 7) / 8]u8 = undefined;
-            try self.readNoEof(bytes[0..]);
+            const bytes = try self.readBytesNoEof((T.bit_count + 7) / 8);
             return mem.readIntNative(T, &bytes);
         }
 
         /// Reads a foreign-endian integer
         pub fn readIntForeign(self: Self, comptime T: type) !T {
-            var bytes: [(T.bit_count + 7) / 8]u8 = undefined;
-            try self.readNoEof(bytes[0..]);
+            const bytes = try self.readBytesNoEof((T.bit_count + 7) / 8);
             return mem.readIntForeign(T, &bytes);
         }
 
         pub fn readIntLittle(self: Self, comptime T: type) !T {
-            var bytes: [(T.bit_count + 7) / 8]u8 = undefined;
-            try self.readNoEof(bytes[0..]);
+            const bytes = try self.readBytesNoEof((T.bit_count + 7) / 8);
             return mem.readIntLittle(T, &bytes);
         }
 
         pub fn readIntBig(self: Self, comptime T: type) !T {
-            var bytes: [(T.bit_count + 7) / 8]u8 = undefined;
-            try self.readNoEof(bytes[0..]);
+            const bytes = try self.readBytesNoEof((T.bit_count + 7) / 8);
             return mem.readIntBig(T, &bytes);
         }
 
         pub fn readInt(self: Self, comptime T: type, endian: builtin.Endian) !T {
-            var bytes: [(T.bit_count + 7) / 8]u8 = undefined;
-            try self.readNoEof(bytes[0..]);
+            const bytes = try self.readBytesNoEof((T.bit_count + 7) / 8);
             return mem.readInt(T, &bytes, endian);
         }