pub use crate::stream::{Finish, SevenZStatus};
use crate::arena::Arena;
use crate::error::{Progress, Result};
use crate::params::Params;
use crate::stream::{SevenZ, StreamDecoder, StreamEncoder};
pub struct SevenZDecoder {
inner: StreamDecoder<SevenZ>,
}
impl SevenZDecoder {
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()
}
#[cfg(any(test, feature = "internals"))]
#[doc(hidden)]
pub fn arena_addr(&self) -> usize {
self.inner.arena_addr()
}
}
pub struct SevenZEncoder {
inner: StreamEncoder<SevenZ>,
}
impl SevenZEncoder {
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()
}
#[cfg(any(test, feature = "internals"))]
#[doc(hidden)]
pub fn arena_addr(&self) -> usize {
self.inner.arena_addr()
}
}