SHOGUN  3.2.1
 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/io/SimpleFile.h>
16 #include <shogun/io/File.h>
17 
18 namespace shogun
19 {
20 struct TSGDataType;
21 template <class ST> class SGString;
22 template <class T> class SGSparseVector;
23 
30 class CBinaryFile: public CFile
31 {
32 public:
34  CBinaryFile();
35 
41  CBinaryFile(FILE* f, const char* name=NULL);
42 
49  CBinaryFile(const char* fname, char rw='r', const char* name=NULL);
50 
52  virtual ~CBinaryFile();
53 
54 #ifndef SWIG // SWIG should skip this
55 
62  virtual void get_vector(int8_t*& vector, int32_t& len);
63  virtual void get_vector(uint8_t*& vector, int32_t& len);
64  virtual void get_vector(char*& vector, int32_t& len);
65  virtual void get_vector(int32_t*& vector, int32_t& len);
66  virtual void get_vector(uint32_t*& vector, int32_t& len);
67  virtual void get_vector(float64_t*& vector, int32_t& len);
68  virtual void get_vector(float32_t*& vector, int32_t& len);
69  virtual void get_vector(floatmax_t*& vector, int32_t& len);
70  virtual void get_vector(int16_t*& vector, int32_t& len);
71  virtual void get_vector(uint16_t*& vector, int32_t& len);
72  virtual void get_vector(int64_t*& vector, int32_t& len);
73  virtual void get_vector(uint64_t*& vector, int32_t& len);
75 
84  virtual void get_matrix(
85  uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
86  virtual void get_matrix(
87  int8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
88  virtual void get_matrix(
89  char*& matrix, int32_t& num_feat, int32_t& num_vec);
90  virtual void get_matrix(
91  int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
92  virtual void get_matrix(
93  uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
94  virtual void get_matrix(
95  int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
96  virtual void get_matrix(
97  uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
98  virtual void get_matrix(
99  float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
100  virtual void get_matrix(
101  float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
102  virtual void get_matrix(
103  floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
104  virtual void get_matrix(
105  int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
106  virtual void get_matrix(
107  uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
109 
118  virtual void get_ndarray(
119  uint8_t*& array, int32_t*& dims, int32_t& num_dims);
120  virtual void get_ndarray(
121  char*& array, int32_t*& dims, int32_t& num_dims);
122  virtual void get_ndarray(
123  int32_t*& array, int32_t*& dims, int32_t& num_dims);
124  virtual void get_ndarray(
125  float32_t*& array, int32_t*& dims, int32_t& num_dims);
126  virtual void get_ndarray(
127  float64_t*& array, int32_t*& dims, int32_t& num_dims);
128  virtual void get_ndarray(
129  int16_t*& array, int32_t*& dims, int32_t& num_dims);
130  virtual void get_ndarray(
131  uint16_t*& array, int32_t*& dims, int32_t& num_dims);
133 
142  virtual void get_sparse_matrix(
143  SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
144  virtual void get_sparse_matrix(
145  SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
146  virtual void get_sparse_matrix(
147  SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
148  virtual void get_sparse_matrix(
149  SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
150  virtual void get_sparse_matrix(
151  SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
152  virtual void get_sparse_matrix(
153  SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
154  virtual void get_sparse_matrix(
155  SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
156  virtual void get_sparse_matrix(
157  SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
158  virtual void get_sparse_matrix(
159  SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
160  virtual void get_sparse_matrix(
161  SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
162  virtual void get_sparse_matrix(
163  SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
164  virtual void get_sparse_matrix(
165  SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
166  virtual void get_sparse_matrix(
167  SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
169 
170 
179  virtual void get_string_list(
180  SGString<uint8_t>*& strings, int32_t& num_str,
181  int32_t& max_string_len);
182  virtual void get_string_list(
183  SGString<int8_t>*& strings, int32_t& num_str,
184  int32_t& max_string_len);
185  virtual void get_string_list(
186  SGString<char>*& strings, int32_t& num_str,
187  int32_t& max_string_len);
188  virtual void get_string_list(
189  SGString<int32_t>*& strings, int32_t& num_str,
190  int32_t& max_string_len);
191  virtual void get_string_list(
192  SGString<uint32_t>*& strings, int32_t& num_str,
193  int32_t& max_string_len);
194  virtual void get_string_list(
195  SGString<int16_t>*& strings, int32_t& num_str,
196  int32_t& max_string_len);
197  virtual void get_string_list(
198  SGString<uint16_t>*& strings, int32_t& num_str,
199  int32_t& max_string_len);
200  virtual void get_string_list(
201  SGString<int64_t>*& strings, int32_t& num_str,
202  int32_t& max_string_len);
203  virtual void get_string_list(
204  SGString<uint64_t>*& strings, int32_t& num_str,
205  int32_t& max_string_len);
206  virtual void get_string_list(
207  SGString<float32_t>*& strings, int32_t& num_str,
208  int32_t& max_string_len);
209  virtual void get_string_list(
210  SGString<float64_t>*& strings, int32_t& num_str,
211  int32_t& max_string_len);
212  virtual void get_string_list(
213  SGString<floatmax_t>*& strings, int32_t& num_str,
214  int32_t& max_string_len);
216 
224  virtual void set_vector(const int8_t* vector, int32_t len);
225  virtual void set_vector(const uint8_t* vector, int32_t len);
226  virtual void set_vector(const char* vector, int32_t len);
227  virtual void set_vector(const int32_t* vector, int32_t len);
228  virtual void set_vector(const uint32_t* vector, int32_t len);
229  virtual void set_vector(const float32_t* vector, int32_t len);
230  virtual void set_vector(const float64_t* vector, int32_t len);
231  virtual void set_vector(const floatmax_t* vector, int32_t len);
232  virtual void set_vector(const int16_t* vector, int32_t len);
233  virtual void set_vector(const uint16_t* vector, int32_t len);
234  virtual void set_vector(const int64_t* vector, int32_t len);
235  virtual void set_vector(const uint64_t* vector, int32_t len);
237 
238 
246  virtual void set_matrix(
247  const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
248  virtual void set_matrix(
249  const int8_t* matrix, int32_t num_feat, int32_t num_vec);
250  virtual void set_matrix(
251  const char* matrix, int32_t num_feat, int32_t num_vec);
252  virtual void set_matrix(
253  const int32_t* matrix, int32_t num_feat, int32_t num_vec);
254  virtual void set_matrix(
255  const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
256  virtual void set_matrix(
257  const int64_t* matrix, int32_t num_feat, int32_t num_vec);
258  virtual void set_matrix(
259  const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
260  virtual void set_matrix(
261  const float32_t* matrix, int32_t num_feat, int32_t num_vec);
262  virtual void set_matrix(
263  const float64_t* matrix, int32_t num_feat, int32_t num_vec);
264  virtual void set_matrix(
265  const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
266  virtual void set_matrix(
267  const int16_t* matrix, int32_t num_feat, int32_t num_vec);
268  virtual void set_matrix(
269  const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
271 
279  virtual void set_ndarray(
280  const uint8_t* array, int32_t* dims, int32_t num_dims);
281  virtual void set_ndarray(
282  const char* array, int32_t* dims, int32_t num_dims);
283  virtual void set_ndarray(
284  const int32_t* array, int32_t* dims, int32_t num_dims);
285  virtual void set_ndarray(
286  const float32_t* array, int32_t* dims, int32_t num_dims);
287  virtual void set_ndarray(
288  const float64_t* array, int32_t* dims, int32_t num_dims);
289  virtual void set_ndarray(
290  const int16_t* array, int32_t* dims, int32_t num_dims);
291  virtual void set_ndarray(
292  const uint16_t* array, int32_t* dims, int32_t num_dims);
294 
302  virtual void set_sparse_matrix(
303  const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
304  virtual void set_sparse_matrix(
305  const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
306  virtual void set_sparse_matrix(
307  const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
308  virtual void set_sparse_matrix(
309  const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
310  virtual void set_sparse_matrix(
311  const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
312  virtual void set_sparse_matrix(
313  const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
314  virtual void set_sparse_matrix(
315  const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
316  virtual void set_sparse_matrix(
317  const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
318  virtual void set_sparse_matrix(
319  const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
320  virtual void set_sparse_matrix(
321  const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
322  virtual void set_sparse_matrix(
323  const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
324  virtual void set_sparse_matrix(
325  const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
326  virtual void set_sparse_matrix(
327  const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
329 
330 
339  virtual void set_string_list(
340  const SGString<uint8_t>* strings, int32_t num_str);
341  virtual void set_string_list(
342  const SGString<int8_t>* strings, int32_t num_str);
343  virtual void set_string_list(
344  const SGString<char>* strings, int32_t num_str);
345  virtual void set_string_list(
346  const SGString<int32_t>* strings, int32_t num_str);
347  virtual void set_string_list(
348  const SGString<uint32_t>* strings, int32_t num_str);
349  virtual void set_string_list(
350  const SGString<int16_t>* strings, int32_t num_str);
351  virtual void set_string_list(
352  const SGString<uint16_t>* strings, int32_t num_str);
353  virtual void set_string_list(
354  const SGString<int64_t>* strings, int32_t num_str);
355  virtual void set_string_list(
356  const SGString<uint64_t>* strings, int32_t num_str);
357  virtual void set_string_list(
358  const SGString<float32_t>* strings, int32_t num_str);
359  virtual void set_string_list(
360  const SGString<float64_t>* strings, int32_t num_str);
361  virtual void set_string_list(
362  const SGString<floatmax_t>* strings, int32_t num_str);
364 #endif // #ifndef SWIG
365 
367  virtual const char* get_name() const { return "BinaryFile"; }
368 
369 protected:
374  void read_header(TSGDataType* dest);
375 
380  void write_header(const TSGDataType* datatype);
381 
387  int32_t parse_first_header(TSGDataType& type);
388 
394  int32_t parse_next_header(TSGDataType& type);
395 
396 private:
403  template <class DT> DT* load_data(DT* target, int64_t& num)
404  {
406  return f.load(target, num);
407  }
408 
415  template <class DT> bool save_data(DT* src, int64_t num)
416  {
417  CSimpleFile<DT> f(filename, file);
418  return f.save(src, num);
419  }
420 };
421 }
422 #endif //__BINARY_FILE_H__

SHOGUN Machine Learning Toolbox - Documentation