00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __HDF5_FILE_H__
00011 #define __HDF5_FILE_H__
00012
00013 #include <shogun/lib/config.h>
00014
00015 #ifdef HAVE_HDF5
00016 #include <shogun/lib/common.h>
00017 #include <shogun/lib/io.h>
00018 #include <shogun/lib/File.h>
00019 #include <shogun/base/SGObject.h>
00020 #include <hdf5.h>
00021
00022
00023 namespace shogun
00024 {
00025 template <class ST> struct T_STRING;
00026 template <class ST> struct TSparse;
00027
00034 class CHDF5File : public CFile
00035 {
00036 public:
00043 CHDF5File(char* fname, char rw='r', const char* name=NULL);
00044
00046 virtual ~CHDF5File();
00047
00055 virtual void get_bool_vector(bool*& vector, int32_t& len);
00056 virtual void get_byte_vector(uint8_t*& vector, int32_t& len);
00057 virtual void get_char_vector(char*& vector, int32_t& len);
00058 virtual void get_int_vector(int32_t*& vector, int32_t& len);
00059 virtual void get_real_vector(float64_t*& vector, int32_t& len);
00060 virtual void get_shortreal_vector(float32_t*& vector, int32_t& len);
00061 virtual void get_short_vector(int16_t*& vector, int32_t& len);
00062 virtual void get_word_vector(uint16_t*& vector, int32_t& len);
00064
00073 virtual void get_bool_matrix(
00074 bool*& matrix, int32_t& num_feat, int32_t& num_vec);
00075 virtual void get_byte_matrix(
00076 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00077 virtual void get_char_matrix(
00078 char*& matrix, int32_t& num_feat, int32_t& num_vec);
00079 virtual void get_int_matrix(
00080 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00081 virtual void get_uint_matrix(
00082 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00083 virtual void get_long_matrix(
00084 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00085 virtual void get_ulong_matrix(
00086 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00087 virtual void get_shortreal_matrix(
00088 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00089 virtual void get_real_matrix(
00090 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00091 virtual void get_longreal_matrix(
00092 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00093 virtual void get_short_matrix(
00094 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00095 virtual void get_word_matrix(
00096 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00098
00107 virtual void get_byte_ndarray(
00108 uint8_t*& array, int32_t*& dims, int32_t& num_dims);
00109 virtual void get_char_ndarray(
00110 char*& array, int32_t*& dims, int32_t& num_dims);
00111 virtual void get_int_ndarray(
00112 int32_t*& array, int32_t*& dims, int32_t& num_dims);
00113 virtual void get_shortreal_ndarray(
00114 float32_t*& array, int32_t*& dims, int32_t& num_dims);
00115 virtual void get_real_ndarray(
00116 float64_t*& array, int32_t*& dims, int32_t& num_dims);
00117 virtual void get_short_ndarray(
00118 int16_t*& array, int32_t*& dims, int32_t& num_dims);
00119 virtual void get_word_ndarray(
00120 uint16_t*& array, int32_t*& dims, int32_t& num_dims);
00122
00131 virtual void get_bool_sparsematrix(
00132 TSparse<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
00133 virtual void get_byte_sparsematrix(
00134 TSparse<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00135 virtual void get_char_sparsematrix(
00136 TSparse<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
00137 virtual void get_int_sparsematrix(
00138 TSparse<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00139 virtual void get_uint_sparsematrix(
00140 TSparse<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00141 virtual void get_long_sparsematrix(
00142 TSparse<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00143 virtual void get_ulong_sparsematrix(
00144 TSparse<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00145 virtual void get_short_sparsematrix(
00146 TSparse<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00147 virtual void get_word_sparsematrix(
00148 TSparse<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00149 virtual void get_shortreal_sparsematrix(
00150 TSparse<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00151 virtual void get_real_sparsematrix(
00152 TSparse<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00153 virtual void get_longreal_sparsematrix(
00154 TSparse<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00156
00157
00166 virtual void get_bool_string_list(
00167 T_STRING<bool>*& strings, int32_t& num_str,
00168 int32_t& max_string_len);
00169 virtual void get_byte_string_list(
00170 T_STRING<uint8_t>*& strings, int32_t& num_str,
00171 int32_t& max_string_len);
00172 virtual void get_char_string_list(
00173 T_STRING<char>*& strings, int32_t& num_str,
00174 int32_t& max_string_len);
00175 virtual void get_int_string_list(
00176 T_STRING<int32_t>*& strings, int32_t& num_str,
00177 int32_t& max_string_len);
00178 virtual void get_uint_string_list(
00179 T_STRING<uint32_t>*& strings, int32_t& num_str,
00180 int32_t& max_string_len);
00181 virtual void get_short_string_list(
00182 T_STRING<int16_t>*& strings, int32_t& num_str,
00183 int32_t& max_string_len);
00184 virtual void get_word_string_list(
00185 T_STRING<uint16_t>*& strings, int32_t& num_str,
00186 int32_t& max_string_len);
00187 virtual void get_long_string_list(
00188 T_STRING<int64_t>*& strings, int32_t& num_str,
00189 int32_t& max_string_len);
00190 virtual void get_ulong_string_list(
00191 T_STRING<uint64_t>*& strings, int32_t& num_str,
00192 int32_t& max_string_len);
00193 virtual void get_shortreal_string_list(
00194 T_STRING<float32_t>*& strings, int32_t& num_str,
00195 int32_t& max_string_len);
00196 virtual void get_real_string_list(
00197 T_STRING<float64_t>*& strings, int32_t& num_str,
00198 int32_t& max_string_len);
00199 virtual void get_longreal_string_list(
00200 T_STRING<floatmax_t>*& strings, int32_t& num_str,
00201 int32_t& max_string_len);
00203
00211 virtual void set_bool_vector(const bool* vector, int32_t len);
00212 virtual void set_byte_vector(const uint8_t* vector, int32_t len);
00213 virtual void set_char_vector(const char* vector, int32_t len);
00214 virtual void set_int_vector(const int32_t* vector, int32_t len);
00215 virtual void set_shortreal_vector( const float32_t* vector, int32_t len);
00216 virtual void set_real_vector(const float64_t* vector, int32_t len);
00217 virtual void set_short_vector(const int16_t* vector, int32_t len);
00218 virtual void set_word_vector(const uint16_t* vector, int32_t len);
00220
00221
00229 virtual void set_bool_matrix(
00230 const bool* matrix, int32_t num_feat, int32_t num_vec);
00231 virtual void set_byte_matrix(
00232 const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
00233 virtual void set_char_matrix(
00234 const char* matrix, int32_t num_feat, int32_t num_vec);
00235 virtual void set_int_matrix(
00236 const int32_t* matrix, int32_t num_feat, int32_t num_vec);
00237 virtual void set_uint_matrix(
00238 const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
00239 virtual void set_long_matrix(
00240 const int64_t* matrix, int32_t num_feat, int32_t num_vec);
00241 virtual void set_ulong_matrix(
00242 const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
00243 virtual void set_shortreal_matrix(
00244 const float32_t* matrix, int32_t num_feat, int32_t num_vec);
00245 virtual void set_real_matrix(
00246 const float64_t* matrix, int32_t num_feat, int32_t num_vec);
00247 virtual void set_longreal_matrix(
00248 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
00249 virtual void set_short_matrix(
00250 const int16_t* matrix, int32_t num_feat, int32_t num_vec);
00251 virtual void set_word_matrix(
00252 const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
00254
00262 virtual void set_bool_sparsematrix(
00263 const TSparse<bool>* matrix, int32_t num_feat, int32_t num_vec);
00264 virtual void set_byte_sparsematrix(
00265 const TSparse<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
00266 virtual void set_char_sparsematrix(
00267 const TSparse<char>* matrix, int32_t num_feat, int32_t num_vec);
00268 virtual void set_int_sparsematrix(
00269 const TSparse<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
00270 virtual void set_uint_sparsematrix(
00271 const TSparse<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
00272 virtual void set_long_sparsematrix(
00273 const TSparse<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
00274 virtual void set_ulong_sparsematrix(
00275 const TSparse<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
00276 virtual void set_short_sparsematrix(
00277 const TSparse<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
00278 virtual void set_word_sparsematrix(
00279 const TSparse<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
00280 virtual void set_shortreal_sparsematrix(
00281 const TSparse<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
00282 virtual void set_real_sparsematrix(
00283 const TSparse<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
00284 virtual void set_longreal_sparsematrix(
00285 const TSparse<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
00287
00288
00297 virtual void set_bool_string_list(
00298 const T_STRING<bool>* strings, int32_t num_str);
00299 virtual void set_byte_string_list(
00300 const T_STRING<uint8_t>* strings, int32_t num_str);
00301 virtual void set_char_string_list(
00302 const T_STRING<char>* strings, int32_t num_str);
00303 virtual void set_int_string_list(
00304 const T_STRING<int32_t>* strings, int32_t num_str);
00305 virtual void set_uint_string_list(
00306 const T_STRING<uint32_t>* strings, int32_t num_str);
00307 virtual void set_short_string_list(
00308 const T_STRING<int16_t>* strings, int32_t num_str);
00309 virtual void set_word_string_list(
00310 const T_STRING<uint16_t>* strings, int32_t num_str);
00311 virtual void set_long_string_list(
00312 const T_STRING<int64_t>* strings, int32_t num_str);
00313 virtual void set_ulong_string_list(
00314 const T_STRING<uint64_t>* strings, int32_t num_str);
00315 virtual void set_shortreal_string_list(
00316 const T_STRING<float32_t>* strings, int32_t num_str);
00317 virtual void set_real_string_list(
00318 const T_STRING<float64_t>* strings, int32_t num_str);
00319 virtual void set_longreal_string_list(
00320 const T_STRING<floatmax_t>* strings, int32_t num_str);
00322
00324 inline virtual const char* get_name() const { return "HDF5File"; }
00325
00326 protected:
00328 void get_boolean_type();
00329
00338 hid_t get_compatible_type(H5T_class_t t_class, SGDataType datatype);
00339
00347 void get_dims(hid_t dataset, int32_t*& dims, int32_t& ndims, int64_t& total_elements);
00348
00350 void create_group_hierarchy();
00351
00352 protected:
00354 hid_t h5file;
00356 hid_t boolean_type;
00357 };
00358 }
00359 #endif // HAVE_HDF5
00360 #endif //__HDF5_FILE_H__
00361