@@ -43,11 +43,18 @@ extern crate std;
43
43
44
44
use libc:: { c_char, c_void} ;
45
45
use std:: path:: Path ;
46
- use hdf5_sys as ffi;
46
+ // use hdf5_sys as ffi;
47
+ use hdf5_sys:: h5d;
48
+ use hdf5_sys:: h5t;
49
+ use hdf5_sys:: h5p;
50
+ use hdf5_sys:: h5f;
51
+ use hdf5_sys:: h5e;
52
+ use hdf5_sys:: h5s;
53
+ use hdf5_sys:: h5i;
47
54
48
55
use tensor:: Tensor ;
49
56
50
- extern fn error_handler ( _: ffi :: hid_t , _: * const c_void ) {
57
+ extern fn error_handler ( _: h5i :: hid_t , _: * const c_void ) {
51
58
// Suppress errors. We will rely on return statuses alone.
52
59
}
53
60
@@ -71,30 +78,30 @@ macro_rules! add_save {
71
78
let group = "data" ;
72
79
73
80
unsafe {
74
- let filename_cstr = try! ( :: std:: ffi:: CString :: new( filename) ) ;
75
- let group_cstr = try! ( :: std:: ffi:: CString :: new( group) ) ;
81
+ let filename_cstr = :: std:: ffi:: CString :: new( filename) ? ;
82
+ let group_cstr = :: std:: ffi:: CString :: new( group) ? ;
76
83
77
- //ffi ::H5Eset_auto2(0, error_handler, 0 as *const c_void);
84
+ //h5e ::H5Eset_auto2(0, error_handler, 0 as *const c_void);
78
85
79
- let file = ffi :: H5Fcreate ( filename_cstr. as_ptr( ) as * const c_char,
80
- ffi :: H5F_ACC_TRUNC , ffi :: H5P_DEFAULT , ffi :: H5P_DEFAULT ) ;
86
+ let file = h5f :: H5Fcreate ( filename_cstr. as_ptr( ) as * const c_char,
87
+ h5f :: H5F_ACC_TRUNC , h5p :: H5P_DEFAULT , h5p :: H5P_DEFAULT ) ;
81
88
82
89
let mut shape: Vec <u64 > = Vec :: new( ) ;
83
90
for s in self . shape( ) . iter( ) {
84
91
shape. push( * s as u64 ) ;
85
92
}
86
93
87
- let space = ffi :: H5Screate_simple ( shape. len( ) as i32 , shape. as_ptr( ) ,
94
+ let space = h5s :: H5Screate_simple ( shape. len( ) as i32 , shape. as_ptr( ) ,
88
95
std:: ptr:: null( ) ) ;
89
96
90
- let dset = ffi :: H5Dcreate2 ( file, group_cstr. as_ptr( ) as * const c_char,
97
+ let dset = h5d :: H5Dcreate2 ( file, group_cstr. as_ptr( ) as * const c_char,
91
98
$h5type, space,
92
- ffi :: H5P_DEFAULT ,
93
- ffi :: H5P_DEFAULT ,
94
- ffi :: H5P_DEFAULT ) ;
99
+ h5p :: H5P_DEFAULT ,
100
+ h5p :: H5P_DEFAULT ,
101
+ h5p :: H5P_DEFAULT ) ;
95
102
96
- let status = ffi :: H5Dwrite ( dset, $h5type, ffi :: H5S_ALL , ffi :: H5S_ALL ,
97
- ffi :: H5P_DEFAULT , self . as_ptr( ) as * const c_void) ;
103
+ let status = h5d :: H5Dwrite ( dset, $h5type, h5s :: H5S_ALL , h5s :: H5S_ALL ,
104
+ h5p :: H5P_DEFAULT , self . as_ptr( ) as * const c_void) ;
98
105
99
106
if status < 0 {
100
107
let msg = format!( "Failed to write '{}': {:?}" , group, path) ;
@@ -103,25 +110,25 @@ macro_rules! add_save {
103
110
}
104
111
105
112
106
- ffi :: H5Dclose ( dset) ;
107
- ffi :: H5Fclose ( file) ;
113
+ h5d :: H5Dclose ( dset) ;
114
+ h5f :: H5Fclose ( file) ;
108
115
}
109
116
Ok ( ( ) )
110
117
}
111
118
}
112
119
)
113
120
}
114
121
115
- add_save ! ( u8 , ffi :: H5T_NATIVE_UINT8 ) ;
116
- add_save ! ( u16 , ffi :: H5T_NATIVE_UINT16 ) ;
117
- add_save ! ( u32 , ffi :: H5T_NATIVE_UINT32 ) ;
118
- add_save ! ( u64 , ffi :: H5T_NATIVE_UINT64 ) ;
119
- add_save ! ( i8 , ffi :: H5T_NATIVE_INT8 ) ;
120
- add_save ! ( i16 , ffi :: H5T_NATIVE_INT16 ) ;
121
- add_save ! ( i32 , ffi :: H5T_NATIVE_INT32 ) ;
122
- add_save ! ( i64 , ffi :: H5T_NATIVE_INT64 ) ;
123
- add_save ! ( f32 , ffi :: H5T_NATIVE_FLOAT ) ;
124
- add_save ! ( f64 , ffi :: H5T_NATIVE_DOUBLE ) ;
122
+ add_save ! ( u8 , h5t :: H5T_NATIVE_UINT8 ) ;
123
+ add_save ! ( u16 , h5t :: H5T_NATIVE_UINT16 ) ;
124
+ add_save ! ( u32 , h5t :: H5T_NATIVE_UINT32 ) ;
125
+ add_save ! ( u64 , h5t :: H5T_NATIVE_UINT64 ) ;
126
+ add_save ! ( i8 , h5t :: H5T_NATIVE_INT8 ) ;
127
+ add_save ! ( i16 , h5t :: H5T_NATIVE_INT16 ) ;
128
+ add_save ! ( i32 , h5t :: H5T_NATIVE_INT32 ) ;
129
+ add_save ! ( i64 , h5t :: H5T_NATIVE_INT64 ) ;
130
+ add_save ! ( f32 , h5t :: H5T_NATIVE_FLOAT ) ;
131
+ add_save ! ( f64 , h5t :: H5T_NATIVE_DOUBLE ) ;
125
132
126
133
127
134
macro_rules! add_load {
@@ -137,38 +144,38 @@ macro_rules! add_load {
137
144
} ,
138
145
} ;
139
146
unsafe {
140
- let filename_cstr = try! ( :: std:: ffi:: CString :: new( filename) ) ;
141
- let group_cstr = try! ( :: std:: ffi:: CString :: new( group) ) ;
147
+ let filename_cstr = :: std:: ffi:: CString :: new( filename) ? ;
148
+ let group_cstr = :: std:: ffi:: CString :: new( group) ? ;
142
149
143
- ffi :: H5Eset_auto2 ( 0 , error_handler, 0 as * const c_void) ;
150
+ h5e :: H5Eset_auto2 ( 0 , error_handler, 0 as * const c_void) ;
144
151
145
- let file = ffi :: H5Fopen ( filename_cstr. as_ptr( ) as * const c_char,
146
- ffi :: H5F_ACC_RDONLY , ffi :: H5P_DEFAULT ) ;
152
+ let file = h5f :: H5Fopen ( filename_cstr. as_ptr( ) as * const c_char,
153
+ h5f :: H5F_ACC_RDONLY , h5p :: H5P_DEFAULT ) ;
147
154
148
155
if file < 0 {
149
156
let msg = format!( "File not found: {:?}" , path) ;
150
157
let err = std:: io:: Error :: new( std:: io:: ErrorKind :: NotFound , msg) ;
151
158
return Err ( err) ;
152
159
}
153
160
154
- let dset = ffi :: H5Dopen2 ( file, group_cstr. as_ptr( ) as * const c_char,
155
- ffi :: H5P_DEFAULT ) ;
161
+ let dset = h5d :: H5Dopen2 ( file, group_cstr. as_ptr( ) as * const c_char,
162
+ h5p :: H5P_DEFAULT ) ;
156
163
157
164
if dset < 0 {
158
165
let msg = format!( "Group '{}' not found: {}" , group, filename) ;
159
166
let err = std:: io:: Error :: new( std:: io:: ErrorKind :: NotFound , msg) ;
160
167
return Err ( err) ;
161
168
}
162
169
163
- let datatype = ffi :: H5Dget_type ( dset) ;
170
+ let datatype = h5d :: H5Dget_type ( dset) ;
164
171
165
- let space = ffi :: H5Dget_space ( dset) ;
166
- let ndims = ffi :: H5Sget_simple_extent_ndims ( space) ;
172
+ let space = h5d :: H5Dget_space ( dset) ;
173
+ let ndims = h5s :: H5Sget_simple_extent_ndims ( space) ;
167
174
168
- let mut shape: Tensor <ffi :: hsize_t> = Tensor :: zeros( & [ ndims as usize ] ) ;
175
+ let mut shape: Tensor <h5d :: hsize_t> = Tensor :: zeros( & [ ndims as usize ] ) ;
169
176
170
- if ffi :: H5Sget_simple_extent_dims ( space, shape. as_mut_ptr( ) ,
171
- 0 as * mut ffi :: hsize_t) != ndims {
177
+ if h5s :: H5Sget_simple_extent_dims ( space, shape. as_mut_ptr( ) ,
178
+ 0 as * mut h5d :: hsize_t) != ndims {
172
179
let msg = format!( "Could not read shape of tesor: {}" , filename) ;
173
180
let err = std:: io:: Error :: new( std:: io:: ErrorKind :: InvalidData , msg) ;
174
181
return Err ( err) ;
@@ -179,65 +186,65 @@ macro_rules! add_load {
179
186
let unsigned_shape = & unsigned_tensor. data( ) ;
180
187
181
188
let data: Tensor <$t> = {
182
- if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_UINT8 ) == 1 {
189
+ if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_UINT8 ) == 1 {
183
190
let mut native_data: Tensor <u8 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
184
191
// Finally load the actual data
185
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_UINT8 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
186
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
192
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_UINT8 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
193
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
187
194
native_data. convert:: <$t>( )
188
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_INT8 ) == 1 {
195
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_INT8 ) == 1 {
189
196
let mut native_data: Tensor <i8 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
190
197
// Finally load the actual data
191
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_INT8 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
192
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
198
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_INT8 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
199
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
193
200
native_data. convert:: <$t>( )
194
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_UINT16 ) == 1 {
201
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_UINT16 ) == 1 {
195
202
let mut native_data: Tensor <u16 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
196
203
// Finally load the actual data
197
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_UINT16 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
198
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
204
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_UINT16 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
205
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
199
206
native_data. convert:: <$t>( )
200
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_INT16 ) == 1 {
207
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_INT16 ) == 1 {
201
208
let mut native_data: Tensor <i16 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
202
209
// Finally load the actual data
203
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_INT16 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
204
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
210
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_INT16 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
211
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
205
212
native_data. convert:: <$t>( )
206
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_UINT32 ) == 1 {
213
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_UINT32 ) == 1 {
207
214
let mut native_data: Tensor <u32 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
208
215
// Finally load the actual data
209
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_UINT32 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
210
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
216
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_UINT32 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
217
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
211
218
native_data. convert:: <$t>( )
212
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_INT32 ) == 1 {
219
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_INT32 ) == 1 {
213
220
let mut native_data: Tensor <i32 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
214
221
// Finally load the actual data
215
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_INT32 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
216
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
222
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_INT32 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
223
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
217
224
native_data. convert:: <$t>( )
218
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_UINT64 ) == 1 {
225
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_UINT64 ) == 1 {
219
226
let mut native_data: Tensor <u64 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
220
227
// Finally load the actual data
221
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_UINT64 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
222
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
228
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_UINT64 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
229
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
223
230
native_data. convert:: <$t>( )
224
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_INT64 ) == 1 {
231
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_INT64 ) == 1 {
225
232
let mut native_data: Tensor <i64 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
226
233
// Finally load the actual data
227
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_INT64 , ffi :: H5S_ALL , ffi :: H5S_ALL ,
228
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
234
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_INT64 , h5s :: H5S_ALL , h5s :: H5S_ALL ,
235
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
229
236
native_data. convert:: <$t>( )
230
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_FLOAT ) == 1 {
237
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_FLOAT ) == 1 {
231
238
let mut native_data: Tensor <f32 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
232
239
// Finally load the actual data
233
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_FLOAT , ffi :: H5S_ALL , ffi :: H5S_ALL ,
234
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
240
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_FLOAT , h5s :: H5S_ALL , h5s :: H5S_ALL ,
241
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
235
242
native_data. convert:: <$t>( )
236
- } else if ffi :: H5Tequal ( datatype, ffi :: H5T_NATIVE_DOUBLE ) == 1 {
243
+ } else if h5t :: H5Tequal ( datatype, h5t :: H5T_NATIVE_DOUBLE ) == 1 {
237
244
let mut native_data: Tensor <f64 > = Tensor :: empty( & unsigned_shape[ ..] ) ;
238
245
// Finally load the actual data
239
- ffi :: H5Dread ( dset, ffi :: H5T_NATIVE_DOUBLE , ffi :: H5S_ALL , ffi :: H5S_ALL ,
240
- ffi :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
246
+ h5d :: H5Dread ( dset, h5t :: H5T_NATIVE_DOUBLE , h5s :: H5S_ALL , h5s :: H5S_ALL ,
247
+ h5p :: H5P_DEFAULT , native_data. as_mut_ptr( ) as * mut c_void) ;
241
248
native_data. convert:: <$t>( )
242
249
} else {
243
250
let msg = format!( "Unable to convert '{}' to {}: {}" ,
@@ -247,9 +254,9 @@ macro_rules! add_load {
247
254
}
248
255
} ;
249
256
250
- ffi :: H5Tclose ( datatype) ;
251
- ffi :: H5Dclose ( dset) ;
252
- ffi :: H5Fclose ( file) ;
257
+ h5t :: H5Tclose ( datatype) ;
258
+ h5d :: H5Dclose ( dset) ;
259
+ h5f :: H5Fclose ( file) ;
253
260
254
261
Ok ( data)
255
262
}
0 commit comments