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/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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation