mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
std.Io: delete BufferedReader
This commit is contained in:
parent
8b571723fa
commit
499bf2a1c7
@ -1078,11 +1078,9 @@ const CorrespondingLines = struct {
|
|||||||
at_eof: bool = false,
|
at_eof: bool = false,
|
||||||
span: SourceMappings.CorrespondingSpan,
|
span: SourceMappings.CorrespondingSpan,
|
||||||
file: std.fs.File,
|
file: std.fs.File,
|
||||||
buffered_reader: BufferedReaderType,
|
buffered_reader: *std.Io.Reader,
|
||||||
code_page: SupportedCodePage,
|
code_page: SupportedCodePage,
|
||||||
|
|
||||||
const BufferedReaderType = std.io.BufferedReader(512, std.fs.File.DeprecatedReader);
|
|
||||||
|
|
||||||
pub fn init(cwd: std.fs.Dir, err_details: ErrorDetails, line_for_comparison: []const u8, corresponding_span: SourceMappings.CorrespondingSpan, corresponding_file: []const u8) !CorrespondingLines {
|
pub fn init(cwd: std.fs.Dir, err_details: ErrorDetails, line_for_comparison: []const u8, corresponding_span: SourceMappings.CorrespondingSpan, corresponding_file: []const u8) !CorrespondingLines {
|
||||||
// We don't do line comparison for this error, so don't print the note if the line
|
// We don't do line comparison for this error, so don't print the note if the line
|
||||||
// number is different
|
// number is different
|
||||||
@ -1101,9 +1099,7 @@ const CorrespondingLines = struct {
|
|||||||
.buffered_reader = undefined,
|
.buffered_reader = undefined,
|
||||||
.code_page = err_details.code_page,
|
.code_page = err_details.code_page,
|
||||||
};
|
};
|
||||||
corresponding_lines.buffered_reader = BufferedReaderType{
|
corresponding_lines.buffered_reader = corresponding_lines.file.reader();
|
||||||
.unbuffered_reader = corresponding_lines.file.deprecatedReader(),
|
|
||||||
};
|
|
||||||
errdefer corresponding_lines.deinit();
|
errdefer corresponding_lines.deinit();
|
||||||
|
|
||||||
var fbs = std.io.fixedBufferStream(&corresponding_lines.line_buf);
|
var fbs = std.io.fixedBufferStream(&corresponding_lines.line_buf);
|
||||||
|
|||||||
@ -145,13 +145,12 @@ fn mainImpl() !void {
|
|||||||
var parser = try Parser.init(gpa);
|
var parser = try Parser.init(gpa);
|
||||||
defer parser.deinit();
|
defer parser.deinit();
|
||||||
|
|
||||||
var stdin_buf = std.io.bufferedReader(std.fs.File.stdin().deprecatedReader());
|
var stdin_buffer: [1024]u8 = undefined;
|
||||||
var line_buf = std.ArrayList(u8).init(gpa);
|
var stdin_reader = std.fs.File.stdin().reader(&stdin_buffer);
|
||||||
defer line_buf.deinit();
|
|
||||||
while (stdin_buf.reader().streamUntilDelimiter(line_buf.writer(), '\n', null)) {
|
while (stdin_reader.takeDelimiterExclusive('\n')) |line| {
|
||||||
if (line_buf.getLastOrNull() == '\r') _ = line_buf.pop();
|
const trimmed = std.mem.trimRight(u8, line, '\r');
|
||||||
try parser.feedLine(line_buf.items);
|
try parser.feedLine(trimmed);
|
||||||
line_buf.clearRetainingCapacity();
|
|
||||||
} else |err| switch (err) {
|
} else |err| switch (err) {
|
||||||
error.EndOfStream => {},
|
error.EndOfStream => {},
|
||||||
else => |e| return e,
|
else => |e| return e,
|
||||||
|
|||||||
@ -428,12 +428,6 @@ pub const BufferedWriter = @import("Io/buffered_writer.zig").BufferedWriter;
|
|||||||
/// Deprecated in favor of `Writer`.
|
/// Deprecated in favor of `Writer`.
|
||||||
pub const bufferedWriter = @import("Io/buffered_writer.zig").bufferedWriter;
|
pub const bufferedWriter = @import("Io/buffered_writer.zig").bufferedWriter;
|
||||||
/// Deprecated in favor of `Reader`.
|
/// Deprecated in favor of `Reader`.
|
||||||
pub const BufferedReader = @import("Io/buffered_reader.zig").BufferedReader;
|
|
||||||
/// Deprecated in favor of `Reader`.
|
|
||||||
pub const bufferedReader = @import("Io/buffered_reader.zig").bufferedReader;
|
|
||||||
/// Deprecated in favor of `Reader`.
|
|
||||||
pub const bufferedReaderSize = @import("Io/buffered_reader.zig").bufferedReaderSize;
|
|
||||||
/// Deprecated in favor of `Reader`.
|
|
||||||
pub const FixedBufferStream = @import("Io/fixed_buffer_stream.zig").FixedBufferStream;
|
pub const FixedBufferStream = @import("Io/fixed_buffer_stream.zig").FixedBufferStream;
|
||||||
/// Deprecated in favor of `Reader`.
|
/// Deprecated in favor of `Reader`.
|
||||||
pub const fixedBufferStream = @import("Io/fixed_buffer_stream.zig").fixedBufferStream;
|
pub const fixedBufferStream = @import("Io/fixed_buffer_stream.zig").fixedBufferStream;
|
||||||
@ -926,7 +920,6 @@ pub fn PollFiles(comptime StreamEnum: type) type {
|
|||||||
test {
|
test {
|
||||||
_ = Reader;
|
_ = Reader;
|
||||||
_ = Writer;
|
_ = Writer;
|
||||||
_ = BufferedReader;
|
|
||||||
_ = BufferedWriter;
|
_ = BufferedWriter;
|
||||||
_ = CountingWriter;
|
_ = CountingWriter;
|
||||||
_ = CountingReader;
|
_ = CountingReader;
|
||||||
|
|||||||
@ -1,201 +0,0 @@
|
|||||||
const std = @import("../std.zig");
|
|
||||||
const io = std.io;
|
|
||||||
const mem = std.mem;
|
|
||||||
const assert = std.debug.assert;
|
|
||||||
const testing = std.testing;
|
|
||||||
|
|
||||||
pub fn BufferedReader(comptime buffer_size: usize, comptime ReaderType: type) type {
|
|
||||||
return struct {
|
|
||||||
unbuffered_reader: ReaderType,
|
|
||||||
buf: [buffer_size]u8 = undefined,
|
|
||||||
start: usize = 0,
|
|
||||||
end: usize = 0,
|
|
||||||
|
|
||||||
pub const Error = ReaderType.Error;
|
|
||||||
pub const Reader = io.GenericReader(*Self, Error, read);
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn read(self: *Self, dest: []u8) Error!usize {
|
|
||||||
// First try reading from the already buffered data onto the destination.
|
|
||||||
const current = self.buf[self.start..self.end];
|
|
||||||
if (current.len != 0) {
|
|
||||||
const to_transfer = @min(current.len, dest.len);
|
|
||||||
@memcpy(dest[0..to_transfer], current[0..to_transfer]);
|
|
||||||
self.start += to_transfer;
|
|
||||||
return to_transfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If dest is large, read from the unbuffered reader directly into the destination.
|
|
||||||
if (dest.len >= buffer_size) {
|
|
||||||
return self.unbuffered_reader.read(dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If dest is small, read from the unbuffered reader into our own internal buffer,
|
|
||||||
// and then transfer to destination.
|
|
||||||
self.end = try self.unbuffered_reader.read(&self.buf);
|
|
||||||
const to_transfer = @min(self.end, dest.len);
|
|
||||||
@memcpy(dest[0..to_transfer], self.buf[0..to_transfer]);
|
|
||||||
self.start = to_transfer;
|
|
||||||
return to_transfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn reader(self: *Self) Reader {
|
|
||||||
return .{ .context = self };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn bufferedReader(reader: anytype) BufferedReader(4096, @TypeOf(reader)) {
|
|
||||||
return .{ .unbuffered_reader = reader };
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn bufferedReaderSize(comptime size: usize, reader: anytype) BufferedReader(size, @TypeOf(reader)) {
|
|
||||||
return .{ .unbuffered_reader = reader };
|
|
||||||
}
|
|
||||||
|
|
||||||
test "OneByte" {
|
|
||||||
const OneByteReadReader = struct {
|
|
||||||
str: []const u8,
|
|
||||||
curr: usize,
|
|
||||||
|
|
||||||
const Error = error{NoError};
|
|
||||||
const Self = @This();
|
|
||||||
const Reader = io.GenericReader(*Self, Error, read);
|
|
||||||
|
|
||||||
fn init(str: []const u8) Self {
|
|
||||||
return Self{
|
|
||||||
.str = str,
|
|
||||||
.curr = 0,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read(self: *Self, dest: []u8) Error!usize {
|
|
||||||
if (self.str.len <= self.curr or dest.len == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
dest[0] = self.str[self.curr];
|
|
||||||
self.curr += 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn reader(self: *Self) Reader {
|
|
||||||
return .{ .context = self };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const str = "This is a test";
|
|
||||||
var one_byte_stream = OneByteReadReader.init(str);
|
|
||||||
var buf_reader = bufferedReader(one_byte_stream.reader());
|
|
||||||
const stream = buf_reader.reader();
|
|
||||||
|
|
||||||
const res = try stream.readAllAlloc(testing.allocator, str.len + 1);
|
|
||||||
defer testing.allocator.free(res);
|
|
||||||
try testing.expectEqualSlices(u8, str, res);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn smallBufferedReader(underlying_stream: anytype) BufferedReader(8, @TypeOf(underlying_stream)) {
|
|
||||||
return .{ .unbuffered_reader = underlying_stream };
|
|
||||||
}
|
|
||||||
test "Block" {
|
|
||||||
const BlockReader = struct {
|
|
||||||
block: []const u8,
|
|
||||||
reads_allowed: usize,
|
|
||||||
curr_read: usize,
|
|
||||||
|
|
||||||
const Error = error{NoError};
|
|
||||||
const Self = @This();
|
|
||||||
const Reader = io.GenericReader(*Self, Error, read);
|
|
||||||
|
|
||||||
fn init(block: []const u8, reads_allowed: usize) Self {
|
|
||||||
return Self{
|
|
||||||
.block = block,
|
|
||||||
.reads_allowed = reads_allowed,
|
|
||||||
.curr_read = 0,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read(self: *Self, dest: []u8) Error!usize {
|
|
||||||
if (self.curr_read >= self.reads_allowed) return 0;
|
|
||||||
@memcpy(dest[0..self.block.len], self.block);
|
|
||||||
|
|
||||||
self.curr_read += 1;
|
|
||||||
return self.block.len;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn reader(self: *Self) Reader {
|
|
||||||
return .{ .context = self };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const block = "0123";
|
|
||||||
|
|
||||||
// len out == block
|
|
||||||
{
|
|
||||||
var test_buf_reader: BufferedReader(4, BlockReader) = .{
|
|
||||||
.unbuffered_reader = BlockReader.init(block, 2),
|
|
||||||
};
|
|
||||||
const reader = test_buf_reader.reader();
|
|
||||||
var out_buf: [4]u8 = undefined;
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, block);
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, block);
|
|
||||||
try testing.expectEqual(try reader.readAll(&out_buf), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// len out < block
|
|
||||||
{
|
|
||||||
var test_buf_reader: BufferedReader(4, BlockReader) = .{
|
|
||||||
.unbuffered_reader = BlockReader.init(block, 2),
|
|
||||||
};
|
|
||||||
const reader = test_buf_reader.reader();
|
|
||||||
var out_buf: [3]u8 = undefined;
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, "012");
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, "301");
|
|
||||||
const n = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, out_buf[0..n], "23");
|
|
||||||
try testing.expectEqual(try reader.readAll(&out_buf), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// len out > block
|
|
||||||
{
|
|
||||||
var test_buf_reader: BufferedReader(4, BlockReader) = .{
|
|
||||||
.unbuffered_reader = BlockReader.init(block, 2),
|
|
||||||
};
|
|
||||||
const reader = test_buf_reader.reader();
|
|
||||||
var out_buf: [5]u8 = undefined;
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, "01230");
|
|
||||||
const n = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, out_buf[0..n], "123");
|
|
||||||
try testing.expectEqual(try reader.readAll(&out_buf), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// len out == 0
|
|
||||||
{
|
|
||||||
var test_buf_reader: BufferedReader(4, BlockReader) = .{
|
|
||||||
.unbuffered_reader = BlockReader.init(block, 2),
|
|
||||||
};
|
|
||||||
const reader = test_buf_reader.reader();
|
|
||||||
var out_buf: [0]u8 = undefined;
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
// len bufreader buf > block
|
|
||||||
{
|
|
||||||
var test_buf_reader: BufferedReader(5, BlockReader) = .{
|
|
||||||
.unbuffered_reader = BlockReader.init(block, 2),
|
|
||||||
};
|
|
||||||
const reader = test_buf_reader.reader();
|
|
||||||
var out_buf: [4]u8 = undefined;
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, block);
|
|
||||||
_ = try reader.readAll(&out_buf);
|
|
||||||
try testing.expectEqualSlices(u8, &out_buf, block);
|
|
||||||
try testing.expectEqual(try reader.readAll(&out_buf), 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -45,9 +45,9 @@ test "write a file, read it, then delete it" {
|
|||||||
const expected_file_size: u64 = "begin".len + data.len + "end".len;
|
const expected_file_size: u64 = "begin".len + data.len + "end".len;
|
||||||
try expectEqual(expected_file_size, file_size);
|
try expectEqual(expected_file_size, file_size);
|
||||||
|
|
||||||
var buf_stream = io.bufferedReader(file.deprecatedReader());
|
var file_buffer: [1024]u8 = undefined;
|
||||||
const st = buf_stream.reader();
|
var file_reader = file.reader(&file_buffer);
|
||||||
const contents = try st.readAllAlloc(std.testing.allocator, 2 * 1024);
|
const contents = try file_reader.interface.allocRemaining(std.testing.allocator, .limited(2 * 1024));
|
||||||
defer std.testing.allocator.free(contents);
|
defer std.testing.allocator.free(contents);
|
||||||
|
|
||||||
try expect(mem.eql(u8, contents[0.."begin".len], "begin"));
|
try expect(mem.eql(u8, contents[0.."begin".len], "begin"));
|
||||||
|
|||||||
@ -1194,14 +1194,8 @@ fn unpackResource(
|
|||||||
},
|
},
|
||||||
.@"tar.xz" => {
|
.@"tar.xz" => {
|
||||||
const gpa = f.arena.child_allocator;
|
const gpa = f.arena.child_allocator;
|
||||||
const reader = resource.reader();
|
var dcp = std.compress.xz.decompress(gpa, resource.reader().adaptToOldInterface()) catch |err|
|
||||||
var br = std.io.bufferedReaderSize(std.crypto.tls.max_ciphertext_record_len, reader);
|
return f.fail(f.location_tok, try eb.printString("unable to decompress tarball: {t}", .{err}));
|
||||||
var dcp = std.compress.xz.decompress(gpa, br.reader()) catch |err| {
|
|
||||||
return f.fail(f.location_tok, try eb.printString(
|
|
||||||
"unable to decompress tarball: {s}",
|
|
||||||
.{@errorName(err)},
|
|
||||||
));
|
|
||||||
};
|
|
||||||
defer dcp.deinit();
|
defer dcp.deinit();
|
||||||
var adapter_buffer: [1024]u8 = undefined;
|
var adapter_buffer: [1024]u8 = undefined;
|
||||||
var adapter = dcp.reader().adaptToNewApi(&adapter_buffer);
|
var adapter = dcp.reader().adaptToNewApi(&adapter_buffer);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user