| ... | @@ -2742,29 +2742,26 @@ pub const Allocating = struct { | ... | @@ -2742,29 +2742,26 @@ pub const Allocating = struct { |
| 2742 | | 2742 | |
| 2743 | fn drain(w: *Writer, data: []const []const u8, splat: usize) Error!usize { | 2743 | fn drain(w: *Writer, data: []const []const u8, splat: usize) Error!usize { |
| 2744 | const a: *Allocating = @fieldParentPtr("writer", w); | 2744 | const a: *Allocating = @fieldParentPtr("writer", w); |
| 2745 | const pattern = data[data.len - 1]; | | |
| 2746 | const splat_len = pattern.len * splat; | | |
| 2747 | const start_len = a.writer.end; | | |
| 2748 | assert(data.len != 0); | 2745 | assert(data.len != 0); |
| 2749 | for (data) |bytes| { | 2746 | const count = countSplat(data, splat); |
| 2750 | a.ensureUnusedCapacity(bytes.len + splat_len + 1) catch return error.WriteFailed; | 2747 | a.ensureUnusedCapacity(count + 1) catch return error.WriteFailed; |
| | 2748 | for (data[0 .. data.len - 1]) |bytes| { |
| 2751 | @memcpy(a.writer.buffer[a.writer.end..][0..bytes.len], bytes); | 2749 | @memcpy(a.writer.buffer[a.writer.end..][0..bytes.len], bytes); |
| 2752 | a.writer.end += bytes.len; | 2750 | a.writer.end += bytes.len; |
| 2753 | } | 2751 | } |
| 2754 | if (splat == 0) { | 2752 | const pattern = data[data.len - 1]; |
| 2755 | a.writer.end -= pattern.len; | 2753 | switch (pattern.len) { |
| 2756 | } else switch (pattern.len) { | | |
| 2757 | 0 => {}, | 2754 | 0 => {}, |
| 2758 | 1 => { | 2755 | 1 => { |
| 2759 | @memset(a.writer.buffer[a.writer.end..][0 .. splat - 1], pattern[0]); | 2756 | @memset(a.writer.buffer[a.writer.end..][0..splat], pattern[0]); |
| 2760 | a.writer.end += splat - 1; | 2757 | a.writer.end += splat; |
| 2761 | }, | 2758 | }, |
| 2762 | else => for (0..splat - 1) |_| { | 2759 | else => for (0..splat) |_| { |
| 2763 | @memcpy(a.writer.buffer[a.writer.end..][0..pattern.len], pattern); | 2760 | @memcpy(a.writer.buffer[a.writer.end..][0..pattern.len], pattern); |
| 2764 | a.writer.end += pattern.len; | 2761 | a.writer.end += pattern.len; |
| 2765 | }, | 2762 | }, |
| 2766 | } | 2763 | } |
| 2767 | return a.writer.end - start_len; | 2764 | return count; |
| 2768 | } | 2765 | } |
| 2769 | | 2766 | |
| 2770 | fn sendFile(w: *Writer, file_reader: *File.Reader, limit: Limit) FileError!usize { | 2767 | fn sendFile(w: *Writer, file_reader: *File.Reader, limit: Limit) FileError!usize { |