authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2020-08-26 19:50:46+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-08-28 19:42:36+02:00
log3750cc06fda89c076da850a430d39d959ce45a99
tree3a07791c0a3f0e2fb7837e0bf52ac03e47888a0b
parentf6cedfaaca2a1ca22786b32aa76ef6348b74ac38

Improve io.Reader.skipBytes and add tests


1 files changed, 22 insertions(+), 4 deletions(-)

lib/std/io/reader.zig+22-4
......@@ -231,10 +231,20 @@ pub fn Reader(
231231 return mem.readVarInt(ReturnType, bytes, endian);
232232 }
233233
234 pub fn skipBytes(self: Self, num_bytes: u64) !void {
235 var i: u64 = 0;
236 while (i < num_bytes) : (i += 1) {
237 _ = try self.readByte();
234 /// Optional parameters for `skipBytes`
235 pub const SkipBytesOptions = struct {
236 buf_size: usize = 512,
237 };
238
239 /// Reads `num_bytes` bytes from the stream and discards them
240 pub fn skipBytes(self: Self, num_bytes: usize, comptime options: SkipBytesOptions) !void {
241 var buf: [options.buf_size]u8 = undefined;
242 var remaining = num_bytes;
243
244 while (remaining > 0) {
245 const amt = std.math.min(remaining, options.buf_size);
246 try self.readNoEof(buf[0..amt]);
247 remaining -= amt;
238248 }
239249 }
240250
......@@ -298,3 +308,11 @@ test "Reader.isBytes" {
298308 testing.expectEqual(true, try reader.isBytes("foo"));
299309 testing.expectEqual(false, try reader.isBytes("qux"));
300310}
311
312test "Reader.skipBytes" {
313 const reader = std.io.fixedBufferStream("foobar").reader();
314 try reader.skipBytes(3, .{});
315 testing.expect(try reader.isBytes("bar"));
316 try reader.skipBytes(0, .{});
317 testing.expectError(error.EndOfStream, reader.skipBytes(1, .{}));
318}