Skip to content

Commit c9ffcaa

Browse files
committed
Add ByteOrder and Datatype::byte_order()
1 parent e7a28a7 commit c9ffcaa

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

src/hl/datatype.rs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ use std::fmt::{self, Debug, Display};
44
use std::ops::Deref;
55

66
use hdf5_sys::h5t::{
7-
H5T_cdata_t, H5T_class_t, H5T_cset_t, H5T_str_t, H5Tarray_create2, H5Tcompiler_conv, H5Tcopy,
8-
H5Tcreate, H5Tenum_create, H5Tenum_insert, H5Tequal, H5Tfind, H5Tget_array_dims2,
9-
H5Tget_array_ndims, H5Tget_class, H5Tget_cset, H5Tget_member_name, H5Tget_member_offset,
10-
H5Tget_member_type, H5Tget_member_value, H5Tget_nmembers, H5Tget_sign, H5Tget_size,
11-
H5Tget_super, H5Tinsert, H5Tis_variable_str, H5Tset_cset, H5Tset_size, H5Tset_strpad,
12-
H5Tvlen_create, H5T_VARIABLE,
7+
H5T_cdata_t, H5T_class_t, H5T_cset_t, H5T_order_t, H5T_str_t, H5Tarray_create2,
8+
H5Tcompiler_conv, H5Tcopy, H5Tcreate, H5Tenum_create, H5Tenum_insert, H5Tequal, H5Tfind,
9+
H5Tget_array_dims2, H5Tget_array_ndims, H5Tget_class, H5Tget_cset, H5Tget_member_name,
10+
H5Tget_member_offset, H5Tget_member_type, H5Tget_member_value, H5Tget_nmembers, H5Tget_order,
11+
H5Tget_sign, H5Tget_size, H5Tget_super, H5Tinsert, H5Tis_variable_str, H5Tset_cset,
12+
H5Tset_size, H5Tset_strpad, H5Tvlen_create, H5T_VARIABLE,
1313
};
1414
use hdf5_types::{
1515
CompoundField, CompoundType, EnumMember, EnumType, FloatSize, H5Type, IntSize, TypeDescriptor,
@@ -119,12 +119,51 @@ impl Default for Conversion {
119119
}
120120
}
121121

122+
#[derive(Copy, Debug, Clone, PartialEq, Eq)]
123+
pub enum ByteOrder {
124+
LittleEndian,
125+
BigEndian,
126+
Vax,
127+
Mixed,
128+
None,
129+
}
130+
131+
#[cfg(hdf5_1_8_6)]
132+
impl From<H5T_order_t> for ByteOrder {
133+
fn from(order: H5T_order_t) -> Self {
134+
match order {
135+
H5T_order_t::H5T_ORDER_LE => ByteOrder::LittleEndian,
136+
H5T_order_t::H5T_ORDER_BE => ByteOrder::BigEndian,
137+
H5T_order_t::H5T_ORDER_VAX => ByteOrder::Vax,
138+
H5T_order_t::H5T_ORDER_MIXED => ByteOrder::Mixed,
139+
_ => ByteOrder::None,
140+
}
141+
}
142+
}
143+
144+
#[cfg(not(hdf5_1_8_6))]
145+
impl From<H5T_order_t> for ByteOrder {
146+
fn from(order: H5T_order_t) -> Self {
147+
match order {
148+
H5T_order_t::H5T_ORDER_LE => ByteOrder::LittleEndian,
149+
H5T_order_t::H5T_ORDER_BE => ByteOrder::BigEndian,
150+
H5T_order_t::H5T_ORDER_VAX => ByteOrder::Vax,
151+
_ => ByteOrder::None,
152+
}
153+
}
154+
}
155+
122156
impl Datatype {
123157
/// Get the total size of the datatype in bytes.
124158
pub fn size(&self) -> usize {
125159
h5call!(H5Tget_size(self.id())).unwrap_or(0) as usize
126160
}
127161

162+
/// Get the byte order of the datatype.
163+
pub fn byte_order(&self) -> ByteOrder {
164+
h5lock!(H5Tget_order(self.id())).into()
165+
}
166+
128167
pub fn conv_path<D>(&self, dst: D) -> Option<Conversion>
129168
where
130169
D: Borrow<Self>,

0 commit comments

Comments
 (0)