| ... | ... | @@ -498,25 +498,6 @@ pub fn write(w: *Writer, bytes: []const u8) Error!usize { |
| 498 | 498 | return w.vtable.drain(w, &.{bytes}, 1); |
| 499 | 499 | } |
| 500 | 500 | |
| 501 | | /// Asserts `buffer` capacity exceeds `preserve_len`. |
| 502 | | pub fn writePreserve(w: *Writer, preserve_len: usize, bytes: []const u8) Error!usize { |
| 503 | | assert(preserve_len <= w.buffer.len); |
| 504 | | if (w.end + bytes.len <= w.buffer.len) { |
| 505 | | @branchHint(.likely); |
| 506 | | @memcpy(w.buffer[w.end..][0..bytes.len], bytes); |
| 507 | | w.end += bytes.len; |
| 508 | | return bytes.len; |
| 509 | | } |
| 510 | | const temp_end = w.end -| preserve_len; |
| 511 | | const preserved = w.buffer[temp_end..w.end]; |
| 512 | | w.end = temp_end; |
| 513 | | defer w.end += preserved.len; |
| 514 | | const n = try w.vtable.drain(w, &.{bytes}, 1); |
| 515 | | assert(w.end <= temp_end + preserved.len); |
| 516 | | @memmove(w.buffer[w.end..][0..preserved.len], preserved); |
| 517 | | return n; |
| 518 | | } |
| 519 | | |
| 520 | 501 | /// Calls `drain` as many times as necessary such that all of `bytes` are |
| 521 | 502 | /// transferred. |
| 522 | 503 | pub fn writeAll(w: *Writer, bytes: []const u8) Error!void { |
| ... | ... | @@ -524,18 +505,6 @@ pub fn writeAll(w: *Writer, bytes: []const u8) Error!void { |
| 524 | 505 | while (index < bytes.len) index += try w.write(bytes[index..]); |
| 525 | 506 | } |
| 526 | 507 | |
| 527 | | /// Calls `drain` as many times as necessary such that all of `bytes` are |
| 528 | | /// transferred. |
| 529 | | /// |
| 530 | | /// When draining the buffer, ensures that at least `preserve_len` bytes |
| 531 | | /// remain buffered. |
| 532 | | /// |
| 533 | | /// Asserts `buffer` capacity exceeds `preserve_len`. |
| 534 | | pub fn writeAllPreserve(w: *Writer, preserve_len: usize, bytes: []const u8) Error!void { |
| 535 | | var index: usize = 0; |
| 536 | | while (index < bytes.len) index += try w.writePreserve(preserve_len, bytes[index..]); |
| 537 | | } |
| 538 | | |
| 539 | 508 | /// Renders fmt string with args, calling `writer` with slices of bytes. |
| 540 | 509 | /// If `writer` returns an error, the error is returned from `format` and |
| 541 | 510 | /// `writer` is not called again. |