| ... | ... | @@ -231,10 +231,20 @@ pub fn Reader( |
| 231 | 231 | return mem.readVarInt(ReturnType, bytes, endian); |
| 232 | 232 | } |
| 233 | 233 | |
| 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; |
| 238 | 248 | } |
| 239 | 249 | } |
| 240 | 250 | |
| ... | ... | @@ -298,3 +308,11 @@ test "Reader.isBytes" { |
| 298 | 308 | testing.expectEqual(true, try reader.isBytes("foo")); |
| 299 | 309 | testing.expectEqual(false, try reader.isBytes("qux")); |
| 300 | 310 | } |
| 311 | |
| 312 | test "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 | } |