Wait until at least one stream receives more data.
pub fn fill(mr: *MultiReader, unused_capacity: usize, timeout: Io.Timeout) FillError!void
pub fn fill(mr: *MultiReader, unused_capacity: usize, timeout: Io.Timeout) FillError!void {
const contexts = mr.streams.contexts();
const io = contexts[0].fr.io;
var any_completed = false;
try mr.batch.awaitConcurrent(io, timeout);
while (mr.batch.next()) |operation| {
any_completed = true;
const context = &contexts[operation.index];
const n = operation.result.file_read_streaming catch |err| {
context.err = err;
continue;
};
const r = &context.fr.interface;
r.end += n;
if (r.buffer.len - r.end < unused_capacity) {
rebaseGrowing(mr, context, r.bufferedLen() + unused_capacity) catch |err| {
context.err = err;
continue;
};
assert(r.seek == 0);
}
context.vec[0] = r.buffer[r.end..];
mr.batch.addAt(operation.index, .{ .file_read_streaming = .{
.file = context.fr.file,
.data = &context.vec,
} });
}
if (!any_completed) return error.EndOfStream;
}