@@ -4,6 +4,7 @@ use std::os::raw::c_void;
44use std:: ptr;
55
66use crate :: array:: VarLenArray ;
7+ use crate :: references:: Reference ;
78use crate :: string:: { FixedAscii , FixedUnicode , VarLenAscii , VarLenUnicode } ;
89
910#[ allow( non_camel_case_types) ]
@@ -160,6 +161,7 @@ pub enum TypeDescriptor {
160161 VarLenArray ( Box < Self > ) ,
161162 VarLenAscii ,
162163 VarLenUnicode ,
164+ Reference ( Reference ) ,
163165}
164166
165167impl Display for TypeDescriptor {
@@ -186,6 +188,10 @@ impl Display for TypeDescriptor {
186188 TypeDescriptor :: VarLenArray ( ref tp) => write ! ( f, "[{}] (var len)" , tp) ,
187189 TypeDescriptor :: VarLenAscii => write ! ( f, "string (var len)" ) ,
188190 TypeDescriptor :: VarLenUnicode => write ! ( f, "unicode (var len)" ) ,
191+ TypeDescriptor :: Reference ( Reference :: Object ) => write ! ( f, "reference (object)" ) ,
192+ TypeDescriptor :: Reference ( Reference :: Region ) => write ! ( f, "reference (region)" ) ,
193+ #[ cfg( feature = "1.12.0" ) ]
194+ TypeDescriptor :: Reference ( Reference :: Std ) => write ! ( f, "reference" ) ,
189195 }
190196 }
191197}
@@ -202,6 +208,7 @@ impl TypeDescriptor {
202208 Self :: FixedAscii ( len) | Self :: FixedUnicode ( len) => len,
203209 Self :: VarLenArray ( _) => mem:: size_of :: < hvl_t > ( ) ,
204210 Self :: VarLenAscii | Self :: VarLenUnicode => mem:: size_of :: < * const u8 > ( ) ,
211+ Self :: Reference ( reftyp) => reftyp. size ( ) ,
205212 }
206213 }
207214
@@ -340,7 +347,7 @@ unsafe impl<T: H5Type, const N: usize> H5Type for [T; N] {
340347 }
341348}
342349
343- unsafe impl < T : Copy + H5Type > H5Type for VarLenArray < T > {
350+ unsafe impl < T : H5Type + Copy > H5Type for VarLenArray < T > {
344351 #[ inline]
345352 fn type_descriptor ( ) -> TypeDescriptor {
346353 TypeDescriptor :: VarLenArray ( Box :: new ( <T as H5Type >:: type_descriptor ( ) ) )
0 commit comments