mirror of
https://github.com/ziglang/zig.git
synced 2026-02-11 20:11:23 +00:00
std.io: Reader and Writer check vtable ptr rather than context
This commit is contained in:
parent
c27ab8b45d
commit
7d6b5ed510
@ -313,9 +313,8 @@ pub fn readVecLimit(r: *Reader, data: []const []u8, limit: Limit) Error!usize {
|
||||
.last = r.buffer,
|
||||
},
|
||||
.writer = .{
|
||||
.context = &Writer.VectorWrapper.unique_address,
|
||||
.buffer = if (first.len >= r.buffer.len) first else r.buffer,
|
||||
.vtable = &.{ .drain = Writer.fixedDrain },
|
||||
.vtable = &Writer.VectorWrapper.vtable,
|
||||
},
|
||||
};
|
||||
var n = r.vtable.stream(r, &wrapper.writer, .limited(remaining)) catch |err| switch (err) {
|
||||
@ -591,9 +590,8 @@ pub fn readSliceShort(r: *Reader, buffer: []u8) ShortError!usize {
|
||||
.last = r.buffer,
|
||||
},
|
||||
.writer = .{
|
||||
.context = &Writer.VectorWrapper.unique_address,
|
||||
.buffer = if (remaining.len >= r.buffer.len) remaining else r.buffer,
|
||||
.vtable = &.{ .drain = Writer.fixedDrain },
|
||||
.vtable = &Writer.VectorWrapper.vtable,
|
||||
},
|
||||
};
|
||||
const n = r.vtable.stream(r, &wrapper.writer, .unlimited) catch |err| switch (err) {
|
||||
|
||||
@ -333,11 +333,11 @@ pub const WritableVectorIterator = struct {
|
||||
pub const VectorWrapper = struct {
|
||||
writer: Writer,
|
||||
it: WritableVectorIterator,
|
||||
pub var unique_address: u8 = undefined;
|
||||
pub const vtable: VTable = .{ .drain = fixedDrain };
|
||||
};
|
||||
|
||||
pub fn writableVectorIterator(w: *Writer) Error!WritableVectorIterator {
|
||||
if (@as(*u8, @ptrCast(w.context)) == &VectorWrapper.unique_address) {
|
||||
if (w.vtable == &VectorWrapper.vtable) {
|
||||
const wrapper: *VectorWrapper = @fieldParentPtr("writer", w);
|
||||
return wrapper.it;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user