Function splatBytePreserve [src]
Prototype
pub fn splatBytePreserve(w: *Writer, preserve: usize, byte: u8, n: usize) Error!void
Parameters
w: *Writer
preserve: usize
byte: u8
n: usize
Possible Errors
See the Writer
implementation for detailed diagnostics.
Source
pub fn splatBytePreserve(w: *Writer, preserve: usize, byte: u8, n: usize) Error!void {
const new_end = w.end + n;
if (new_end <= w.buffer.len) {
@memset(w.buffer[w.end..][0..n], byte);
w.end = new_end;
return;
}
// If `n` is large, we can ignore `preserve` up to a point.
var remaining = n;
while (remaining > preserve) {
assert(remaining != 0);
remaining -= try splatByte(w, byte, remaining - preserve);
if (w.end + remaining <= w.buffer.len) {
@memset(w.buffer[w.end..][0..remaining], byte);
w.end += remaining;
return;
}
}
// All the next bytes received must be preserved.
if (preserve < w.end) {
@memmove(w.buffer[0..preserve], w.buffer[w.end - preserve ..][0..preserve]);
w.end = preserve;
}
while (remaining > 0) remaining -= try w.splatByte(byte, remaining);
}