1
- use std:: ops:: Deref ;
2
-
1
+ //! New standard reference types introduced in v1.12.0.
2
+ //!
3
+ //! These are gated on v1.12.1 since there appear to be multiple bugs in v1.12.0.
4
+ //!
3
5
use hdf5_sys:: h5o:: H5O_type_t ;
4
6
use hdf5_sys:: h5r:: H5R_type_t :: H5R_OBJECT2 ;
5
7
use hdf5_sys:: h5r:: { H5R_ref_t , H5Rcreate_object , H5Rdestroy , H5Rget_obj_type3 , H5Ropen_object } ;
@@ -10,28 +12,37 @@ use crate::Location;
10
12
11
13
/// A reference to a HDF5 item that can be stored in attributes or datasets.
12
14
#[ repr( transparent) ]
13
- pub struct StdReference {
14
- inner : H5R_ref_t ,
15
- }
15
+ pub struct StdReference ( H5R_ref_t ) ;
16
16
17
17
impl StdReference {
18
18
fn ptr ( & self ) -> * const H5R_ref_t {
19
- std:: ptr:: addr_of!( self . inner )
19
+ std:: ptr:: addr_of!( self . 0 )
20
20
}
21
21
}
22
22
23
- #[ repr( transparent) ]
24
- #[ derive( Debug ) ]
25
- pub struct ObjectReference2 ( StdReference ) ;
23
+ //todo: could we query some actual object parameters to make this more useful?
24
+ impl std:: fmt:: Debug for StdReference {
25
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
26
+ f. write_str ( "StdReference" )
27
+ }
28
+ }
26
29
27
- impl Deref for ObjectReference2 {
28
- type Target = StdReference ;
30
+ unsafe impl H5Type for StdReference {
31
+ fn type_descriptor ( ) -> hdf5_types:: TypeDescriptor {
32
+ hdf5_types:: TypeDescriptor :: Reference ( hdf5_types:: Reference :: Std )
33
+ }
34
+ }
29
35
30
- fn deref ( & self ) -> & Self :: Target {
31
- & self . 0
36
+ impl Drop for StdReference {
37
+ fn drop ( & mut self ) {
38
+ let _e = h5call ! ( H5Rdestroy ( & mut self . 0 ) ) ;
32
39
}
33
40
}
34
41
42
+ #[ repr( transparent) ]
43
+ #[ derive( Debug ) ]
44
+ pub struct ObjectReference2 ( StdReference ) ;
45
+
35
46
impl ObjectReference for ObjectReference2 {
36
47
const REF_TYPE : hdf5_sys:: h5r:: H5R_type_t = H5R_OBJECT2 ;
37
48
@@ -41,7 +52,7 @@ impl ObjectReference for ObjectReference2 {
41
52
42
53
fn create ( location : & Location , name : & str ) -> Result < Self > {
43
54
let reference: H5R_ref_t = create_object_reference ( location, name) ?;
44
- Ok ( Self ( StdReference { inner : reference } ) )
55
+ Ok ( Self ( StdReference ( reference) ) )
45
56
}
46
57
47
58
fn get_object_type ( & self , _location : & Location ) -> Result < hdf5_sys:: h5o:: H5O_type_t > {
@@ -64,25 +75,6 @@ unsafe impl H5Type for ObjectReference2 {
64
75
}
65
76
}
66
77
67
- //todo: could we query some actual object parameters to make this more useful?
68
- impl std:: fmt:: Debug for StdReference {
69
- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
70
- f. write_str ( "StdReference" )
71
- }
72
- }
73
-
74
- unsafe impl H5Type for StdReference {
75
- fn type_descriptor ( ) -> hdf5_types:: TypeDescriptor {
76
- hdf5_types:: TypeDescriptor :: Reference ( hdf5_types:: Reference :: Std )
77
- }
78
- }
79
-
80
- impl Drop for StdReference {
81
- fn drop ( & mut self ) {
82
- let _e = h5call ! ( H5Rdestroy ( & mut self . inner) ) ;
83
- }
84
- }
85
-
86
78
fn create_object_reference ( dataset : & Location , name : & str ) -> Result < H5R_ref_t > {
87
79
let mut out: std:: mem:: MaybeUninit < H5R_ref_t > = std:: mem:: MaybeUninit :: uninit ( ) ;
88
80
let name = to_cstring ( name) ?;
0 commit comments