@@ -4,12 +4,12 @@ use std::fmt::{self, Debug, Display};
44use std:: ops:: Deref ;
55
66use 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} ;
1414use 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+
122156impl 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