| author | |
| committer | |
| log | 1fcaf90dd3c99d452fcab13698a63faf17e8f3c1 |
| tree | f8ab000e6f06739310890b562b7c024b9ae4df74 |
| parent | 8414638fb878febc9da2e956696d591c26fed101 |
addresses only one usage pattern in #246082 files changed, 2 insertions(+), 12 deletions(-)
lib/std/Io/Reader.zig-9| ... | @@ -1055,15 +1055,6 @@ pub fn fill(r: *Reader, n: usize) Error!void { | ... | @@ -1055,15 +1055,6 @@ pub fn fill(r: *Reader, n: usize) Error!void { |
| 1055 | /// Missing this optimization can result in wall-clock time for the most affected benchmarks | 1055 | /// Missing this optimization can result in wall-clock time for the most affected benchmarks |
| 1056 | /// increasing by a factor of 5 or more. | 1056 | /// increasing by a factor of 5 or more. |
| 1057 | fn fillUnbuffered(r: *Reader, n: usize) Error!void { | 1057 | fn fillUnbuffered(r: *Reader, n: usize) Error!void { |
| 1058 | if (r.seek + n <= r.buffer.len) while (true) { | ||
| 1059 | const end_cap = r.buffer[r.end..]; | ||
| 1060 | var writer: Writer = .fixed(end_cap); | ||
| 1061 | r.end += r.vtable.stream(r, &writer, .limited(end_cap.len)) catch |err| switch (err) { | ||
| 1062 | error.WriteFailed => unreachable, | ||
| 1063 | else => |e| return e, | ||
| 1064 | }; | ||
| 1065 | if (r.seek + n <= r.end) return; | ||
| 1066 | }; | ||
| 1067 | try rebase(r, n); | 1058 | try rebase(r, n); |
| 1068 | var writer: Writer = .{ | 1059 | var writer: Writer = .{ |
| 1069 | .buffer = r.buffer, | 1060 | .buffer = r.buffer, |
lib/std/compress/zstd/Decompress.zig+2-3| ... | @@ -100,9 +100,8 @@ fn rebase(r: *Reader, capacity: usize) Reader.RebaseError!void { | ... | @@ -100,9 +100,8 @@ fn rebase(r: *Reader, capacity: usize) Reader.RebaseError!void { |
| 100 | const d: *Decompress = @alignCast(@fieldParentPtr("reader", r)); | 100 | const d: *Decompress = @alignCast(@fieldParentPtr("reader", r)); |
| 101 | assert(capacity <= r.buffer.len - d.window_len); | 101 | assert(capacity <= r.buffer.len - d.window_len); |
| 102 | assert(r.end + capacity > r.buffer.len); | 102 | assert(r.end + capacity > r.buffer.len); |
| 103 | const buffered = r.buffer[0..r.end]; | 103 | const discard = r.end - d.window_len; |
| 104 | const discard = buffered.len - d.window_len; | 104 | const keep = r.buffer[discard..r.end]; |
| 105 | const keep = buffered[discard..]; | ||
| 106 | @memmove(r.buffer[0..keep.len], keep); | 105 | @memmove(r.buffer[0..keep.len], keep); |
| 107 | r.end = keep.len; | 106 | r.end = keep.len; |
| 108 | r.seek -= discard; | 107 | r.seek -= discard; |