Function writeSplatHeaderLimit [src]

Equivalent to writeSplatHeader but writes at most limit bytes.

Prototype

pub fn writeSplatHeaderLimit( w: *Writer, header: []const u8, data: []const []const u8, splat: usize, limit: Limit, ) Error!usize

Parameters

w: *Writerheader: []const u8data: []const []const u8splat: usizelimit: Limit

Possible Errors

WriteFailed

See the Writer implementation for detailed diagnostics.

Source

pub fn writeSplatHeaderLimit( w: *Writer, header: []const u8, data: []const []const u8, splat: usize, limit: Limit, ) Error!usize { var remaining = @intFromEnum(limit); { const copy_len = @min(header.len, w.buffer.len - w.end, remaining); if (header.len - copy_len != 0) return writeSplatHeaderLimitFinish(w, header, data, splat, remaining); @memcpy(w.buffer[w.end..][0..copy_len], header[0..copy_len]); w.end += copy_len; remaining -= copy_len; } for (data[0 .. data.len - 1], 0..) |buf, i| { const copy_len = @min(buf.len, w.buffer.len - w.end, remaining); if (buf.len - copy_len != 0) return @intFromEnum(limit) - remaining + try writeSplatHeaderLimitFinish(w, &.{}, data[i..], splat, remaining); @memcpy(w.buffer[w.end..][0..copy_len], buf[0..copy_len]); w.end += copy_len; remaining -= copy_len; } const pattern = data[data.len - 1]; const splat_n = pattern.len * splat; if (splat_n > @min(w.buffer.len - w.end, remaining)) { const buffered_n = @intFromEnum(limit) - remaining; const written = try writeSplatHeaderLimitFinish(w, &.{}, data[data.len - 1 ..][0..1], splat, remaining); return buffered_n + written; } for (0..splat) |_| { @memcpy(w.buffer[w.end..][0..pattern.len], pattern); w.end += pattern.len; } remaining -= splat_n; return @intFromEnum(limit) - remaining; }