Function writeSplat [src]
If the number of bytes to write based on data and splat fits inside
unusedCapacitySlice, this function is guaranteed to not fail, not call
into VTable, and return the full number of bytes.
Prototype
pub fn writeSplat(w: *Writer, data: []const []const u8, splat: usize) Error!usize
Parameters
w: *Writer
data: []const []const u8
splat: usize
Possible Errors
See the Writer
implementation for detailed diagnostics.
Source
pub fn writeSplat(w: *Writer, data: []const []const u8, splat: usize) Error!usize {
assert(data.len > 0);
const buffer = w.buffer;
const count = countSplat(data, splat);
if (w.end + count > buffer.len) return w.vtable.drain(w, data, splat);
for (data[0 .. data.len - 1]) |bytes| {
@memcpy(buffer[w.end..][0..bytes.len], bytes);
w.end += bytes.len;
}
const pattern = data[data.len - 1];
switch (pattern.len) {
0 => {},
1 => {
@memset(buffer[w.end..][0..splat], pattern[0]);
w.end += splat;
},
else => for (0..splat) |_| {
@memcpy(buffer[w.end..][0..pattern.len], pattern);
w.end += pattern.len;
},
}
return count;
}