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/io/SGIO.h>
00018 #include <shogun/io/File.h>
00019 #include <shogun/base/SGObject.h>
00020 #include <hdf5.h>
00021
00022
00023 namespace shogun
00024 {
00025 template <class ST> class SGString;
00026 template <class ST> class SGSparseVector;
00027
00034 #define IGNORE_IN_CLASSLIST
00035 IGNORE_IN_CLASSLIST class CHDF5File : public CFile
00036 {
00037 public:
00039 CHDF5File();
00040
00047 CHDF5File(char* fname, char rw='r', const char* name=NULL);
00048
00050 virtual ~CHDF5File();
00051
00059 virtual void get_vector(bool*& vector, int32_t& len);
00060 virtual void get_vector(int8_t*& vector, int32_t& len);
00061 virtual void get_vector(uint8_t*& vector, int32_t& len);
00062 virtual void get_vector(char*& vector, int32_t& len);
00063 virtual void get_vector(int32_t*& vector, int32_t& len);
00064 virtual void get_vector(uint32_t*& vector, int32_t& len);
00065 virtual void get_vector(float64_t*& vector, int32_t& len);
00066 virtual void get_vector(float32_t*& vector, int32_t& len);
00067 virtual void get_vector(floatmax_t*& vector, int32_t& len);
00068 virtual void get_vector(int16_t*& vector, int32_t& len);
00069 virtual void get_vector(uint16_t*& vector, int32_t& len);
00070 virtual void get_vector(int64_t*& vector, int32_t& len);
00071 virtual void get_vector(uint64_t*& vector, int32_t& len);
00073
00082 virtual void get_matrix(
00083 bool*& matrix, int32_t& num_feat, int32_t& num_vec);
00084 virtual void get_matrix(
00085 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00086 virtual void get_matrix(
00087 char*& matrix, int32_t& num_feat, int32_t& num_vec);
00088 virtual void get_matrix(
00089 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00090 virtual void get_uint_matrix(
00091 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00092 virtual void get_long_matrix(
00093 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00094 virtual void get_ulong_matrix(
00095 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00096 virtual void get_matrix(
00097 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00098 virtual void get_matrix(
00099 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00100 virtual void get_longreal_matrix(
00101 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00102 virtual void get_matrix(
00103 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00104 virtual void get_matrix(
00105 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00107
00116 virtual void get_ndarray(
00117 uint8_t*& array, int32_t*& dims, int32_t& num_dims);
00118 virtual void get_ndarray(
00119 char*& array, int32_t*& dims, int32_t& num_dims);
00120 virtual void get_ndarray(
00121 int32_t*& array, int32_t*& dims, int32_t& num_dims);
00122 virtual void get_ndarray(
00123 float32_t*& array, int32_t*& dims, int32_t& num_dims);
00124 virtual void get_ndarray(
00125 float64_t*& array, int32_t*& dims, int32_t& num_dims);
00126 virtual void get_ndarray(
00127 int16_t*& array, int32_t*& dims, int32_t& num_dims);
00128 virtual void get_ndarray(
00129 uint16_t*& array, int32_t*& dims, int32_t& num_dims);
00131
00140 virtual void get_sparse_matrix(
00141 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
00142 virtual void get_sparse_matrix(
00143 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00144 virtual void get_sparse_matrix(
00145 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
00146 virtual void get_sparse_matrix(
00147 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00148 virtual void get_uint_sparsematrix(
00149 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00150 virtual void get_long_sparsematrix(
00151 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00152 virtual void get_ulong_sparsematrix(
00153 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00154 virtual void get_sparse_matrix(
00155 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00156 virtual void get_sparse_matrix(
00157 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00158 virtual void get_sparse_matrix(
00159 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00160 virtual void get_sparse_matrix(
00161 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00162 virtual void get_longreal_sparsematrix(
00163 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00165
00166
00175 virtual void get_string_list(
00176 SGString<bool>*& strings, int32_t& num_str,
00177 int32_t& max_string_len);
00178 virtual void get_string_list(
00179 SGString<uint8_t>*& strings, int32_t& num_str,
00180 int32_t& max_string_len);
00181 virtual void get_string_list(
00182 SGString<char>*& strings, int32_t& num_str,
00183 int32_t& max_string_len);
00184 virtual void get_string_list(
00185 SGString<int32_t>*& strings, int32_t& num_str,
00186 int32_t& max_string_len);
00187 virtual void get_uint_string_list(
00188 SGString<uint32_t>*& strings, int32_t& num_str,
00189 int32_t& max_string_len);
00190 virtual void get_string_list(
00191 SGString<int16_t>*& strings, int32_t& num_str,
00192 int32_t& max_string_len);
00193 virtual void get_string_list(
00194 SGString<uint16_t>*& strings, int32_t& num_str,
00195 int32_t& max_string_len);
00196 virtual void get_long_string_list(
00197 SGString<int64_t>*& strings, int32_t& num_str,
00198 int32_t& max_string_len);
00199 virtual void get_ulong_string_list(
00200 SGString<uint64_t>*& strings, int32_t& num_str,
00201 int32_t& max_string_len);
00202 virtual void get_string_list(
00203 SGString<float32_t>*& strings, int32_t& num_str,
00204 int32_t& max_string_len);
00205 virtual void get_string_list(
00206 SGString<float64_t>*& strings, int32_t& num_str,
00207 int32_t& max_string_len);
00208 virtual void get_longreal_string_list(
00209 SGString<floatmax_t>*& strings, int32_t& num_str,
00210 int32_t& max_string_len);
00212
00220 virtual void set_vector(const bool* vector, int32_t len);
00221 virtual void set_vector(const int8_t* vector, int32_t len);
00222 virtual void set_vector(const uint8_t* vector, int32_t len);
00223 virtual void set_vector(const char* vector, int32_t len);
00224 virtual void set_vector(const int32_t* vector, int32_t len);
00225 virtual void set_vector(const uint32_t* vector, int32_t len);
00226 virtual void set_vector(const float32_t* vector, int32_t len);
00227 virtual void set_vector(const float64_t* vector, int32_t len);
00228 virtual void set_vector(const floatmax_t* vector, int32_t len);
00229 virtual void set_vector(const int16_t* vector, int32_t len);
00230 virtual void set_vector(const uint16_t* vector, int32_t len);
00231 virtual void set_vector(const int64_t* vector, int32_t len);
00232 virtual void set_vector(const uint64_t* vector, int32_t len);
00234
00235
00243 virtual void set_matrix(
00244 const bool* matrix, int32_t num_feat, int32_t num_vec);
00245 virtual void set_matrix(
00246 const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
00247 virtual void set_matrix(
00248 const char* matrix, int32_t num_feat, int32_t num_vec);
00249 virtual void set_matrix(
00250 const int32_t* matrix, int32_t num_feat, int32_t num_vec);
00251 virtual void set_uint_matrix(
00252 const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
00253 virtual void set_long_matrix(
00254 const int64_t* matrix, int32_t num_feat, int32_t num_vec);
00255 virtual void set_ulong_matrix(
00256 const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
00257 virtual void set_matrix(
00258 const float32_t* matrix, int32_t num_feat, int32_t num_vec);
00259 virtual void set_matrix(
00260 const float64_t* matrix, int32_t num_feat, int32_t num_vec);
00261 virtual void set_longreal_matrix(
00262 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
00263 virtual void set_matrix(
00264 const int16_t* matrix, int32_t num_feat, int32_t num_vec);
00265 virtual void set_matrix(
00266 const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
00268
00276 virtual void set_sparse_matrix(
00277 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
00278 virtual void set_sparse_matrix(
00279 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
00280 virtual void set_sparse_matrix(
00281 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
00282 virtual void set_sparse_matrix(
00283 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
00284 virtual void set_uint_sparsematrix(
00285 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
00286 virtual void set_long_sparsematrix(
00287 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
00288 virtual void set_ulong_sparsematrix(
00289 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
00290 virtual void set_sparse_matrix(
00291 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
00292 virtual void set_sparse_matrix(
00293 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
00294 virtual void set_sparse_matrix(
00295 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
00296 virtual void set_sparse_matrix(
00297 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
00298 virtual void set_longreal_sparsematrix(
00299 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
00301
00302
00311 virtual void set_string_list(
00312 const SGString<bool>* strings, int32_t num_str);
00313 virtual void set_string_list(
00314 const SGString<uint8_t>* strings, int32_t num_str);
00315 virtual void set_string_list(
00316 const SGString<char>* strings, int32_t num_str);
00317 virtual void set_string_list(
00318 const SGString<int32_t>* strings, int32_t num_str);
00319 virtual void set_uint_string_list(
00320 const SGString<uint32_t>* strings, int32_t num_str);
00321 virtual void set_string_list(
00322 const SGString<int16_t>* strings, int32_t num_str);
00323 virtual void set_string_list(
00324 const SGString<uint16_t>* strings, int32_t num_str);
00325 virtual void set_long_string_list(
00326 const SGString<int64_t>* strings, int32_t num_str);
00327 virtual void set_ulong_string_list(
00328 const SGString<uint64_t>* strings, int32_t num_str);
00329 virtual void set_string_list(
00330 const SGString<float32_t>* strings, int32_t num_str);
00331 virtual void set_string_list(
00332 const SGString<float64_t>* strings, int32_t num_str);
00333 virtual void set_longreal_string_list(
00334 const SGString<floatmax_t>* strings, int32_t num_str);
00336
00337 virtual void get_int8_matrix(int8_t*&, int32_t&, int32_t&)
00338 {
00339 SG_NOTIMPLEMENTED;
00340 }
00341 virtual void get_int8_sparsematrix(shogun::SGSparseVector<signed char>*&, int32_t&, int32_t&)
00342 {
00343 SG_NOTIMPLEMENTED;
00344 }
00345 virtual void get_int8_string_list(shogun::SGString<signed char>*&, int32_t&, int32_t&)
00346 {
00347 SG_NOTIMPLEMENTED;
00348 }
00349 virtual void set_int8_matrix(const int8_t*, int32_t, int32_t)
00350 {
00351 SG_NOTIMPLEMENTED;
00352 }
00353 virtual void set_int8_sparsematrix(const shogun::SGSparseVector<signed char>*, int32_t, int32_t)
00354 {
00355 SG_NOTIMPLEMENTED;
00356 }
00357 virtual void set_int8_string_list(const shogun::SGString<signed char>*, int32_t)
00358 {
00359 SG_NOTIMPLEMENTED;
00360 }
00361
00362
00364 virtual const char* get_name() const { return "HDF5File"; }
00365
00366 protected:
00368 void get_boolean_type();
00369
00378 hid_t get_compatible_type(H5T_class_t t_class,
00379 const TSGDataType* datatype);
00380
00388 void get_dims(hid_t dataset, int32_t*& dims, int32_t& ndims, int64_t& total_elements);
00389
00391 void create_group_hierarchy();
00392
00393 protected:
00395 hid_t h5file;
00397 hid_t boolean_type;
00398 };
00399 }
00400 #endif // HAVE_HDF5
00401 #endif //__HDF5_FILE_H__
00402