1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//! Code taken from older reader implementations, still may be useful to keep
//! around in general. See README.md for license and details.
const std = @import("std");
/// Pulled from old stdlib as this function has been removed.
pub fn readSkipUntilDelimiterOrEof(reader: *std.Io.Reader, delimiter: u8) std.Io.Reader.Error!void {
while (true) {
const byte = readByte(reader) catch |err| switch (err) {
error.EndOfStream => return,
else => |e| return e,
};
if (byte == delimiter) return;
}
}
/// Pulled from old stdlib as this function has been removed.
pub fn readStructEndian(
reader: *std.Io.Reader,
comptime T: type,
endian: std.builtin.Endian,
) std.Io.Reader.Error!T {
var result: [1]T = undefined;
try reader.readSliceEndian(T, &result, endian);
return result[0];
}
/// Pulled from old stdlib as this function has been removed.
pub fn readerInt(reader: *std.Io.Reader, comptime T: type, endian: std.builtin.Endian) std.Io.Reader.Error!T {
const bytes = try readBytesNoEof(reader, @divExact(@typeInfo(T).int.bits, 8));
return std.mem.readInt(T, &bytes, endian);
}
/// Pulled from old stdlib as this function has been removed.
pub fn readByteSigned(reader: *std.Io.Reader) std.Io.Reader.Error!i8 {
return @as(i8, @bitCast(try readByte(reader)));
}
/// Pulled from old stdlib as this function has been removed.
pub fn readByte(reader: *std.Io.Reader) std.Io.Reader.Error!u8 {
var result: [1]u8 = undefined;
try reader.readSliceAll(&result);
return result[0];
}
/// Pulled from old stdlib as this function has been removed.
pub fn readSkipBytes(reader: *std.Io.Reader, num_bytes: u64) std.Io.Reader.Error!void {
const buf_size = 512;
var buf: [buf_size]u8 = undefined;
var remaining = num_bytes;
while (remaining > 0) {
const amt = @min(remaining, buf_size);
try reader.readSliceAll(buf[0..amt]);
remaining -= amt;
}
}
/// Pulled from old stdlib as this function has been removed.
fn readBytesNoEof(reader: *std.Io.Reader, comptime num_bytes: usize) std.Io.Reader.Error![num_bytes]u8 {
var bytes: [num_bytes]u8 = undefined;
try reader.readSliceAll(&bytes);
return bytes;
}
|