SHOGUN
v3.2.0
|
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_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_matrix( 00090 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00091 virtual void get_matrix( 00092 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00093 virtual void get_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_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_sparse_matrix( 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_sparse_matrix( 00150 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00151 virtual void get_sparse_matrix( 00152 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00153 virtual void get_sparse_matrix( 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_sparse_matrix( 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_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_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_string_list( 00198 SGString<int64_t>*& strings, int32_t& num_str, 00199 int32_t& max_string_len); 00200 virtual void get_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_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_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_matrix( 00252 const uint32_t* matrix, int32_t num_feat, int32_t num_vec); 00253 virtual void set_matrix( 00254 const int64_t* matrix, int32_t num_feat, int32_t num_vec); 00255 virtual void set_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_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_sparse_matrix( 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_sparse_matrix( 00310 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec); 00311 virtual void set_sparse_matrix( 00312 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec); 00313 virtual void set_sparse_matrix( 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_sparse_matrix( 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_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_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_string_list( 00351 const SGString<int64_t>* strings, int32_t num_str); 00352 virtual void set_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_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__