use std::os::raw::c_uint;
use hdf5_sys::h5p::{H5P_CRT_ORDER_INDEXED, H5P_CRT_ORDER_TRACKED};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct AttrPhaseChange {
pub max_compact: u32,
pub min_dense: u32,
}
impl Default for AttrPhaseChange {
fn default() -> Self {
Self { max_compact: 8, min_dense: 6 }
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum AttrCreationOrder {
#[default]
Untracked,
Tracked,
Indexed,
}
impl AttrCreationOrder {
pub(crate) fn from_flags(flags: c_uint) -> Self {
if flags & H5P_CRT_ORDER_INDEXED != 0 {
Self::Indexed
} else if flags & H5P_CRT_ORDER_TRACKED != 0 {
Self::Tracked
} else {
Self::Untracked
}
}
}
impl From<AttrCreationOrder> for c_uint {
fn from(v: AttrCreationOrder) -> Self {
match v {
AttrCreationOrder::Untracked => 0,
AttrCreationOrder::Tracked => H5P_CRT_ORDER_TRACKED,
AttrCreationOrder::Indexed => H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum LinkCreationOrder {
#[default]
Untracked,
Tracked,
Indexed,
}
impl LinkCreationOrder {
pub(crate) fn from_flags(flags: c_uint) -> Self {
if flags & H5P_CRT_ORDER_INDEXED != 0 {
Self::Indexed
} else if flags & H5P_CRT_ORDER_TRACKED != 0 {
Self::Tracked
} else {
Self::Untracked
}
}
}
impl From<LinkCreationOrder> for c_uint {
fn from(v: LinkCreationOrder) -> Self {
match v {
LinkCreationOrder::Untracked => 0,
LinkCreationOrder::Tracked => H5P_CRT_ORDER_TRACKED,
LinkCreationOrder::Indexed => H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED,
}
}
}