From 1a80db37d5c74b16f9d79653f14e8608c932633b Mon Sep 17 00:00:00 2001 From: Truman Kilen Date: Tue, 21 Jan 2025 13:09:38 -0600 Subject: [PATCH] Avoid unnecessary allocation --- oodle_loader/src/lib.rs | 26 +++++++------------------- repak/src/data.rs | 16 +++++----------- 2 files changed, 12 insertions(+), 30 deletions(-) diff --git a/oodle_loader/src/lib.rs b/oodle_loader/src/lib.rs index 62662f0..e5c87f1 100644 --- a/oodle_loader/src/lib.rs +++ b/oodle_loader/src/lib.rs @@ -1,7 +1,4 @@ -use std::{ - io::{Read, Write}, - sync::OnceLock, -}; +use std::{io::Read, sync::OnceLock}; type Result = std::result::Result; @@ -192,13 +189,12 @@ pub struct Oodle { get_compressed_buffer_size_needed: oodle_lz::GetCompressedBufferSizeNeeded, } impl Oodle { - pub fn compress( + pub fn compress( &self, input: &[u8], - mut output: S, compressor: Compressor, compression_level: CompressionLevel, - ) -> Result { + ) -> Result> { 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())); diff --git a/repak/src/data.rs b/repak/src/data.rs index 2705027..cb71aac 100644 --- a/repak/src/data.rs +++ b/repak/src/data.rs @@ -209,17 +209,11 @@ fn compress(compression: Compression, data: &[u8]) -> Result> { return Err(super::Error::Oodle); #[cfg(feature = "oodle")] { - let mut output = vec![]; - oodle_loader::oodle() - .unwrap() - .compress( - data.as_ref(), - &mut output, - oodle_loader::Compressor::Mermaid, - oodle_loader::CompressionLevel::Normal, - ) - .unwrap(); - output + oodle_loader::oodle().unwrap().compress( + data.as_ref(), + oodle_loader::Compressor::Mermaid, + oodle_loader::CompressionLevel::Normal, + )? } } };