30 lines
867 B
Zig
30 lines
867 B
Zig
const std = @import("std");
|
|
|
|
pub const Lines = struct {
|
|
buf_reader: std.io.BufferedReader(4096, std.fs.File.Reader),
|
|
line: std.ArrayList(u8),
|
|
|
|
pub fn init(allocator: std.mem.Allocator, file: std.fs.File) Lines {
|
|
return .{
|
|
.buf_reader = std.io.bufferedReader(file.reader()),
|
|
.line = std.ArrayList(u8).init(allocator),
|
|
};
|
|
}
|
|
|
|
pub fn deinit(self: Lines) void {
|
|
self.line.deinit();
|
|
}
|
|
|
|
pub fn next(self: *Lines) !?std.ArrayList(u8) {
|
|
const writer = self.line.writer();
|
|
const reader = self.buf_reader.reader();
|
|
|
|
self.line.clearRetainingCapacity();
|
|
if (reader.streamUntilDelimiter(writer, '\n', null)) {
|
|
return self.line;
|
|
} else |err| switch (err) {
|
|
error.EndOfStream => return null,
|
|
else => return err,
|
|
}
|
|
}
|
|
};
|