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(...@@ -231,10 +231,20 @@ pub fn Reader(
231 return mem.readVarInt(ReturnType, bytes, endian);231 return mem.readVarInt(ReturnType, bytes, endian);
232 }232 }
233233
234 pub fn skipBytes(self: Self, num_bytes: u64) !void {234 /// Optional parameters for `skipBytes`
235 var i: u64 = 0;235 pub const SkipBytesOptions = struct {
236 while (i < num_bytes) : (i += 1) {236 buf_size: usize = 512,
237 _ = try self.readByte();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;
238 }248 }
239 }249 }
240250
...@@ -298,3 +308,11 @@ test "Reader.isBytes" {...@@ -298,3 +308,11 @@ test "Reader.isBytes" {
298 testing.expectEqual(true, try reader.isBytes("foo"));308 testing.expectEqual(true, try reader.isBytes("foo"));
299 testing.expectEqual(false, try reader.isBytes("qux"));309 testing.expectEqual(false, try reader.isBytes("qux"));
300}310}
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}