00001
00002
00003
00004
00005
00006
00007
00008
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/lib/io.h>
00017 #include <shogun/lib/SimpleFile.h>
00018
00019 namespace shogun
00020 {
00027 class CBinaryFile: public CFile
00028 {
00029 public:
00035 CBinaryFile(FILE* f, const char* name=NULL);
00036
00043 CBinaryFile(char* fname, char rw='r', const char* name=NULL);
00044
00046 virtual ~CBinaryFile();
00047
00055 virtual void get_byte_vector(uint8_t*& vector, int32_t& len);
00056 virtual void get_char_vector(char*& vector, int32_t& len);
00057 virtual void get_int_vector(int32_t*& vector, int32_t& len);
00058 virtual void get_real_vector(float64_t*& vector, int32_t& len);
00059 virtual void get_shortreal_vector(float32_t*& vector, int32_t& len);
00060 virtual void get_short_vector(int16_t*& vector, int32_t& len);
00061 virtual void get_word_vector(uint16_t*& vector, int32_t& len);
00063
00072 virtual void get_byte_matrix(
00073 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00074 virtual void get_char_matrix(
00075 char*& matrix, int32_t& num_feat, int32_t& num_vec);
00076 virtual void get_int_matrix(
00077 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00078 virtual void get_uint_matrix(
00079 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00080 virtual void get_long_matrix(
00081 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00082 virtual void get_ulong_matrix(
00083 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00084 virtual void get_shortreal_matrix(
00085 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00086 virtual void get_real_matrix(
00087 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00088 virtual void get_longreal_matrix(
00089 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00090 virtual void get_short_matrix(
00091 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00092 virtual void get_word_matrix(
00093 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
00095
00104 virtual void get_byte_ndarray(
00105 uint8_t*& array, int32_t*& dims, int32_t& num_dims);
00106 virtual void get_char_ndarray(
00107 char*& array, int32_t*& dims, int32_t& num_dims);
00108 virtual void get_int_ndarray(
00109 int32_t*& array, int32_t*& dims, int32_t& num_dims);
00110 virtual void get_shortreal_ndarray(
00111 float32_t*& array, int32_t*& dims, int32_t& num_dims);
00112 virtual void get_real_ndarray(
00113 float64_t*& array, int32_t*& dims, int32_t& num_dims);
00114 virtual void get_short_ndarray(
00115 int16_t*& array, int32_t*& dims, int32_t& num_dims);
00116 virtual void get_word_ndarray(
00117 uint16_t*& array, int32_t*& dims, int32_t& num_dims);
00119
00128 virtual void get_bool_sparsematrix(
00129 TSparse<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
00130 virtual void get_byte_sparsematrix(
00131 TSparse<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00132 virtual void get_char_sparsematrix(
00133 TSparse<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
00134 virtual void get_int_sparsematrix(
00135 TSparse<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00136 virtual void get_uint_sparsematrix(
00137 TSparse<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00138 virtual void get_long_sparsematrix(
00139 TSparse<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00140 virtual void get_ulong_sparsematrix(
00141 TSparse<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00142 virtual void get_short_sparsematrix(
00143 TSparse<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00144 virtual void get_word_sparsematrix(
00145 TSparse<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00146 virtual void get_shortreal_sparsematrix(
00147 TSparse<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00148 virtual void get_real_sparsematrix(
00149 TSparse<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00150 virtual void get_longreal_sparsematrix(
00151 TSparse<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
00153
00154
00163 virtual void get_byte_string_list(
00164 T_STRING<uint8_t>*& strings, int32_t& num_str,
00165 int32_t& max_string_len);
00166 virtual void get_char_string_list(
00167 T_STRING<char>*& strings, int32_t& num_str,
00168 int32_t& max_string_len);
00169 virtual void get_int_string_list(
00170 T_STRING<int32_t>*& strings, int32_t& num_str,
00171 int32_t& max_string_len);
00172 virtual void get_uint_string_list(
00173 T_STRING<uint32_t>*& strings, int32_t& num_str,
00174 int32_t& max_string_len);
00175 virtual void get_short_string_list(
00176 T_STRING<int16_t>*& strings, int32_t& num_str,
00177 int32_t& max_string_len);
00178 virtual void get_word_string_list(
00179 T_STRING<uint16_t>*& strings, int32_t& num_str,
00180 int32_t& max_string_len);
00181 virtual void get_long_string_list(
00182 T_STRING<int64_t>*& strings, int32_t& num_str,
00183 int32_t& max_string_len);
00184 virtual void get_ulong_string_list(
00185 T_STRING<uint64_t>*& strings, int32_t& num_str,
00186 int32_t& max_string_len);
00187 virtual void get_shortreal_string_list(
00188 T_STRING<float32_t>*& strings, int32_t& num_str,
00189 int32_t& max_string_len);
00190 virtual void get_real_string_list(
00191 T_STRING<float64_t>*& strings, int32_t& num_str,
00192 int32_t& max_string_len);
00193 virtual void get_longreal_string_list(
00194 T_STRING<floatmax_t>*& strings, int32_t& num_str,
00195 int32_t& max_string_len);
00197
00205 virtual void set_byte_vector(const uint8_t* vector, int32_t len);
00206 virtual void set_char_vector(const char* vector, int32_t len);
00207 virtual void set_int_vector(const int32_t* vector, int32_t len);
00208 virtual void set_shortreal_vector( const float32_t* vector, int32_t len);
00209 virtual void set_real_vector(const float64_t* vector, int32_t len);
00210 virtual void set_short_vector(const int16_t* vector, int32_t len);
00211 virtual void set_word_vector(const uint16_t* vector, int32_t len);
00213
00214
00222 virtual void set_byte_matrix(
00223 const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
00224 virtual void set_char_matrix(
00225 const char* matrix, int32_t num_feat, int32_t num_vec);
00226 virtual void set_int_matrix(
00227 const int32_t* matrix, int32_t num_feat, int32_t num_vec);
00228 virtual void set_uint_matrix(
00229 const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
00230 virtual void set_long_matrix(
00231 const int64_t* matrix, int32_t num_feat, int32_t num_vec);
00232 virtual void set_ulong_matrix(
00233 const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
00234 virtual void set_shortreal_matrix(
00235 const float32_t* matrix, int32_t num_feat, int32_t num_vec);
00236 virtual void set_real_matrix(
00237 const float64_t* matrix, int32_t num_feat, int32_t num_vec);
00238 virtual void set_longreal_matrix(
00239 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
00240 virtual void set_short_matrix(
00241 const int16_t* matrix, int32_t num_feat, int32_t num_vec);
00242 virtual void set_word_matrix(
00243 const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
00245
00253 virtual void set_bool_sparsematrix(
00254 const TSparse<bool>* matrix, int32_t num_feat, int32_t num_vec);
00255 virtual void set_byte_sparsematrix(
00256 const TSparse<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
00257 virtual void set_char_sparsematrix(
00258 const TSparse<char>* matrix, int32_t num_feat, int32_t num_vec);
00259 virtual void set_int_sparsematrix(
00260 const TSparse<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
00261 virtual void set_uint_sparsematrix(
00262 const TSparse<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
00263 virtual void set_long_sparsematrix(
00264 const TSparse<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
00265 virtual void set_ulong_sparsematrix(
00266 const TSparse<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
00267 virtual void set_short_sparsematrix(
00268 const TSparse<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
00269 virtual void set_word_sparsematrix(
00270 const TSparse<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
00271 virtual void set_shortreal_sparsematrix(
00272 const TSparse<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
00273 virtual void set_real_sparsematrix(
00274 const TSparse<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
00275 virtual void set_longreal_sparsematrix(
00276 const TSparse<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
00278
00279
00288 virtual void set_byte_string_list(
00289 const T_STRING<uint8_t>* strings, int32_t num_str);
00290 virtual void set_char_string_list(
00291 const T_STRING<char>* strings, int32_t num_str);
00292 virtual void set_int_string_list(
00293 const T_STRING<int32_t>* strings, int32_t num_str);
00294 virtual void set_uint_string_list(
00295 const T_STRING<uint32_t>* strings, int32_t num_str);
00296 virtual void set_short_string_list(
00297 const T_STRING<int16_t>* strings, int32_t num_str);
00298 virtual void set_word_string_list(
00299 const T_STRING<uint16_t>* strings, int32_t num_str);
00300 virtual void set_long_string_list(
00301 const T_STRING<int64_t>* strings, int32_t num_str);
00302 virtual void set_ulong_string_list(
00303 const T_STRING<uint64_t>* strings, int32_t num_str);
00304 virtual void set_shortreal_string_list(
00305 const T_STRING<float32_t>* strings, int32_t num_str);
00306 virtual void set_real_string_list(
00307 const T_STRING<float64_t>* strings, int32_t num_str);
00308 virtual void set_longreal_string_list(
00309 const T_STRING<floatmax_t>* strings, int32_t num_str);
00311
00313 inline virtual const char* get_name() const { return "BinaryFile"; }
00314
00315 protected:
00320 SGDataType read_header();
00321
00326 void write_header(SGDataType datatype);
00327
00333 int32_t parse_first_header(SGDataType &type);
00334
00340 int32_t parse_next_header(SGDataType &type);
00341
00342 private:
00349 template <class DT> DT* load_data(DT* target, int64_t& num)
00350 {
00351 CSimpleFile<DT> f(filename, file);
00352 return f.load(target, num);
00353 }
00354
00361 template <class DT> bool save_data(DT* src, int64_t num)
00362 {
00363 CSimpleFile<DT> f(filename, file);
00364 return f.save(src, num);
00365 }
00366 };
00367 }
00368 #endif //__BINARY_FILE_H__