mirror of
https://github.com/xavo95/repak.git
synced 2025-02-22 15:53:45 +00:00
Avoid unnecessary allocation
This commit is contained in:
parent
a33d5ef963
commit
1a80db37d5
2 changed files with 12 additions and 30 deletions
|
@ -1,7 +1,4 @@
|
|||
use std::{
|
||||
io::{Read, Write},
|
||||
sync::OnceLock,
|
||||
};
|
||||
use std::{io::Read, sync::OnceLock};
|
||||
|
||||
type Result<T, E = Error> = std::result::Result<T, E>;
|
||||
|
||||
|
@ -192,13 +189,12 @@ pub struct Oodle {
|
|||
get_compressed_buffer_size_needed: oodle_lz::GetCompressedBufferSizeNeeded,
|
||||
}
|
||||
impl Oodle {
|
||||
pub fn compress<S: Write>(
|
||||
pub fn compress(
|
||||
&self,
|
||||
input: &[u8],
|
||||
mut output: S,
|
||||
compressor: Compressor,
|
||||
compression_level: CompressionLevel,
|
||||
) -> Result<usize> {
|
||||
) -> Result<Vec<u8>> {
|
||||
unsafe {
|
||||
let buffer_size = self.get_compressed_buffer_size_needed(compressor, input.len());
|
||||
let mut buffer = vec![0; buffer_size];
|
||||
|
@ -219,11 +215,9 @@ impl Oodle {
|
|||
if len == -1 {
|
||||
return Err(Error::CompressionFailed);
|
||||
}
|
||||
let len = len as usize;
|
||||
buffer.truncate(len as usize);
|
||||
|
||||
output.write_all(&buffer[..len])?;
|
||||
|
||||
Ok(len)
|
||||
Ok(buffer)
|
||||
}
|
||||
}
|
||||
pub fn decompress(&self, input: &[u8], output: &mut [u8]) -> isize {
|
||||
|
@ -305,14 +299,8 @@ mod test {
|
|||
call compress on each of them, which decreases compression ratio but makes for trivial parallel
|
||||
compression and decompression.";
|
||||
|
||||
let mut buffer = vec![];
|
||||
oodle
|
||||
.compress(
|
||||
data,
|
||||
&mut buffer,
|
||||
Compressor::Mermaid,
|
||||
CompressionLevel::Optimal5,
|
||||
)
|
||||
let buffer = oodle
|
||||
.compress(data, Compressor::Mermaid, CompressionLevel::Optimal5)
|
||||
.unwrap();
|
||||
|
||||
dbg!((data.len(), buffer.len()));
|
||||
|
|
|
@ -209,17 +209,11 @@ fn compress(compression: Compression, data: &[u8]) -> Result<Vec<u8>> {
|
|||
return Err(super::Error::Oodle);
|
||||
#[cfg(feature = "oodle")]
|
||||
{
|
||||
let mut output = vec![];
|
||||
oodle_loader::oodle()
|
||||
.unwrap()
|
||||
.compress(
|
||||
oodle_loader::oodle().unwrap().compress(
|
||||
data.as_ref(),
|
||||
&mut output,
|
||||
oodle_loader::Compressor::Mermaid,
|
||||
oodle_loader::CompressionLevel::Normal,
|
||||
)
|
||||
.unwrap();
|
||||
output
|
||||
)?
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue