pub const MI_INT8: u32 = 1;
pub const MI_UINT8: u32 = 2;
pub const MI_UINT16: u32 = 4;
pub const MI_INT32: u32 = 5;
pub const MI_UINT32: u32 = 6;
pub const MI_DOUBLE: u32 = 9;
pub const MI_MATRIX: u32 = 14;
pub const MAT_HEADER_LEN: usize = 128;
pub const FLAG_LOGICAL: u32 = 1 << 9;
pub const FLAG_COMPLEX: u32 = 1 << 10;
#[derive(Clone, Debug)]
pub struct MatArray {
pub class: MatClass,
pub dims: Vec<usize>,
pub data: MatData,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MatClass {
Double,
Logical,
Char,
Cell,
Struct,
}
impl MatClass {
pub fn class_code(&self) -> u32 {
match self {
MatClass::Double => 6,
MatClass::Logical => 9,
MatClass::Char => 4,
MatClass::Cell => 1,
MatClass::Struct => 2,
}
}
pub fn from_class_code(code: u32) -> Option<Self> {
match code {
6 => Some(MatClass::Double),
9 => Some(MatClass::Logical),
4 => Some(MatClass::Char),
1 => Some(MatClass::Cell),
2 => Some(MatClass::Struct),
_ => None,
}
}
}
#[derive(Clone, Debug)]
pub enum MatData {
Double {
real: Vec<f64>,
imag: Option<Vec<f64>>,
},
Logical {
data: Vec<u8>,
},
Char {
data: Vec<u16>,
},
Cell {
elements: Vec<MatArray>,
},
Struct {
field_names: Vec<String>,
field_values: Vec<MatArray>,
},
}