SHOGUN  v2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BinaryFile.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 2010 Soeren Sonnenburg
8  * Copyright (C) 2010 Berlin Institute of Technology
9  */
10 #ifndef __BINARY_FILE_H__
11 #define __BINARY_FILE_H__
12 
13 #include <shogun/lib/config.h>
14 #include <shogun/lib/common.h>
15 #include <shogun/base/SGObject.h>
16 #include <shogun/io/SGIO.h>
17 #include <shogun/io/SimpleFile.h>
18 #include <shogun/io/File.h>
19 
20 namespace shogun
21 {
28 class CBinaryFile: public CFile
29 {
30 public:
32  CBinaryFile();
33 
39  CBinaryFile(FILE* f, const char* name=NULL);
40 
47  CBinaryFile(const char* fname, char rw='r', const char* name=NULL);
48 
50  virtual ~CBinaryFile();
51 
59  virtual void get_vector(uint8_t*& vector, int32_t& len);
60  virtual void get_vector(char*& vector, int32_t& len);
61  virtual void get_vector(int32_t*& vector, int32_t& len);
62  virtual void get_vector(float64_t*& vector, int32_t& len);
63  virtual void get_vector(float32_t*& vector, int32_t& len);
64  virtual void get_vector(int16_t*& vector, int32_t& len);
65  virtual void get_vector(uint16_t*& vector, int32_t& len);
67 
76  virtual void get_matrix(
77  uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
78  virtual void get_int8_matrix(
79  int8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
80  virtual void get_matrix(
81  char*& matrix, int32_t& num_feat, int32_t& num_vec);
82  virtual void get_matrix(
83  int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
84  virtual void get_uint_matrix(
85  uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
86  virtual void get_long_matrix(
87  int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
88  virtual void get_ulong_matrix(
89  uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
90  virtual void get_matrix(
91  float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
92  virtual void get_matrix(
93  float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
94  virtual void get_longreal_matrix(
95  floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
96  virtual void get_matrix(
97  int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
98  virtual void get_matrix(
99  uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
101 
110  virtual void get_ndarray(
111  uint8_t*& array, int32_t*& dims, int32_t& num_dims);
112  virtual void get_ndarray(
113  char*& array, int32_t*& dims, int32_t& num_dims);
114  virtual void get_ndarray(
115  int32_t*& array, int32_t*& dims, int32_t& num_dims);
116  virtual void get_ndarray(
117  float32_t*& array, int32_t*& dims, int32_t& num_dims);
118  virtual void get_ndarray(
119  float64_t*& array, int32_t*& dims, int32_t& num_dims);
120  virtual void get_ndarray(
121  int16_t*& array, int32_t*& dims, int32_t& num_dims);
122  virtual void get_ndarray(
123  uint16_t*& array, int32_t*& dims, int32_t& num_dims);
125 
134  virtual void get_sparse_matrix(
135  SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
136  virtual void get_sparse_matrix(
137  SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
138  virtual void get_int8_sparsematrix(
139  SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
140  virtual void get_sparse_matrix(
141  SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
142  virtual void get_sparse_matrix(
143  SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
144  virtual void get_uint_sparsematrix(
145  SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
146  virtual void get_long_sparsematrix(
147  SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
148  virtual void get_ulong_sparsematrix(
149  SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
150  virtual void get_sparse_matrix(
151  SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
152  virtual void get_sparse_matrix(
153  SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
154  virtual void get_sparse_matrix(
155  SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
156  virtual void get_sparse_matrix(
157  SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
158  virtual void get_longreal_sparsematrix(
159  SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
161 
162 
171  virtual void get_string_list(
172  SGString<uint8_t>*& strings, int32_t& num_str,
173  int32_t& max_string_len);
174  virtual void get_int8_string_list(
175  SGString<int8_t>*& strings, int32_t& num_str,
176  int32_t& max_string_len);
177  virtual void get_string_list(
178  SGString<char>*& strings, int32_t& num_str,
179  int32_t& max_string_len);
180  virtual void get_string_list(
181  SGString<int32_t>*& strings, int32_t& num_str,
182  int32_t& max_string_len);
183  virtual void get_uint_string_list(
184  SGString<uint32_t>*& strings, int32_t& num_str,
185  int32_t& max_string_len);
186  virtual void get_string_list(
187  SGString<int16_t>*& strings, int32_t& num_str,
188  int32_t& max_string_len);
189  virtual void get_string_list(
190  SGString<uint16_t>*& strings, int32_t& num_str,
191  int32_t& max_string_len);
192  virtual void get_long_string_list(
193  SGString<int64_t>*& strings, int32_t& num_str,
194  int32_t& max_string_len);
195  virtual void get_ulong_string_list(
196  SGString<uint64_t>*& strings, int32_t& num_str,
197  int32_t& max_string_len);
198  virtual void get_string_list(
199  SGString<float32_t>*& strings, int32_t& num_str,
200  int32_t& max_string_len);
201  virtual void get_string_list(
202  SGString<float64_t>*& strings, int32_t& num_str,
203  int32_t& max_string_len);
204  virtual void get_longreal_string_list(
205  SGString<floatmax_t>*& strings, int32_t& num_str,
206  int32_t& max_string_len);
208 
216  virtual void set_vector(const uint8_t* vector, int32_t len);
217  virtual void set_vector(const char* vector, int32_t len);
218  virtual void set_vector(const int32_t* vector, int32_t len);
219  virtual void set_vector( const float32_t* vector, int32_t len);
220  virtual void set_vector(const float64_t* vector, int32_t len);
221  virtual void set_vector(const int16_t* vector, int32_t len);
222  virtual void set_vector(const uint16_t* vector, int32_t len);
224 
225 
233  virtual void set_matrix(
234  const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
235  virtual void set_int8_matrix(
236  const int8_t* matrix, int32_t num_feat, int32_t num_vec);
237  virtual void set_matrix(
238  const char* matrix, int32_t num_feat, int32_t num_vec);
239  virtual void set_matrix(
240  const int32_t* matrix, int32_t num_feat, int32_t num_vec);
241  virtual void set_uint_matrix(
242  const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
243  virtual void set_long_matrix(
244  const int64_t* matrix, int32_t num_feat, int32_t num_vec);
245  virtual void set_ulong_matrix(
246  const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
247  virtual void set_matrix(
248  const float32_t* matrix, int32_t num_feat, int32_t num_vec);
249  virtual void set_matrix(
250  const float64_t* matrix, int32_t num_feat, int32_t num_vec);
251  virtual void set_longreal_matrix(
252  const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
253  virtual void set_matrix(
254  const int16_t* matrix, int32_t num_feat, int32_t num_vec);
255  virtual void set_matrix(
256  const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
258 
266  virtual void set_ndarray(
267  const uint8_t* array, int32_t* dims, int32_t num_dims);
268  virtual void set_ndarray(
269  const char* array, int32_t* dims, int32_t num_dims);
270  virtual void set_ndarray(
271  const int32_t* array, int32_t* dims, int32_t num_dims);
272  virtual void set_ndarray(
273  const float32_t* array, int32_t* dims, int32_t num_dims);
274  virtual void set_ndarray(
275  const float64_t* array, int32_t* dims, int32_t num_dims);
276  virtual void set_ndarray(
277  const int16_t* array, int32_t* dims, int32_t num_dims);
278  virtual void set_ndarray(
279  const uint16_t* array, int32_t* dims, int32_t num_dims);
281 
289  virtual void set_sparse_matrix(
290  const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
291  virtual void set_sparse_matrix(
292  const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
293  virtual void set_int8_sparsematrix(
294  const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
295  virtual void set_sparse_matrix(
296  const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
297  virtual void set_sparse_matrix(
298  const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
299  virtual void set_uint_sparsematrix(
300  const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
301  virtual void set_long_sparsematrix(
302  const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
303  virtual void set_ulong_sparsematrix(
304  const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
305  virtual void set_sparse_matrix(
306  const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
307  virtual void set_sparse_matrix(
308  const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
309  virtual void set_sparse_matrix(
310  const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
311  virtual void set_sparse_matrix(
312  const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
313  virtual void set_longreal_sparsematrix(
314  const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
316 
317 
326  virtual void set_string_list(
327  const SGString<uint8_t>* strings, int32_t num_str);
328  virtual void set_int8_string_list(
329  const SGString<int8_t>* strings, int32_t num_str);
330  virtual void set_string_list(
331  const SGString<char>* strings, int32_t num_str);
332  virtual void set_string_list(
333  const SGString<int32_t>* strings, int32_t num_str);
334  virtual void set_uint_string_list(
335  const SGString<uint32_t>* strings, int32_t num_str);
336  virtual void set_string_list(
337  const SGString<int16_t>* strings, int32_t num_str);
338  virtual void set_string_list(
339  const SGString<uint16_t>* strings, int32_t num_str);
340  virtual void set_long_string_list(
341  const SGString<int64_t>* strings, int32_t num_str);
342  virtual void set_ulong_string_list(
343  const SGString<uint64_t>* strings, int32_t num_str);
344  virtual void set_string_list(
345  const SGString<float32_t>* strings, int32_t num_str);
346  virtual void set_string_list(
347  const SGString<float64_t>* strings, int32_t num_str);
348  virtual void set_longreal_string_list(
349  const SGString<floatmax_t>* strings, int32_t num_str);
351 
353  inline virtual const char* get_name() const { return "BinaryFile"; }
354 
355 protected:
360  void read_header(TSGDataType* dest);
361 
366  void write_header(const TSGDataType* datatype);
367 
373  int32_t parse_first_header(TSGDataType& type);
374 
380  int32_t parse_next_header(TSGDataType& type);
381 
382 private:
389  template <class DT> DT* load_data(DT* target, int64_t& num)
390  {
392  return f.load(target, num);
393  }
394 
401  template <class DT> bool save_data(DT* src, int64_t num)
402  {
403  CSimpleFile<DT> f(filename, file);
404  return f.save(src, num);
405  }
406 };
407 }
408 #endif //__BINARY_FILE_H__

SHOGUN Machine Learning Toolbox - Documentation