| ... | @@ -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 | } |
| 233 | | 233 | |
| 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 | } |
| 240 | | 250 | |
| ... | @@ -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 | |
| | 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 | } |