fn drain(w: *Writer, data: []const []const u8, splat: usize) Error!usize w: *Writerdata: []const []const u8splat: usizeWriteFailedSee the Writer implementation for detailed diagnostics.
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862 fn drain(w: *Writer, data: []const []const u8, splat: usize) Error!usize {
const a: *Allocating = @fieldParentPtr("writer", w);
assert(data.len != 0);
const count = countSplat(data, splat);
a.ensureUnusedCapacity(count + 1) catch return error.WriteFailed;
for (data[0 .. data.len - 1]) |bytes| {
@memcpy(a.writer.buffer[a.writer.end..][0..bytes.len], bytes);
a.writer.end += bytes.len;
}
const pattern = data[data.len - 1];
switch (pattern.len) {
0 => {},
1 => {
@memset(a.writer.buffer[a.writer.end..][0..splat], pattern[0]);
a.writer.end += splat;
},
else => for (0..splat) |_| {
@memcpy(a.writer.buffer[a.writer.end..][0..pattern.len], pattern);
a.writer.end += pattern.len;
},
}
return count;
}