#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct DecodeContext {
input_start: usize,
input_index: usize,
output_start: usize,
output_index: usize,
available: usize,
}
impl DecodeContext {
#[must_use]
#[inline(always)]
pub const fn new(
input_start: usize,
input_index: usize,
output_start: usize,
output_index: usize,
available: usize,
) -> Self {
assert!(
input_start <= input_index,
"decode context input index must not precede input start",
);
assert!(
output_start <= output_index,
"decode context output index must not precede output start",
);
Self {
input_start,
input_index,
output_start,
output_index,
available,
}
}
#[must_use]
#[inline(always)]
pub const fn input_start(self) -> usize {
self.input_start
}
#[must_use]
#[inline(always)]
pub const fn input_index(self) -> usize {
self.input_index
}
#[must_use]
#[inline(always)]
pub const fn output_start(self) -> usize {
self.output_start
}
#[must_use]
#[inline(always)]
pub const fn output_index(self) -> usize {
self.output_index
}
#[must_use]
#[inline(always)]
pub const fn available(self) -> usize {
self.available
}
#[must_use]
#[inline(always)]
pub const fn input_used(self) -> usize {
self.input_index - self.input_start
}
#[must_use]
#[inline(always)]
pub const fn output_written(self) -> usize {
self.output_index - self.output_start
}
}