#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
#[repr(C)]
#[derive(Clone, Copy)]
pub struct SZ3_Config {
pub N: u8,
pub dims: *mut usize,
pub num: usize,
pub errorBoundMode: u8,
pub absErrorBound: f64,
pub relErrorBound: f64,
pub l2normErrorBound: f64,
pub psnrErrorBound: f64,
pub cmprAlgo: u8,
pub lorenzo: bool,
pub lorenzo2: bool,
pub regression: bool,
pub openmp: bool,
pub dataType: u8,
pub blockSize: i32,
pub quantbinCnt: i32,
}
macro_rules! impl_sz3_type {
($mod_name:ident, $rust_ty:ty, $data_type:expr_2021, $suffix:ident) => {
pub mod $mod_name {
use super::SZ3_Config;
pub type ty = $rust_ty;
pub const DATA_TYPE_TYPE: u8 = $data_type;
unsafe extern "C" {
#[link_name = concat!("sz3_compress_size_bound_", stringify!($suffix))]
pub fn compress_size_bound(config: SZ3_Config) -> usize;
#[link_name = concat!("sz3_compress_", stringify!($suffix))]
pub fn compress(
config: SZ3_Config,
data: *const ty,
compressed_data: *mut i8,
compressed_capacity: usize,
) -> usize;
#[link_name = concat!("sz3_decompress_", stringify!($suffix))]
pub fn decompress(
compressed_data: *const i8,
compressed_len: usize,
decompressed_data: *mut ty,
);
}
}
};
}
impl_sz3_type!(impl_f32, f32, 0, f32);
impl_sz3_type!(impl_f64, f64, 1, f64);
impl_sz3_type!(impl_u8, u8, 2, u8);
impl_sz3_type!(impl_i8, i8, 3, i8);
impl_sz3_type!(impl_u16, u16, 4, u16);
impl_sz3_type!(impl_i16, i16, 5, i16);
impl_sz3_type!(impl_u32, u32, 6, u32);
impl_sz3_type!(impl_i32, i32, 7, i32);
impl_sz3_type!(impl_u64, u64, 8, u64);
impl_sz3_type!(impl_i64, i64, 9, i64);
unsafe extern "C" {
pub fn sz3_decompress_config(data: *const i8, len: usize) -> SZ3_Config;
pub fn sz3_dealloc_size_t(ptr: *mut usize);
}
#[allow(non_snake_case)]
pub mod SZ3 {
pub const ALGO_ALGO_LORENZO_REG: u32 = 0;
pub const ALGO_ALGO_INTERP_LORENZO: u32 = 1;
pub const ALGO_ALGO_INTERP: u32 = 2;
pub const ALGO_ALGO_NOPRED: u32 = 3;
pub const ALGO_ALGO_LOSSLESS: u32 = 4;
pub const ALGO_ALGO_BIOMD: u32 = 5;
pub const ALGO_ALGO_BIOMDXTC: u32 = 6;
pub const EB_EB_ABS: u32 = 0;
pub const EB_EB_REL: u32 = 1;
pub const EB_EB_PSNR: u32 = 2;
pub const EB_EB_L2NORM: u32 = 3;
pub const EB_EB_ABS_AND_REL: u32 = 4;
pub const EB_EB_ABS_OR_REL: u32 = 5;
}