This API is designed for convenience rather than performance:
Entry at a time from the Io
implementation rather than doing batch operations.Still, it will do a decent job of minimizing syscall overhead. For a
lower level abstraction, see Reader. For a higher level abstraction,
see Walker.
pub const Iterator = struct
pub const Iterator = struct {
reader: Reader,
reader_buffer: [reader_buffer_len]u8 align(@alignOf(usize)),
pub const reader_buffer_len = 2048;
comptime {
assert(reader_buffer_len >= Reader.min_buffer_len);
}
pub const Error = Reader.Error;
pub fn init(dir: Dir, reader_state: Reader.State) Iterator {
return .{
.reader = .{
.dir = dir,
.state = reader_state,
.index = 0,
.end = 0,
.buffer = undefined,
},
.reader_buffer = undefined,
};
}
pub fn next(it: *Iterator, io: Io) Error!?Entry {
it.reader.buffer = &it.reader_buffer;
return it.reader.next(io);
}
}