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/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__