SHOGUN
v3.2.0
|
00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of the GNU General Public License as published by 00004 * the Free Software Foundation; either version 3 of the License, or 00005 * (at your option) any later version. 00006 * 00007 * Written (W) 2010 Soeren Sonnenburg 00008 * Copyright (C) 2010 Berlin Institute of Technology 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_matrix( 00091 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00092 virtual void get_matrix( 00093 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00094 virtual void get_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_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<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00144 virtual void get_sparse_matrix( 00145 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00146 virtual void get_sparse_matrix( 00147 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec); 00148 virtual void get_sparse_matrix( 00149 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00150 virtual void get_sparse_matrix( 00151 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00152 virtual void get_sparse_matrix( 00153 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00154 virtual void get_sparse_matrix( 00155 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00156 virtual void get_sparse_matrix( 00157 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00158 virtual void get_sparse_matrix( 00159 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00160 virtual void get_sparse_matrix( 00161 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00162 virtual void get_sparse_matrix( 00163 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00164 virtual void get_sparse_matrix( 00165 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00167 00168 00177 virtual void get_string_list( 00178 SGString<bool>*& strings, int32_t& num_str, 00179 int32_t& max_string_len); 00180 virtual void get_string_list( 00181 SGString<int8_t>*& strings, int32_t& num_str, 00182 int32_t& max_string_len); 00183 virtual void get_string_list( 00184 SGString<uint8_t>*& strings, int32_t& num_str, 00185 int32_t& max_string_len); 00186 virtual void get_string_list( 00187 SGString<char>*& strings, int32_t& num_str, 00188 int32_t& max_string_len); 00189 virtual void get_string_list( 00190 SGString<int32_t>*& strings, int32_t& num_str, 00191 int32_t& max_string_len); 00192 virtual void get_string_list( 00193 SGString<uint32_t>*& strings, int32_t& num_str, 00194 int32_t& max_string_len); 00195 virtual void get_string_list( 00196 SGString<int16_t>*& strings, int32_t& num_str, 00197 int32_t& max_string_len); 00198 virtual void get_string_list( 00199 SGString<uint16_t>*& strings, int32_t& num_str, 00200 int32_t& max_string_len); 00201 virtual void get_string_list( 00202 SGString<int64_t>*& strings, int32_t& num_str, 00203 int32_t& max_string_len); 00204 virtual void get_string_list( 00205 SGString<uint64_t>*& strings, int32_t& num_str, 00206 int32_t& max_string_len); 00207 virtual void get_string_list( 00208 SGString<float32_t>*& strings, int32_t& num_str, 00209 int32_t& max_string_len); 00210 virtual void get_string_list( 00211 SGString<float64_t>*& strings, int32_t& num_str, 00212 int32_t& max_string_len); 00213 virtual void get_string_list( 00214 SGString<floatmax_t>*& strings, int32_t& num_str, 00215 int32_t& max_string_len); 00217 00225 virtual void set_vector(const bool* vector, int32_t len); 00226 virtual void set_vector(const int8_t* vector, int32_t len); 00227 virtual void set_vector(const uint8_t* vector, int32_t len); 00228 virtual void set_vector(const char* vector, int32_t len); 00229 virtual void set_vector(const int32_t* vector, int32_t len); 00230 virtual void set_vector(const uint32_t* vector, int32_t len); 00231 virtual void set_vector(const float32_t* vector, int32_t len); 00232 virtual void set_vector(const float64_t* vector, int32_t len); 00233 virtual void set_vector(const floatmax_t* vector, int32_t len); 00234 virtual void set_vector(const int16_t* vector, int32_t len); 00235 virtual void set_vector(const uint16_t* vector, int32_t len); 00236 virtual void set_vector(const int64_t* vector, int32_t len); 00237 virtual void set_vector(const uint64_t* vector, int32_t len); 00239 00240 00248 virtual void set_matrix( 00249 const bool* matrix, int32_t num_feat, int32_t num_vec); 00250 virtual void set_matrix( 00251 const int8_t* matrix, int32_t num_feat, int32_t num_vec); 00252 virtual void set_matrix( 00253 const uint8_t* matrix, int32_t num_feat, int32_t num_vec); 00254 virtual void set_matrix( 00255 const char* matrix, int32_t num_feat, int32_t num_vec); 00256 virtual void set_matrix( 00257 const int32_t* matrix, int32_t num_feat, int32_t num_vec); 00258 virtual void set_matrix( 00259 const uint32_t* matrix, int32_t num_feat, int32_t num_vec); 00260 virtual void set_matrix( 00261 const int64_t* matrix, int32_t num_feat, int32_t num_vec); 00262 virtual void set_matrix( 00263 const uint64_t* matrix, int32_t num_feat, int32_t num_vec); 00264 virtual void set_matrix( 00265 const float32_t* matrix, int32_t num_feat, int32_t num_vec); 00266 virtual void set_matrix( 00267 const float64_t* matrix, int32_t num_feat, int32_t num_vec); 00268 virtual void set_matrix( 00269 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec); 00270 virtual void set_matrix( 00271 const int16_t* matrix, int32_t num_feat, int32_t num_vec); 00272 virtual void set_matrix( 00273 const uint16_t* matrix, int32_t num_feat, int32_t num_vec); 00275 00283 virtual void set_sparse_matrix( 00284 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec); 00285 virtual void set_sparse_matrix( 00286 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec); 00287 virtual void set_sparse_matrix( 00288 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec); 00289 virtual void set_sparse_matrix( 00290 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec); 00291 virtual void set_sparse_matrix( 00292 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec); 00293 virtual void set_sparse_matrix( 00294 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec); 00295 virtual void set_sparse_matrix( 00296 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec); 00297 virtual void set_sparse_matrix( 00298 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec); 00299 virtual void set_sparse_matrix( 00300 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec); 00301 virtual void set_sparse_matrix( 00302 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec); 00303 virtual void set_sparse_matrix( 00304 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec); 00305 virtual void set_sparse_matrix( 00306 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec); 00307 virtual void set_sparse_matrix( 00308 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec); 00310 00311 00320 virtual void set_string_list( 00321 const SGString<bool>* strings, int32_t num_str); 00322 virtual void set_string_list( 00323 const SGString<int8_t>* strings, int32_t num_str); 00324 virtual void set_string_list( 00325 const SGString<uint8_t>* strings, int32_t num_str); 00326 virtual void set_string_list( 00327 const SGString<char>* strings, int32_t num_str); 00328 virtual void set_string_list( 00329 const SGString<int32_t>* strings, int32_t num_str); 00330 virtual void set_string_list( 00331 const SGString<uint32_t>* strings, int32_t num_str); 00332 virtual void set_string_list( 00333 const SGString<int16_t>* strings, int32_t num_str); 00334 virtual void set_string_list( 00335 const SGString<uint16_t>* strings, int32_t num_str); 00336 virtual void set_string_list( 00337 const SGString<int64_t>* strings, int32_t num_str); 00338 virtual void set_string_list( 00339 const SGString<uint64_t>* strings, int32_t num_str); 00340 virtual void set_string_list( 00341 const SGString<float32_t>* strings, int32_t num_str); 00342 virtual void set_string_list( 00343 const SGString<float64_t>* strings, int32_t num_str); 00344 virtual void set_string_list( 00345 const SGString<floatmax_t>* strings, int32_t num_str); 00347 00348 virtual void get_matrix(int8_t*&, int32_t&, int32_t&) 00349 { 00350 SG_NOTIMPLEMENTED 00351 } 00352 virtual void get_int8_sparsematrix(shogun::SGSparseVector<signed char>*&, int32_t&, int32_t&) 00353 { 00354 SG_NOTIMPLEMENTED 00355 } 00356 virtual void get_int8_string_list(shogun::SGString<signed char>*&, int32_t&, int32_t&) 00357 { 00358 SG_NOTIMPLEMENTED 00359 } 00360 virtual void set_int8_matrix(const int8_t*, int32_t, int32_t) 00361 { 00362 SG_NOTIMPLEMENTED 00363 } 00364 virtual void set_int8_sparsematrix(const shogun::SGSparseVector<signed char>*, int32_t, int32_t) 00365 { 00366 SG_NOTIMPLEMENTED 00367 } 00368 virtual void set_int8_string_list(const shogun::SGString<signed char>*, int32_t) 00369 { 00370 SG_NOTIMPLEMENTED 00371 } 00372 00373 00375 virtual const char* get_name() const { return "HDF5File"; } 00376 00377 protected: 00379 void get_boolean_type(); 00380 00389 hid_t get_compatible_type(H5T_class_t t_class, 00390 const TSGDataType* datatype); 00391 00399 void get_dims(hid_t dataset, int32_t*& dims, int32_t& ndims, int64_t& total_elements); 00400 00402 void create_group_hierarchy(); 00403 00404 protected: 00406 hid_t h5file; 00408 hid_t boolean_type; 00409 }; 00410 } 00411 #endif // HAVE_HDF5 00412 #endif //__HDF5_FILE_H__ 00413