9 个版本
0.1.8 | 2023 年 12 月 17 日 |
---|---|
0.1.7 | 2023 年 5 月 10 日 |
0.1.6 | 2022 年 7 月 19 日 |
0.1.5 | 2021 年 9 月 17 日 |
0.1.3 | 2020 年 6 月 19 日 |
在 压缩 类别中排名第 237
47KB
1.5K SLoC
fpzip-sys
对 FPZIP (https://github.com/LLNL/fpzip) 的原始 Rust 绑定。
一个用于 1D f32 向量的压缩函数示例
use fpzip_sys::*;
// ...
fn fpzip_compress(src: &Vec<f32>, high_quality: bool) -> Option<Vec<u8>> {
let prec = if high_quality {
24
} else {
16
};
/* allocate buffer for compressed data */
let bufsize = 1024 + src.len() * std::mem::size_of::<f32>();
let mut buffer: Vec<u8> = vec![0; bufsize];
/* compress to memory */
let fpz = unsafe {
fpzip_write_to_buffer(buffer.as_mut_ptr() as *mut std::ffi::c_void, bufsize as u64)
};
unsafe {
(*fpz).type_ = FPZIP_TYPE_FLOAT as i32;
(*fpz).prec = prec;
(*fpz).nx = src.len() as i32;
(*fpz).ny = 1;
(*fpz).nz = 1;
(*fpz).nf = 1;
}
let stat = unsafe { fpzip_write_header(fpz) };
if stat == 0 {
unsafe { fpzip_write_close(fpz) };
return None;
};
let outbytes = unsafe { fpzip_write(fpz, src.as_ptr() as *const std::ffi::c_void) };
unsafe { fpzip_write_close(fpz) };
if outbytes == 0 {
return None;
};
println!("[fpzip::compress] {} reduced to {} bytes.", src.len() * std::mem::size_of::<f32>(), outbytes);
return Some(buffer[0..outbytes as usize].to_vec());
}
无运行时依赖
~0–2MB
~41K SLoC