stream
Function parameters
Parameters
- io_r:*std.Io.Reader
- w:*std.Io.Writer
- limit:std.Io.Limit
Type definitions in this namespace
Types
- Reader
- A `std.Io.Reader` that writes a predetermined list of buffers during `stream`.
- ReaderIndirect
- A `std.Io.Reader` that gets its data from another `std.Io.Reader`, and always
This function is intended to be used only in tests.
Functions
- expectError
- This function is intended to be used only in tests.
- expectEqual
- This function is intended to be used only in tests.
- expectFmt
- This function is intended to be used only in tests.
- expectApproxEqAbs
- This function is intended to be used only in tests.
- expectApproxEqRel
- This function is intended to be used only in tests.
- expectEqualSlices
- This function is intended to be used only in tests.
- expectEqualSentinel
- This function is intended to be used only in tests.
- expect
- This function is intended to be used only in tests.
- expectEqualDeep
- This function is intended to be used only in tests.
- checkAllAllocationFailures
- Exhaustively check that allocation failures within `test_fn` are handled without
- refAllDecls
- Given a type, references all the declarations inside, so that the semantic analyzer sees them.
- refAllDeclsRecursive
- Given a type, recursively references all the declarations inside, so that the semantic analyzer sees them.
- fuzz
- Inline to avoid coverage instrumentation.
Provides deterministic randomness in unit tests.
Values
- random_seed
- Provides deterministic randomness in unit tests.
- failing_allocator
- = failing_allocator_instance.allocator()
- allocator
- This should only be used in temporary test programs.
- log_level
- TODO https://github.com/ziglang/zig/issues/5738
- backend_can_print
- = switch (builtin.zig_backend) { .stage2_aarch64, .stage2_powerpc, .stage2_riscv64, .stage2_spirv, => false, else => true, }
Source
Implementation
fn stream(io_r: *std.Io.Reader, w: *std.Io.Writer, limit: std.Io.Limit) std.Io.Reader.StreamError!usize {
const r: *Reader = @alignCast(@fieldParentPtr("interface", io_r));
if (r.calls.len - r.next_call_index == 0) return error.EndOfStream;
const call = r.calls[r.next_call_index];
const buffer = r.artificial_limit.sliceConst(limit.sliceConst(call.buffer[r.next_offset..]));
const n = try w.write(buffer);
r.next_offset += n;
if (call.buffer.len - r.next_offset == 0) {
r.next_call_index += 1;
r.next_offset = 0;
}
return n;
}