pub struct Decoder<'a, S> { /* private fields */ }
Expand description
Decompresses data from a seekable source.
A decoder reads compressed data from a seekable source.
Implementations§
Source§impl<'a, S: Seekable> Decoder<'a, S>
impl<'a, S: Seekable> Decoder<'a, S>
Sourcepub fn new(src: S) -> Result<Self>
pub fn new(src: S) -> Result<Self>
Creates a new Decoder
with default parameters and src
as source.
This is equivalent to calling DecodeOptions::new(src).into_decoder()
.
§Errors
Fails if the decoder could not created.
Sourcepub fn with_opts(opts: DecodeOptions<'a, S>) -> Result<Self>
pub fn with_opts(opts: DecodeOptions<'a, S>) -> Result<Self>
Creates a new Decoder
with the given DecodeOptions
.
§Errors
Fails if the decoder could not be created.
Sourcepub fn decompress_with_prefix<'b: 'a>(
&mut self,
buf: &mut [u8],
prefix: Option<&'b [u8]>,
) -> Result<usize>
pub fn decompress_with_prefix<'b: 'a>( &mut self, buf: &mut [u8], prefix: Option<&'b [u8]>, ) -> Result<usize>
Decompresses data from the internal source.
Call this repetetively to fill buf
with decompressed data. Returns the number of bytes
written to buf
.
If a prefix
is passed, it will be re-applied to every frame, as tables are discarded at
end of frame. Referencing a raw content prefix has almost no cpu nor memory cost.
§Errors
If decompression fails or any parameter is invalid.
Source§impl<S: Seekable> Decoder<'_, S>
impl<S: Seekable> Decoder<'_, S>
Sourcepub fn decompress(&mut self, buf: &mut [u8]) -> Result<usize>
pub fn decompress(&mut self, buf: &mut [u8]) -> Result<usize>
Decompresses data from the internal source.
Call this repetetively to fill buf
with decompressed data. Returns the number of bytes
written to buf
.
§Errors
If decompression fails or any parameter is invalid.
Sourcepub fn reset(&mut self)
pub fn reset(&mut self)
Resets the current decompresion status.
This resets the internal decompression context as well as decompression offset and limit. The next decompression after this function will start from the beginning of the seekable source.
Sourcepub fn set_lower_frame(&mut self, index: u32) -> Result<u64>
pub fn set_lower_frame(&mut self, index: u32) -> Result<u64>
Sets the decompression offset to the beginning of the frame at index
.
This has the same effect as calling Self::set_offset
with the decompressed start
position of the frame at index
.
§Errors
When the the passed frame index is out of range.
Sourcepub fn set_upper_frame(&mut self, index: u32) -> Result<u64>
pub fn set_upper_frame(&mut self, index: u32) -> Result<u64>
Sets the limit for the decompression offset to the end of the frame at index
.
This has the same effect as calling Self::set_offset_limit
with the decompressed end
position of the frame at index
. The current decompression state will not be reset, it is
possible to change the upper frame in the middle of a decompression operation.
§Errors
When the the passed frame index is out of range.
Sourcepub fn set_offset(&mut self, offset: u64) -> Result<()>
pub fn set_offset(&mut self, offset: u64) -> Result<()>
Sets the decompression offset.
The offset is the position in the decompressed data of the seekable source from which decompression starts. If possible, the decoder will continue decompression from the current internal state.
Note: If the passed offset is not the beginning of a frame, the decoder will perform a dummy decompression from the beginning of the frame up to the offset position.
§Errors
When the passed offset is out of range.
Sourcepub fn set_offset_limit(&mut self, limit: u64) -> Result<()>
pub fn set_offset_limit(&mut self, limit: u64) -> Result<()>
Sets a limit for the decompression offset.
The limit is the position in the decompressed data of the seekable source at which decompresion stops. This does not reset the current decompression state, the limit can be changed in the middle of a decompression operation without interrupting an ongoing decompression operation. It is possible to set a limit that is lower than the applied offset. However, it will lead to any decompression operation making no progress, i.e. it will produce zero decompressed bytes.
Note: The decoder will immediately stop decompression at the specified limit. The frame checksum of the last decompressed frame will not be verified, if the limit isn’t at the end of a frame.
§Errors
When the passed limit is out of range.
Sourcepub fn read_compressed(&self) -> u64
pub fn read_compressed(&self) -> u64
Gets the total number of compressed bytes read since the last reset.
Sourcepub fn seek_table(&self) -> &SeekTable
pub fn seek_table(&self) -> &SeekTable
Gets a reference to the internal SeekTable
.
Sourcepub fn offset_limit(&self) -> u64
pub fn offset_limit(&self) -> u64
Gets the offset limit of this decoder.
Trait Implementations§
Source§impl<S: Seekable> Read for Decoder<'_, S>
impl<S: Seekable> Read for Decoder<'_, S>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read moreSource§impl<S: Seekable> Seek for Decoder<'_, S>
impl<S: Seekable> Seek for Decoder<'_, S>
Source§fn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
1.55.0 · Source§fn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Source§fn stream_len(&mut self) -> Result<u64, Error>
fn stream_len(&mut self) -> Result<u64, Error>
seek_stream_len
)Auto Trait Implementations§
impl<'a, S> Freeze for Decoder<'a, S>where
S: Freeze,
impl<'a, S> RefUnwindSafe for Decoder<'a, S>where
S: RefUnwindSafe,
impl<'a, S> Send for Decoder<'a, S>where
S: Send,
impl<'a, S> Sync for Decoder<'a, S>where
S: Sync,
impl<'a, S> Unpin for Decoder<'a, S>where
S: Unpin,
impl<'a, S> UnwindSafe for Decoder<'a, S>where
S: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Seekable for T
impl<T> Seekable for T
Source§fn set_offset(&mut self, offset: u64) -> Result<(), Error>
fn set_offset(&mut self, offset: u64) -> Result<(), Error>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error>
fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error>
buf
, returning how many bytes were read. Read more