use crate::arena::Arena;
use crate::error::{Progress, Result};
use crate::params::Params;
use crate::stream::{Carryless, Finish, SevenZStatus, StreamDecoder, StreamEncoder};
pub struct CarrylessDecoder {
inner: StreamDecoder<Carryless>,
}
impl CarrylessDecoder {
pub fn new(params: Params, unpacked: Option<u64>) -> Result<Self> {
Self::with_arena(params, unpacked, Arena::empty())
}
pub fn with_arena(params: Params, unpacked: Option<u64>, arena: Arena) -> Result<Self> {
Ok(Self {
inner: StreamDecoder::with_arena(params, unpacked, arena)?,
})
}
pub fn reset(&mut self, params: Params, unpacked: Option<u64>) -> Result<()> {
self.inner.reset(params, unpacked)
}
pub fn set_finish_stream(&mut self, on: bool) {
self.inner.set_finish_stream(on);
}
pub fn decode(
&mut self,
input: &[u8],
input_is_last: bool,
out: &mut [u8],
) -> Result<Progress<SevenZStatus>> {
self.inner.decode(input, input_is_last, out)
}
pub fn total_in(&self) -> u64 {
self.inner.total_in()
}
pub fn total_out(&self) -> u64 {
self.inner.total_out()
}
pub fn memory_footprint(&self) -> u64 {
self.inner.memory_footprint()
}
pub fn into_arena(self) -> Arena {
self.inner.into_arena()
}
}
pub struct CarrylessEncoder {
inner: StreamEncoder<Carryless>,
}
impl CarrylessEncoder {
pub fn new(params: Params) -> Result<Self> {
Self::with_arena(params, Arena::empty())
}
pub fn with_arena(params: Params, arena: Arena) -> Result<Self> {
Ok(Self {
inner: StreamEncoder::with_arena(params, arena)?,
})
}
pub fn reset(&mut self, params: Params) -> Result<()> {
self.inner.reset(params)
}
pub fn encode(&mut self, input: &[u8], out: &mut [u8]) -> Result<Progress<()>> {
self.inner.encode(input, out)
}
pub fn finish(&mut self, out: &mut [u8], end_marker: bool) -> Result<Finish> {
self.inner.finish(out, end_marker)
}
pub fn pending_output(&self) -> u64 {
self.inner.pending_output()
}
pub fn total_in(&self) -> u64 {
self.inner.total_in()
}
pub fn total_out(&self) -> u64 {
self.inner.total_out()
}
pub fn memory_footprint(&self) -> u64 {
self.inner.memory_footprint()
}
pub fn into_arena(self) -> Arena {
self.inner.into_arena()
}
}