#[derive(Debug)]
pub struct EncodeContext<'a, Value, Unit> {
input_value: &'a Value,
input_index: usize,
output: &'a mut [Unit],
output_index: usize,
}
impl<'a, Value, Unit> EncodeContext<'a, Value, Unit> {
#[inline(always)]
#[must_use]
pub fn new(
input_value: &'a Value,
input_index: usize,
output: &'a mut [Unit],
output_index: usize,
) -> Self {
Self {
input_value,
input_index,
output,
output_index,
}
}
#[inline(always)]
#[must_use]
pub fn input_value(&self) -> &Value {
self.input_value
}
#[inline(always)]
#[must_use]
pub fn input_index(&self) -> usize {
self.input_index
}
#[inline(always)]
#[must_use]
pub fn output(&mut self) -> &mut [Unit] {
self.output
}
#[inline(always)]
#[must_use]
pub fn output_index(&self) -> usize {
self.output_index
}
#[inline(always)]
#[must_use]
pub fn available_output(&self) -> usize {
self.output.len().saturating_sub(self.output_index)
}
#[inline(always)]
#[must_use]
pub fn into_parts(self) -> (&'a Value, usize, &'a mut [Unit], usize) {
(
self.input_value,
self.input_index,
self.output,
self.output_index,
)
}
}