Function writeSplatAll [src]

The data parameter is mutable because this function needs to mutate the fields in order to handle partial writes from VTable.writeSplat. data will be restored to its original state before returning.

Prototype

pub fn writeSplatAll(w: *Writer, data: [][]const u8, splat: usize) Error!void

Parameters

w: *Writerdata: [][]const u8splat: usize

Possible Errors

WriteFailed

See the Writer implementation for detailed diagnostics.

Example

test writeSplatAll { var aw: Writer.Allocating = .init(testing.allocator); defer aw.deinit(); var buffers = [_][]const u8{ "ba", "na" }; try aw.writer.writeSplatAll(&buffers, 2); try testing.expectEqualStrings("banana", aw.writer.buffered()); }

Source

pub fn writeSplatAll(w: *Writer, data: [][]const u8, splat: usize) Error!void { var index: usize = 0; var truncate: usize = 0; while (index + 1 < data.len) { { const untruncated = data[index]; data[index] = untruncated[truncate..]; defer data[index] = untruncated; truncate += try w.writeSplat(data[index..], splat); } while (truncate >= data[index].len and index + 1 < data.len) { truncate -= data[index].len; index += 1; } } // Deal with any left over splats if (data.len != 0 and truncate < data[index].len * splat) { assert(index == data.len - 1); var remaining_splat = splat; while (true) { remaining_splat -= truncate / data[index].len; truncate %= data[index].len; if (remaining_splat == 0) break; truncate += try w.writeSplat(&.{ data[index][truncate..], data[index] }, remaining_splat - 1); } } }