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> struct SGString;
00026 template <class ST> struct SGSparseVector;
00027
00034 #define IGNORE_IN_CLASSLIST
00035 IGNORE_IN_CLASSLIST class CHDF5File : public CFile
00036 {
00037 public:
00039 CHDF5File(void);
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(uint8_t*& vector, int32_t& len);
00061 virtual void get_vector(char*& vector, int32_t& len);
00062 virtual void get_vector(int32_t*& vector, int32_t& len);
00063 virtual void get_vector(float64_t*& vector, int32_t& len);
00064 virtual void get_vector(float32_t*& vector, int32_t& len);
00065 virtual void get_vector(int16_t*& vector, int32_t& len);
00066 virtual void get_vector(uint16_t*& vector, int32_t& len);
00068
00077 virtual void get_matrix(
00078 bool*& matrix, int32_t& num_feat, int32_t& num_vec);
00079 virtual void get_matrix(
00080 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00081 virtual void get_matrix(
00082 char*& matrix, int32_t& num_feat, int32_t& num_vec);
00083 virtual void get_matrix(
00084 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00085 virtual void get_uint_matrix(
00086 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00087 virtual void get_long_matrix(
00088 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00089 virtual void get_ulong_matrix(
00090 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00091 virtual void get_matrix(
00092 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00093 virtual void get_matrix(
00094 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00095 virtual void get_longreal_matrix(
00096 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00097 virtual void get_matrix(
00098 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00099 virtual void get_matrix(
00100 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00102
00111 virtual void get_ndarray(
00112 uint8_t*& array, int32_t*& dims, int32_t& num_dims);
00113 virtual void get_ndarray(
00114 char*& array, int32_t*& dims, int32_t& num_dims);
00115 virtual void get_ndarray(
00116 int32_t*& array, int32_t*& dims, int32_t& num_dims);
00117 virtual void get_ndarray(
00118 float32_t*& array, int32_t*& dims, int32_t& num_dims);
00119 virtual void get_ndarray(
00120 float64_t*& array, int32_t*& dims, int32_t& num_dims);
00121 virtual void get_ndarray(
00122 int16_t*& array, int32_t*& dims, int32_t& num_dims);
00123 virtual void get_ndarray(
00124 uint16_t*& array, int32_t*& dims, int32_t& num_dims);
00126
00135 virtual void get_sparse_matrix(
00136 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
00137 virtual void get_sparse_matrix(
00138 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00139 virtual void get_sparse_matrix(
00140 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
00141 virtual void get_sparse_matrix(
00142 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00143 virtual void get_uint_sparsematrix(
00144 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00145 virtual void get_long_sparsematrix(
00146 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00147 virtual void get_ulong_sparsematrix(
00148 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00149 virtual void get_sparse_matrix(
00150 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00151 virtual void get_sparse_matrix(
00152 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00153 virtual void get_sparse_matrix(
00154 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00155 virtual void get_sparse_matrix(
00156 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00157 virtual void get_longreal_sparsematrix(
00158 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00160
00161
00170 virtual void get_string_list(
00171 SGString<bool>*& strings, int32_t& num_str,
00172 int32_t& max_string_len);
00173 virtual void get_string_list(
00174 SGString<uint8_t>*& strings, int32_t& num_str,
00175 int32_t& max_string_len);
00176 virtual void get_string_list(
00177 SGString<char>*& strings, int32_t& num_str,
00178 int32_t& max_string_len);
00179 virtual void get_string_list(
00180 SGString<int32_t>*& strings, int32_t& num_str,
00181 int32_t& max_string_len);
00182 virtual void get_uint_string_list(
00183 SGString<uint32_t>*& strings, int32_t& num_str,
00184 int32_t& max_string_len);
00185 virtual void get_string_list(
00186 SGString<int16_t>*& strings, int32_t& num_str,
00187 int32_t& max_string_len);
00188 virtual void get_string_list(
00189 SGString<uint16_t>*& strings, int32_t& num_str,
00190 int32_t& max_string_len);
00191 virtual void get_long_string_list(
00192 SGString<int64_t>*& strings, int32_t& num_str,
00193 int32_t& max_string_len);
00194 virtual void get_ulong_string_list(
00195 SGString<uint64_t>*& strings, int32_t& num_str,
00196 int32_t& max_string_len);
00197 virtual void get_string_list(
00198 SGString<float32_t>*& strings, int32_t& num_str,
00199 int32_t& max_string_len);
00200 virtual void get_string_list(
00201 SGString<float64_t>*& strings, int32_t& num_str,
00202 int32_t& max_string_len);
00203 virtual void get_longreal_string_list(
00204 SGString<floatmax_t>*& strings, int32_t& num_str,
00205 int32_t& max_string_len);
00207
00215 virtual void set_vector(const bool* vector, int32_t len);
00216 virtual void set_vector(const uint8_t* vector, int32_t len);
00217 virtual void set_vector(const char* vector, int32_t len);
00218 virtual void set_vector(const int32_t* vector, int32_t len);
00219 virtual void set_vector( const float32_t* vector, int32_t len);
00220 virtual void set_vector(const float64_t* vector, int32_t len);
00221 virtual void set_vector(const int16_t* vector, int32_t len);
00222 virtual void set_vector(const uint16_t* vector, int32_t len);
00224
00225
00233 virtual void set_matrix(
00234 const bool* matrix, int32_t num_feat, int32_t num_vec);
00235 virtual void set_matrix(
00236 const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
00237 virtual void set_matrix(
00238 const char* matrix, int32_t num_feat, int32_t num_vec);
00239 virtual void set_matrix(
00240 const int32_t* matrix, int32_t num_feat, int32_t num_vec);
00241 virtual void set_uint_matrix(
00242 const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
00243 virtual void set_long_matrix(
00244 const int64_t* matrix, int32_t num_feat, int32_t num_vec);
00245 virtual void set_ulong_matrix(
00246 const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
00247 virtual void set_matrix(
00248 const float32_t* matrix, int32_t num_feat, int32_t num_vec);
00249 virtual void set_matrix(
00250 const float64_t* matrix, int32_t num_feat, int32_t num_vec);
00251 virtual void set_longreal_matrix(
00252 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
00253 virtual void set_matrix(
00254 const int16_t* matrix, int32_t num_feat, int32_t num_vec);
00255 virtual void set_matrix(
00256 const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
00258
00266 virtual void set_sparse_matrix(
00267 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
00268 virtual void set_sparse_matrix(
00269 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
00270 virtual void set_sparse_matrix(
00271 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
00272 virtual void set_sparse_matrix(
00273 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
00274 virtual void set_uint_sparsematrix(
00275 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
00276 virtual void set_long_sparsematrix(
00277 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
00278 virtual void set_ulong_sparsematrix(
00279 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
00280 virtual void set_sparse_matrix(
00281 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
00282 virtual void set_sparse_matrix(
00283 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
00284 virtual void set_sparse_matrix(
00285 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
00286 virtual void set_sparse_matrix(
00287 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
00288 virtual void set_longreal_sparsematrix(
00289 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
00291
00292
00301 virtual void set_string_list(
00302 const SGString<bool>* strings, int32_t num_str);
00303 virtual void set_string_list(
00304 const SGString<uint8_t>* strings, int32_t num_str);
00305 virtual void set_string_list(
00306 const SGString<char>* strings, int32_t num_str);
00307 virtual void set_string_list(
00308 const SGString<int32_t>* strings, int32_t num_str);
00309 virtual void set_uint_string_list(
00310 const SGString<uint32_t>* strings, int32_t num_str);
00311 virtual void set_string_list(
00312 const SGString<int16_t>* strings, int32_t num_str);
00313 virtual void set_string_list(
00314 const SGString<uint16_t>* strings, int32_t num_str);
00315 virtual void set_long_string_list(
00316 const SGString<int64_t>* strings, int32_t num_str);
00317 virtual void set_ulong_string_list(
00318 const SGString<uint64_t>* strings, int32_t num_str);
00319 virtual void set_string_list(
00320 const SGString<float32_t>* strings, int32_t num_str);
00321 virtual void set_string_list(
00322 const SGString<float64_t>* strings, int32_t num_str);
00323 virtual void set_longreal_string_list(
00324 const SGString<floatmax_t>* strings, int32_t num_str);
00326
00327 virtual void get_int8_matrix(int8_t*&, int32_t&, int32_t&)
00328 {
00329 SG_NOTIMPLEMENTED;
00330 }
00331 virtual void get_int8_sparsematrix(shogun::SGSparseVector<signed char>*&, int32_t&, int32_t&)
00332 {
00333 SG_NOTIMPLEMENTED;
00334 }
00335 virtual void get_int8_string_list(shogun::SGString<signed char>*&, int32_t&, int32_t&)
00336 {
00337 SG_NOTIMPLEMENTED;
00338 }
00339 virtual void set_int8_matrix(const int8_t*, int32_t, int32_t)
00340 {
00341 SG_NOTIMPLEMENTED;
00342 }
00343 virtual void set_int8_sparsematrix(const shogun::SGSparseVector<signed char>*, int32_t, int32_t)
00344 {
00345 SG_NOTIMPLEMENTED;
00346 }
00347 virtual void set_int8_string_list(const shogun::SGString<signed char>*, int32_t)
00348 {
00349 SG_NOTIMPLEMENTED;
00350 }
00351
00352
00354 inline virtual const char* get_name() const { return "HDF5File"; }
00355
00356 protected:
00358 void get_boolean_type();
00359
00368 hid_t get_compatible_type(H5T_class_t t_class,
00369 const TSGDataType* datatype);
00370
00378 void get_dims(hid_t dataset, int32_t*& dims, int32_t& ndims, int64_t& total_elements);
00379
00381 void create_group_hierarchy();
00382
00383 protected:
00385 hid_t h5file;
00387 hid_t boolean_type;
00388 };
00389 }
00390 #endif // HAVE_HDF5
00391 #endif //__HDF5_FILE_H__
00392