struct VTable [src]
Fields
stream: *const fn (r: *Reader, w: *Writer, limit: Limit) StreamError!usizeWrites bytes from the internally tracked logical position to w.
Returns the number of bytes written, which will be at minimum 0 and
at most limit. The number returned, including zero, does not indicate
end of stream.
The reader's internal logical seek position moves forward in accordance
with the number of bytes returned from this function.
Implementations are encouraged to utilize mandatory minimum buffer
sizes combined with short reads (returning a value less than limit)
in order to minimize complexity.
Although this function is usually called when buffer is empty, it is
also called when it needs to be filled more due to the API user
requesting contiguous memory. In either case, the existing buffer data
should be ignored; new data written to w.
In addition to, or instead of writing to w, the implementation may
choose to store data in buffer, modifying seek and end
accordingly. Implementations are encouraged to take advantage of
this if it simplifies the logic.
discard: *const fn (r: *Reader, limit: Limit) Error!usize = defaultDiscardConsumes bytes from the internally tracked stream position without
providing access to them.
Returns the number of bytes discarded, which will be at minimum 0 and
at most limit. The number of bytes returned, including zero, does not
indicate end of stream.
The reader's internal logical seek position moves forward in accordance
with the number of bytes returned from this function.
Implementations are encouraged to utilize mandatory minimum buffer
sizes combined with short reads (returning a value less than limit)
in order to minimize complexity.
The default implementation is is based on calling stream, borrowing
buffer to construct a temporary Writer and ignoring the written
data.
This function is only called when buffer is empty.
readVec: *const fn (r: *Reader, data: [][]u8) Error!usize = defaultReadVecReturns number of bytes written to data.
data must have nonzero length. data[0] may have zero length, in
which case the implementation must write to Reader.buffer.
data may not contain an alias to Reader.buffer.
data is mutable because the implementation may temporarily modify the
fields in order to handle partial reads. Implementations must restore
the original value before returning.
Implementations may ignore data, writing directly to Reader.buffer,
modifying seek and end accordingly, and returning 0 from this
function. Implementations are encouraged to take advantage of this if
it simplifies the logic.
The default implementation calls stream with either data[0] or
Reader.buffer, whichever is bigger.
rebase: *const fn (r: *Reader, capacity: usize) RebaseError!void = defaultRebaseEnsures capacity data can be buffered without rebasing.
Asserts capacity is within buffer capacity, or that the stream ends
within capacity bytes.
Only called when capacity cannot be satisfied by unused capacity of
buffer.
The default implementation moves buffered data to the start of
buffer, setting seek to zero, and cannot fail.
Source
pub const VTable = struct {
/// Writes bytes from the internally tracked logical position to `w`.
///
/// Returns the number of bytes written, which will be at minimum `0` and
/// at most `limit`. The number returned, including zero, does not indicate
/// end of stream.
///
/// The reader's internal logical seek position moves forward in accordance
/// with the number of bytes returned from this function.
///
/// Implementations are encouraged to utilize mandatory minimum buffer
/// sizes combined with short reads (returning a value less than `limit`)
/// in order to minimize complexity.
///
/// Although this function is usually called when `buffer` is empty, it is
/// also called when it needs to be filled more due to the API user
/// requesting contiguous memory. In either case, the existing buffer data
/// should be ignored; new data written to `w`.
///
/// In addition to, or instead of writing to `w`, the implementation may
/// choose to store data in `buffer`, modifying `seek` and `end`
/// accordingly. Implementations are encouraged to take advantage of
/// this if it simplifies the logic.
stream: *const fn (r: *Reader, w: *Writer, limit: Limit) StreamError!usize,
/// Consumes bytes from the internally tracked stream position without
/// providing access to them.
///
/// Returns the number of bytes discarded, which will be at minimum `0` and
/// at most `limit`. The number of bytes returned, including zero, does not
/// indicate end of stream.
///
/// The reader's internal logical seek position moves forward in accordance
/// with the number of bytes returned from this function.
///
/// Implementations are encouraged to utilize mandatory minimum buffer
/// sizes combined with short reads (returning a value less than `limit`)
/// in order to minimize complexity.
///
/// The default implementation is is based on calling `stream`, borrowing
/// `buffer` to construct a temporary `Writer` and ignoring the written
/// data.
///
/// This function is only called when `buffer` is empty.
discard: *const fn (r: *Reader, limit: Limit) Error!usize = defaultDiscard,
/// Returns number of bytes written to `data`.
///
/// `data` must have nonzero length. `data[0]` may have zero length, in
/// which case the implementation must write to `Reader.buffer`.
///
/// `data` may not contain an alias to `Reader.buffer`.
///
/// `data` is mutable because the implementation may temporarily modify the
/// fields in order to handle partial reads. Implementations must restore
/// the original value before returning.
///
/// Implementations may ignore `data`, writing directly to `Reader.buffer`,
/// modifying `seek` and `end` accordingly, and returning 0 from this
/// function. Implementations are encouraged to take advantage of this if
/// it simplifies the logic.
///
/// The default implementation calls `stream` with either `data[0]` or
/// `Reader.buffer`, whichever is bigger.
readVec: *const fn (r: *Reader, data: [][]u8) Error!usize = defaultReadVec,
/// Ensures `capacity` data can be buffered without rebasing.
///
/// Asserts `capacity` is within buffer capacity, or that the stream ends
/// within `capacity` bytes.
///
/// Only called when `capacity` cannot be satisfied by unused capacity of
/// `buffer`.
///
/// The default implementation moves buffered data to the start of
/// `buffer`, setting `seek` to zero, and cannot fail.
rebase: *const fn (r: *Reader, capacity: usize) RebaseError!void = defaultRebase,
}