HDF5File.h

Go to the documentation of this file.
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/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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation