BinaryFile.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 __BINARY_FILE_H__
00011 #define __BINARY_FILE_H__
00012 
00013 #include <shogun/lib/config.h>
00014 #include <shogun/lib/common.h>
00015 #include <shogun/base/SGObject.h>
00016 #include <shogun/io/SGIO.h>
00017 #include <shogun/io/SimpleFile.h>
00018 #include <shogun/io/File.h>
00019 
00020 namespace shogun
00021 {
00028 class CBinaryFile: public CFile
00029 {
00030 public:
00032     CBinaryFile();
00033 
00039     CBinaryFile(FILE* f, const char* name=NULL);
00040 
00047     CBinaryFile(const char* fname, char rw='r', const char* name=NULL);
00048 
00050     virtual ~CBinaryFile();
00051 
00059     virtual void get_vector(int8_t*& 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(uint32_t*& vector, int32_t& len);
00064     virtual void get_vector(float64_t*& vector, int32_t& len);
00065     virtual void get_vector(float32_t*& vector, int32_t& len);
00066     virtual void get_vector(floatmax_t*& vector, int32_t& len);
00067     virtual void get_vector(int16_t*& vector, int32_t& len);
00068     virtual void get_vector(uint16_t*& vector, int32_t& len);
00069     virtual void get_vector(int64_t*& vector, int32_t& len);
00070     virtual void get_vector(uint64_t*& vector, int32_t& len);
00072 
00081     virtual void get_matrix(
00082             uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00083     virtual void get_int8_matrix(
00084             int8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00085     virtual void get_matrix(
00086             char*& matrix, int32_t& num_feat, int32_t& num_vec);
00087     virtual void get_matrix(
00088             int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00089     virtual void get_uint_matrix(
00090             uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00091     virtual void get_long_matrix(
00092             int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00093     virtual void get_ulong_matrix(
00094             uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00095     virtual void get_matrix(
00096             float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00097     virtual void get_matrix(
00098             float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00099     virtual void get_longreal_matrix(
00100             floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00101     virtual void get_matrix(
00102             int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00103     virtual void get_matrix(
00104             uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00106 
00115     virtual void get_ndarray(
00116             uint8_t*& array, int32_t*& dims, int32_t& num_dims);
00117     virtual void get_ndarray(
00118             char*& array, int32_t*& dims, int32_t& num_dims);
00119     virtual void get_ndarray(
00120             int32_t*& array, int32_t*& dims, int32_t& num_dims);
00121     virtual void get_ndarray(
00122             float32_t*& array, int32_t*& dims, int32_t& num_dims);
00123     virtual void get_ndarray(
00124             float64_t*& array, int32_t*& dims, int32_t& num_dims);
00125     virtual void get_ndarray(
00126             int16_t*& array, int32_t*& dims, int32_t& num_dims);
00127     virtual void get_ndarray(
00128             uint16_t*& array, int32_t*& dims, int32_t& num_dims);
00130 
00139     virtual void get_sparse_matrix(
00140             SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
00141     virtual void get_sparse_matrix(
00142             SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00143     virtual void get_int8_sparsematrix(
00144             SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00145     virtual void get_sparse_matrix(
00146             SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
00147     virtual void get_sparse_matrix(
00148             SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00149     virtual void get_uint_sparsematrix(
00150             SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00151     virtual void get_long_sparsematrix(
00152             SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00153     virtual void get_ulong_sparsematrix(
00154             SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00155     virtual void get_sparse_matrix(
00156             SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00157     virtual void get_sparse_matrix(
00158             SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00159     virtual void get_sparse_matrix(
00160             SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00161     virtual void get_sparse_matrix(
00162             SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00163     virtual void get_longreal_sparsematrix(
00164             SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00166 
00167 
00176     virtual void get_string_list(
00177             SGString<uint8_t>*& strings, int32_t& num_str,
00178             int32_t& max_string_len);
00179     virtual void get_int8_string_list(
00180             SGString<int8_t>*& strings, int32_t& num_str,
00181             int32_t& max_string_len);
00182     virtual void get_string_list(
00183             SGString<char>*& strings, int32_t& num_str,
00184             int32_t& max_string_len);
00185     virtual void get_string_list(
00186             SGString<int32_t>*& strings, int32_t& num_str,
00187             int32_t& max_string_len);
00188     virtual void get_uint_string_list(
00189             SGString<uint32_t>*& strings, int32_t& num_str,
00190             int32_t& max_string_len);
00191     virtual void get_string_list(
00192             SGString<int16_t>*& strings, int32_t& num_str,
00193             int32_t& max_string_len);
00194     virtual void get_string_list(
00195             SGString<uint16_t>*& strings, int32_t& num_str,
00196             int32_t& max_string_len);
00197     virtual void get_long_string_list(
00198             SGString<int64_t>*& strings, int32_t& num_str,
00199             int32_t& max_string_len);
00200     virtual void get_ulong_string_list(
00201             SGString<uint64_t>*& strings, int32_t& num_str,
00202             int32_t& max_string_len);
00203     virtual void get_string_list(
00204             SGString<float32_t>*& strings, int32_t& num_str,
00205             int32_t& max_string_len);
00206     virtual void get_string_list(
00207             SGString<float64_t>*& strings, int32_t& num_str,
00208             int32_t& max_string_len);
00209     virtual void get_longreal_string_list(
00210             SGString<floatmax_t>*& strings, int32_t& num_str,
00211             int32_t& max_string_len);
00213 
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 uint8_t* matrix, int32_t num_feat, int32_t num_vec);
00245     virtual void set_int8_matrix(
00246             const int8_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_ndarray(
00277             const uint8_t* array, int32_t* dims, int32_t num_dims);
00278     virtual void set_ndarray(
00279             const char* array, int32_t* dims, int32_t num_dims);
00280     virtual void set_ndarray(
00281             const int32_t* array, int32_t* dims, int32_t num_dims);
00282     virtual void set_ndarray(
00283             const float32_t* array, int32_t* dims, int32_t num_dims);
00284     virtual void set_ndarray(
00285             const float64_t* array, int32_t* dims, int32_t num_dims);
00286     virtual void set_ndarray(
00287             const int16_t* array, int32_t* dims, int32_t num_dims);
00288     virtual void set_ndarray(
00289             const uint16_t* array, int32_t* dims, int32_t num_dims);
00291 
00299     virtual void set_sparse_matrix(
00300             const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
00301     virtual void set_sparse_matrix(
00302             const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
00303     virtual void set_int8_sparsematrix(
00304             const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
00305     virtual void set_sparse_matrix(
00306             const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
00307     virtual void set_sparse_matrix(
00308             const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
00309     virtual void set_uint_sparsematrix(
00310             const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
00311     virtual void set_long_sparsematrix(
00312             const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
00313     virtual void set_ulong_sparsematrix(
00314             const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
00315     virtual void set_sparse_matrix(
00316             const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
00317     virtual void set_sparse_matrix(
00318             const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
00319     virtual void set_sparse_matrix(
00320             const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
00321     virtual void set_sparse_matrix(
00322             const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
00323     virtual void set_longreal_sparsematrix(
00324             const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
00326 
00327 
00336     virtual void set_string_list(
00337             const SGString<uint8_t>* strings, int32_t num_str);
00338     virtual void set_int8_string_list(
00339             const SGString<int8_t>* strings, int32_t num_str);
00340     virtual void set_string_list(
00341             const SGString<char>* strings, int32_t num_str);
00342     virtual void set_string_list(
00343             const SGString<int32_t>* strings, int32_t num_str);
00344     virtual void set_uint_string_list(
00345             const SGString<uint32_t>* strings, int32_t num_str);
00346     virtual void set_string_list(
00347             const SGString<int16_t>* strings, int32_t num_str);
00348     virtual void set_string_list(
00349             const SGString<uint16_t>* strings, int32_t num_str);
00350     virtual void set_long_string_list(
00351             const SGString<int64_t>* strings, int32_t num_str);
00352     virtual void set_ulong_string_list(
00353             const SGString<uint64_t>* strings, int32_t num_str);
00354     virtual void set_string_list(
00355             const SGString<float32_t>* strings, int32_t num_str);
00356     virtual void set_string_list(
00357             const SGString<float64_t>* strings, int32_t num_str);
00358     virtual void set_longreal_string_list(
00359             const SGString<floatmax_t>* strings, int32_t num_str);
00361 
00363     virtual const char* get_name() const { return "BinaryFile"; }
00364 
00365 protected:
00370     void read_header(TSGDataType* dest);
00371 
00376     void write_header(const TSGDataType* datatype);
00377 
00383     int32_t parse_first_header(TSGDataType& type);
00384 
00390     int32_t parse_next_header(TSGDataType& type);
00391 
00392 private:
00399     template <class DT> DT* load_data(DT* target, int64_t& num)
00400     {
00401         CSimpleFile<DT> f(filename, file);
00402         return f.load(target, num);
00403     }
00404 
00411     template <class DT> bool save_data(DT* src, int64_t num)
00412     {
00413         CSimpleFile<DT> f(filename, file);
00414         return f.save(src, num);
00415     }
00416 };
00417 }
00418 #endif //__BINARY_FILE_H__
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation