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::{
|
use std::{io::Read, sync::OnceLock};
|
||||||
io::{Read, Write},
|
|
||||||
sync::OnceLock,
|
|
||||||
};
|
|
||||||
|
|
||||||
type Result<T, E = Error> = std::result::Result<T, E>;
|
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,
|
get_compressed_buffer_size_needed: oodle_lz::GetCompressedBufferSizeNeeded,
|
||||||
}
|
}
|
||||||
impl Oodle {
|
impl Oodle {
|
||||||
pub fn compress<S: Write>(
|
pub fn compress(
|
||||||
&self,
|
&self,
|
||||||
input: &[u8],
|
input: &[u8],
|
||||||
mut output: S,
|
|
||||||
compressor: Compressor,
|
compressor: Compressor,
|
||||||
compression_level: CompressionLevel,
|
compression_level: CompressionLevel,
|
||||||
) -> Result<usize> {
|
) -> Result<Vec<u8>> {
|
||||||
unsafe {
|
unsafe {
|
||||||
let buffer_size = self.get_compressed_buffer_size_needed(compressor, input.len());
|
let buffer_size = self.get_compressed_buffer_size_needed(compressor, input.len());
|
||||||
let mut buffer = vec![0; buffer_size];
|
let mut buffer = vec![0; buffer_size];
|
||||||
|
@ -219,11 +215,9 @@ impl Oodle {
|
||||||
if len == -1 {
|
if len == -1 {
|
||||||
return Err(Error::CompressionFailed);
|
return Err(Error::CompressionFailed);
|
||||||
}
|
}
|
||||||
let len = len as usize;
|
buffer.truncate(len as usize);
|
||||||
|
|
||||||
output.write_all(&buffer[..len])?;
|
Ok(buffer)
|
||||||
|
|
||||||
Ok(len)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn decompress(&self, input: &[u8], output: &mut [u8]) -> isize {
|
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
|
call compress on each of them, which decreases compression ratio but makes for trivial parallel
|
||||||
compression and decompression.";
|
compression and decompression.";
|
||||||
|
|
||||||
let mut buffer = vec![];
|
let buffer = oodle
|
||||||
oodle
|
.compress(data, Compressor::Mermaid, CompressionLevel::Optimal5)
|
||||||
.compress(
|
|
||||||
data,
|
|
||||||
&mut buffer,
|
|
||||||
Compressor::Mermaid,
|
|
||||||
CompressionLevel::Optimal5,
|
|
||||||
)
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
dbg!((data.len(), buffer.len()));
|
dbg!((data.len(), buffer.len()));
|
||||||
|
|
|
@ -209,17 +209,11 @@ fn compress(compression: Compression, data: &[u8]) -> Result<Vec<u8>> {
|
||||||
return Err(super::Error::Oodle);
|
return Err(super::Error::Oodle);
|
||||||
#[cfg(feature = "oodle")]
|
#[cfg(feature = "oodle")]
|
||||||
{
|
{
|
||||||
let mut output = vec![];
|
oodle_loader::oodle().unwrap().compress(
|
||||||
oodle_loader::oodle()
|
data.as_ref(),
|
||||||
.unwrap()
|
oodle_loader::Compressor::Mermaid,
|
||||||
.compress(
|
oodle_loader::CompressionLevel::Normal,
|
||||||
data.as_ref(),
|
)?
|
||||||
&mut output,
|
|
||||||
oodle_loader::Compressor::Mermaid,
|
|
||||||
oodle_loader::CompressionLevel::Normal,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
output
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue