SHOGUN  v3.2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
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_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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation