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