1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
use std::mem;

pub use self::H5Z_EDC_t::*;
pub use self::H5Z_SO_scale_type_t::*;
pub use self::H5Z_cb_return_t::*;

use crate::internal_prelude::*;

pub type H5Z_filter_t = c_int;

pub const H5Z_FILTER_ERROR: H5Z_filter_t = -1;
pub const H5Z_FILTER_NONE: H5Z_filter_t = 0;
pub const H5Z_FILTER_DEFLATE: H5Z_filter_t = 1;
pub const H5Z_FILTER_SHUFFLE: H5Z_filter_t = 2;
pub const H5Z_FILTER_FLETCHER32: H5Z_filter_t = 3;
pub const H5Z_FILTER_SZIP: H5Z_filter_t = 4;
pub const H5Z_FILTER_NBIT: H5Z_filter_t = 5;
pub const H5Z_FILTER_SCALEOFFSET: H5Z_filter_t = 6;
pub const H5Z_FILTER_RESERVED: H5Z_filter_t = 256;

pub const H5Z_FILTER_MAX: H5Z_filter_t = 65535;

pub const H5Z_FILTER_ALL: H5Z_filter_t = 0;

pub const H5Z_MAX_NFILTERS: c_uint = 32;

pub const H5Z_FLAG_DEFMASK: c_uint = 0x00ff;
pub const H5Z_FLAG_MANDATORY: c_uint = 0x0000;
pub const H5Z_FLAG_OPTIONAL: c_uint = 0x0001;

pub const H5Z_FLAG_INVMASK: c_uint = 0xff00;
pub const H5Z_FLAG_REVERSE: c_uint = 0x0100;
pub const H5Z_FLAG_SKIP_EDC: c_uint = 0x0200;

pub const H5_SZIP_ALLOW_K13_OPTION_MASK: c_uint = 1;
pub const H5_SZIP_CHIP_OPTION_MASK: c_uint = 2;
pub const H5_SZIP_EC_OPTION_MASK: c_uint = 4;
pub const H5_SZIP_NN_OPTION_MASK: c_uint = 32;
pub const H5_SZIP_MAX_PIXELS_PER_BLOCK: c_uint = 32;

pub const H5Z_SHUFFLE_USER_NPARMS: c_uint = 0;
pub const H5Z_SHUFFLE_TOTAL_NPARMS: c_uint = 1;

pub const H5Z_SZIP_USER_NPARMS: c_uint = 2;
pub const H5Z_SZIP_TOTAL_NPARMS: c_uint = 4;
pub const H5Z_SZIP_PARM_MASK: c_uint = 0;
pub const H5Z_SZIP_PARM_PPB: c_uint = 1;
pub const H5Z_SZIP_PARM_BPP: c_uint = 2;
pub const H5Z_SZIP_PARM_PPS: c_uint = 3;

pub const H5Z_NBIT_USER_NPARMS: c_uint = 0;

pub const H5Z_SCALEOFFSET_USER_NPARMS: c_uint = 2;

pub const H5Z_SO_INT_MINBITS_DEFAULT: c_uint = 0;

pub const H5Z_CLASS_T_VERS: c_uint = 1;

pub const H5Z_FILTER_CONFIG_ENCODE_ENABLED: c_uint = 0x0001;
pub const H5Z_FILTER_CONFIG_DECODE_ENABLED: c_uint = 0x0002;

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5Z_SO_scale_type_t {
    H5Z_SO_FLOAT_DSCALE = 0,
    H5Z_SO_FLOAT_ESCALE = 1,
    H5Z_SO_INT = 2,
}

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5Z_EDC_t {
    H5Z_ERROR_EDC = -1,
    H5Z_DISABLE_EDC = 0,
    H5Z_ENABLE_EDC = 1,
    H5Z_NO_EDC = 2,
}

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5Z_cb_return_t {
    H5Z_CB_ERROR = -1,
    H5Z_CB_FAIL = 0,
    H5Z_CB_CONT = 1,
    H5Z_CB_NO = 2,
}

pub type H5Z_filter_func_t = Option<
    extern "C" fn(
        filter: H5Z_filter_t,
        buf: *mut c_void,
        buf_size: size_t,
        op_data: *mut c_void,
    ) -> H5Z_cb_return_t,
>;

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct H5Z_cb_t {
    pub func: H5Z_filter_func_t,
    pub op_data: *mut c_void,
}

impl Default for H5Z_cb_t {
    fn default() -> Self {
        unsafe { mem::zeroed() }
    }
}

pub type H5Z_can_apply_func_t =
    Option<extern "C" fn(dcpl_id: hid_t, type_id: hid_t, space_id: hid_t) -> htri_t>;
pub type H5Z_set_local_func_t =
    Option<extern "C" fn(dcpl_id: hid_t, type_id: hid_t, space_id: hid_t) -> herr_t>;
pub type H5Z_func_t = Option<
    extern "C" fn(
        flags: c_uint,
        cd_nelmts: size_t,
        cd_values: *const c_uint,
        nbytes: size_t,
        buf_size: *mut size_t,
        buf: *mut *mut c_void,
    ) -> size_t,
>;

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct H5Z_class2_t {
    pub version: c_int,
    pub id: H5Z_filter_t,
    pub encoder_present: c_uint,
    pub decoder_present: c_uint,
    pub name: *const c_char,
    pub can_apply: H5Z_can_apply_func_t,
    pub set_local: H5Z_set_local_func_t,
    pub filter: H5Z_func_t,
}

impl Default for H5Z_class2_t {
    fn default() -> Self {
        unsafe { mem::zeroed() }
    }
}

extern "C" {
    pub fn H5Zregister(cls: *const c_void) -> herr_t;
    pub fn H5Zunregister(id: H5Z_filter_t) -> herr_t;
    pub fn H5Zfilter_avail(id: H5Z_filter_t) -> htri_t;
    pub fn H5Zget_filter_info(filter: H5Z_filter_t, filter_config_flags: *mut c_uint) -> herr_t;
}