Added NullOutStream and CountingOutStream (#1722)
This commit is contained in:
parent
b8b36f3cce
commit
2a9843de95
@ -646,7 +646,7 @@ fn cmdFmt(allocator: *Allocator, args: []const []const u8) !void {
|
|||||||
os.exit(1);
|
os.exit(1);
|
||||||
}
|
}
|
||||||
if (flags.present("check")) {
|
if (flags.present("check")) {
|
||||||
const anything_changed = try std.zig.render(allocator, io.noop_out_stream, &tree);
|
const anything_changed = try std.zig.render(allocator, io.null_out_stream, &tree);
|
||||||
const code = if (anything_changed) u8(1) else u8(0);
|
const code = if (anything_changed) u8(1) else u8(0);
|
||||||
os.exit(code);
|
os.exit(code);
|
||||||
}
|
}
|
||||||
@ -792,7 +792,7 @@ async fn fmtPath(fmt: *Fmt, file_path_ref: []const u8, check_mode: bool) FmtErro
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (check_mode) {
|
if (check_mode) {
|
||||||
const anything_changed = try std.zig.render(fmt.loop.allocator, io.noop_out_stream, &tree);
|
const anything_changed = try std.zig.render(fmt.loop.allocator, io.null_out_stream, &tree);
|
||||||
if (anything_changed) {
|
if (anything_changed) {
|
||||||
try stderr.print("{}\n", file_path);
|
try stderr.print("{}\n", file_path);
|
||||||
fmt.any_error = true;
|
fmt.any_error = true;
|
||||||
|
80
std/io.zig
80
std/io.zig
@ -249,13 +249,6 @@ pub fn OutStream(comptime WriteError: type) type {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const noop_out_stream = &noop_out_stream_state;
|
|
||||||
const NoopOutStreamError = error{};
|
|
||||||
var noop_out_stream_state = OutStream(NoopOutStreamError){
|
|
||||||
.writeFn = noop_out_stream_write,
|
|
||||||
};
|
|
||||||
fn noop_out_stream_write(self: *OutStream(NoopOutStreamError), bytes: []const u8) error{}!void {}
|
|
||||||
|
|
||||||
pub fn writeFile(path: []const u8, data: []const u8) !void {
|
pub fn writeFile(path: []const u8, data: []const u8) !void {
|
||||||
var file = try File.openWrite(path);
|
var file = try File.openWrite(path);
|
||||||
defer file.close();
|
defer file.close();
|
||||||
@ -495,6 +488,77 @@ pub const SliceOutStream = struct {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
test "io.SliceOutStream" {
|
||||||
|
var buf: [255]u8 = undefined;
|
||||||
|
var slice_stream = SliceOutStream.init(buf[0..]);
|
||||||
|
const stream = &slice_stream.stream;
|
||||||
|
|
||||||
|
try stream.print("{}{}!", "Hello", "World");
|
||||||
|
debug.assert(mem.eql(u8, "HelloWorld!", slice_stream.getWritten()));
|
||||||
|
}
|
||||||
|
|
||||||
|
var null_out_stream_state = NullOutStream.init();
|
||||||
|
pub const null_out_stream = &null_out_stream_state.stream;
|
||||||
|
|
||||||
|
/// An OutStream that doesn't write to anything.
|
||||||
|
pub const NullOutStream = struct {
|
||||||
|
pub const Error = error{};
|
||||||
|
pub const Stream = OutStream(Error);
|
||||||
|
|
||||||
|
pub stream: Stream,
|
||||||
|
|
||||||
|
pub fn init() NullOutStream {
|
||||||
|
return NullOutStream{
|
||||||
|
.stream = Stream{ .writeFn = writeFn },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn writeFn(out_stream: *Stream, bytes: []const u8) Error!void {}
|
||||||
|
};
|
||||||
|
|
||||||
|
test "io.NullOutStream" {
|
||||||
|
var null_stream = NullOutStream.init();
|
||||||
|
const stream = &null_stream.stream;
|
||||||
|
stream.write("yay" ** 10000) catch unreachable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An OutStream that counts how many bytes has been written to it.
|
||||||
|
pub fn CountingOutStream(comptime OutStreamError: type) type {
|
||||||
|
return struct {
|
||||||
|
const Self = @This();
|
||||||
|
pub const Stream = OutStream(Error);
|
||||||
|
pub const Error = OutStreamError;
|
||||||
|
|
||||||
|
pub stream: Stream,
|
||||||
|
pub bytes_written: usize,
|
||||||
|
child_stream: *Stream,
|
||||||
|
|
||||||
|
pub fn init(child_stream: *Stream) Self {
|
||||||
|
return Self{
|
||||||
|
.stream = Stream{ .writeFn = writeFn },
|
||||||
|
.bytes_written = 0,
|
||||||
|
.child_stream = child_stream,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn writeFn(out_stream: *Stream, bytes: []const u8) OutStreamError!void {
|
||||||
|
const self = @fieldParentPtr(Self, "stream", out_stream);
|
||||||
|
try self.child_stream.write(bytes);
|
||||||
|
self.bytes_written += bytes.len;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
test "io.CountingOutStream" {
|
||||||
|
var null_stream = NullOutStream.init();
|
||||||
|
var counting_stream = CountingOutStream(NullOutStream.Error).init(&null_stream.stream);
|
||||||
|
const stream = &counting_stream.stream;
|
||||||
|
|
||||||
|
const bytes = "yay" ** 10000;
|
||||||
|
stream.write(bytes) catch unreachable;
|
||||||
|
debug.assert(counting_stream.bytes_written == bytes.len);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn BufferedOutStream(comptime Error: type) type {
|
pub fn BufferedOutStream(comptime Error: type) type {
|
||||||
return BufferedOutStreamCustom(os.page_size, Error);
|
return BufferedOutStreamCustom(os.page_size, Error);
|
||||||
}
|
}
|
||||||
@ -639,5 +703,3 @@ pub fn readLine(buf: []u8) !usize {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user