SHOGUN  3.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ProtobufFile.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) 2013 Evgeniy Andreev (gsomix)
8  */
9 
10 #ifdef HAVE_PROTOBUF
11 
12 #ifndef __PROTOBUFFILE_H__
13 #define __PROTOBUFFILE_H__
14 
15 #include <shogun/lib/config.h>
16 
17 #include <shogun/io/File.h>
18 
19 // a hack to avoid clashes with apple's ConditionalMacros.h
20 #ifdef __APPLE__
21  #ifdef TYPE_BOOL
22  #define ___APPLE_TYPE_BOOL TYPE_BOOL
23  #undef TYPE_BOOL
24  #endif
25 #endif
26 
27 #include <google/protobuf/message.h>
28 
29 #ifdef __APPLE__
30  #ifdef ___APPLE_TYPE_BOOL
31  #define TYPE_BOOL ___APPLE_TYPE_BOOL
32  #undef ___APPLE_TYPE_BOOL
33  #endif
34 #endif
35 
36 #include <shogun/io/protobuf/ShogunVersion.pb.h>
37 #include <shogun/io/protobuf/Headers.pb.h>
38 #include <shogun/io/protobuf/Chunks.pb.h>
39 
40 namespace shogun
41 {
42 
55 class CProtobufFile : public CFile
56 {
57 public:
59  CProtobufFile();
60 
66  CProtobufFile(FILE* f, const char* name=NULL);
67 
74  CProtobufFile(const char* fname, char rw='r', const char* name=NULL);
75 
77  virtual ~CProtobufFile();
78 
79 #ifndef SWIG // SWIG should skip this
80 
87  virtual void get_vector(int8_t*& vector, int32_t& len);
88  virtual void get_vector(uint8_t*& vector, int32_t& len);
89  virtual void get_vector(char*& vector, int32_t& len);
90  virtual void get_vector(int32_t*& vector, int32_t& len);
91  virtual void get_vector(uint32_t*& vector, int32_t& len);
92  virtual void get_vector(float64_t*& vector, int32_t& len);
93  virtual void get_vector(float32_t*& vector, int32_t& len);
94  virtual void get_vector(floatmax_t*& vector, int32_t& len);
95  virtual void get_vector(int16_t*& vector, int32_t& len);
96  virtual void get_vector(uint16_t*& vector, int32_t& len);
97  virtual void get_vector(int64_t*& vector, int32_t& len);
98  virtual void get_vector(uint64_t*& vector, int32_t& len);
100 
109  virtual void get_matrix(
110  uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
111  virtual void get_matrix(
112  int8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
113  virtual void get_matrix(
114  char*& matrix, int32_t& num_feat, int32_t& num_vec);
115  virtual void get_matrix(
116  int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
117  virtual void get_matrix(
118  uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
119  virtual void get_matrix(
120  int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
121  virtual void get_matrix(
122  uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
123  virtual void get_matrix(
124  float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
125  virtual void get_matrix(
126  float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
127  virtual void get_matrix(
128  floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
129  virtual void get_matrix(
130  int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
131  virtual void get_matrix(
132  uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
134 
143  virtual void get_ndarray(
144  uint8_t*& array, int32_t*& dims, int32_t& num_dims);
145  virtual void get_ndarray(
146  char*& array, int32_t*& dims, int32_t& num_dims);
147  virtual void get_ndarray(
148  int32_t*& array, int32_t*& dims, int32_t& num_dims);
149  virtual void get_ndarray(
150  float32_t*& array, int32_t*& dims, int32_t& num_dims);
151  virtual void get_ndarray(
152  float64_t*& array, int32_t*& dims, int32_t& num_dims);
153  virtual void get_ndarray(
154  int16_t*& array, int32_t*& dims, int32_t& num_dims);
155  virtual void get_ndarray(
156  uint16_t*& array, int32_t*& dims, int32_t& num_dims);
158 
167  virtual void get_sparse_matrix(
168  SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
169  virtual void get_sparse_matrix(
170  SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
171  virtual void get_sparse_matrix(
172  SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
173  virtual void get_sparse_matrix(
174  SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
175  virtual void get_sparse_matrix(
176  SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
177  virtual void get_sparse_matrix(
178  SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
179  virtual void get_sparse_matrix(
180  SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
181  virtual void get_sparse_matrix(
182  SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
183  virtual void get_sparse_matrix(
184  SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
185  virtual void get_sparse_matrix(
186  SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
187  virtual void get_sparse_matrix(
188  SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
189  virtual void get_sparse_matrix(
190  SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
191  virtual void get_sparse_matrix(
192  SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
194 
203  virtual void get_string_list(
204  SGString<uint8_t>*& strings, int32_t& num_str,
205  int32_t& max_string_len);
206  virtual void get_string_list(
207  SGString<int8_t>*& strings, int32_t& num_str,
208  int32_t& max_string_len);
209  virtual void get_string_list(
210  SGString<char>*& strings, int32_t& num_str,
211  int32_t& max_string_len);
212  virtual void get_string_list(
213  SGString<int32_t>*& strings, int32_t& num_str,
214  int32_t& max_string_len);
215  virtual void get_string_list(
216  SGString<uint32_t>*& strings, int32_t& num_str,
217  int32_t& max_string_len);
218  virtual void get_string_list(
219  SGString<int16_t>*& strings, int32_t& num_str,
220  int32_t& max_string_len);
221  virtual void get_string_list(
222  SGString<uint16_t>*& strings, int32_t& num_str,
223  int32_t& max_string_len);
224  virtual void get_string_list(
225  SGString<int64_t>*& strings, int32_t& num_str,
226  int32_t& max_string_len);
227  virtual void get_string_list(
228  SGString<uint64_t>*& strings, int32_t& num_str,
229  int32_t& max_string_len);
230  virtual void get_string_list(
231  SGString<float32_t>*& strings, int32_t& num_str,
232  int32_t& max_string_len);
233  virtual void get_string_list(
234  SGString<float64_t>*& strings, int32_t& num_str,
235  int32_t& max_string_len);
236  virtual void get_string_list(
237  SGString<floatmax_t>*& strings, int32_t& num_str,
238  int32_t& max_string_len);
240 
242  /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/
243 
251  virtual void set_vector(const int8_t* vector, int32_t len);
252  virtual void set_vector(const uint8_t* vector, int32_t len);
253  virtual void set_vector(const char* vector, int32_t len);
254  virtual void set_vector(const int32_t* vector, int32_t len);
255  virtual void set_vector(const uint32_t* vector, int32_t len);
256  virtual void set_vector(const float32_t* vector, int32_t len);
257  virtual void set_vector(const float64_t* vector, int32_t len);
258  virtual void set_vector(const floatmax_t* vector, int32_t len);
259  virtual void set_vector(const int16_t* vector, int32_t len);
260  virtual void set_vector(const uint16_t* vector, int32_t len);
261  virtual void set_vector(const int64_t* vector, int32_t len);
262  virtual void set_vector(const uint64_t* vector, int32_t len);
264 
272  virtual void set_matrix(
273  const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
274  virtual void set_matrix(
275  const int8_t* matrix, int32_t num_feat, int32_t num_vec);
276  virtual void set_matrix(
277  const char* matrix, int32_t num_feat, int32_t num_vec);
278  virtual void set_matrix(
279  const int32_t* matrix, int32_t num_feat, int32_t num_vec);
280  virtual void set_matrix(
281  const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
282  virtual void set_matrix(
283  const int64_t* matrix, int32_t num_feat, int32_t num_vec);
284  virtual void set_matrix(
285  const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
286  virtual void set_matrix(
287  const float32_t* matrix, int32_t num_feat, int32_t num_vec);
288  virtual void set_matrix(
289  const float64_t* matrix, int32_t num_feat, int32_t num_vec);
290  virtual void set_matrix(
291  const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
292  virtual void set_matrix(
293  const int16_t* matrix, int32_t num_feat, int32_t num_vec);
294  virtual void set_matrix(
295  const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
297 
305  virtual void set_sparse_matrix(
306  const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
307  virtual void set_sparse_matrix(
308  const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
309  virtual void set_sparse_matrix(
310  const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
311  virtual void set_sparse_matrix(
312  const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
313  virtual void set_sparse_matrix(
314  const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
315  virtual void set_sparse_matrix(
316  const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
317  virtual void set_sparse_matrix(
318  const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
319  virtual void set_sparse_matrix(
320  const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
321  virtual void set_sparse_matrix(
322  const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
323  virtual void set_sparse_matrix(
324  const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
325  virtual void set_sparse_matrix(
326  const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
327  virtual void set_sparse_matrix(
328  const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
329  virtual void set_sparse_matrix(
330  const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
332 
341  virtual void set_string_list(
342  const SGString<uint8_t>* strings, int32_t num_str);
343  virtual void set_string_list(
344  const SGString<int8_t>* strings, int32_t num_str);
345  virtual void set_string_list(
346  const SGString<char>* strings, int32_t num_str);
347  virtual void set_string_list(
348  const SGString<int32_t>* strings, int32_t num_str);
349  virtual void set_string_list(
350  const SGString<uint32_t>* strings, int32_t num_str);
351  virtual void set_string_list(
352  const SGString<int16_t>* strings, int32_t num_str);
353  virtual void set_string_list(
354  const SGString<uint16_t>* strings, int32_t num_str);
355  virtual void set_string_list(
356  const SGString<int64_t>* strings, int32_t num_str);
357  virtual void set_string_list(
358  const SGString<uint64_t>* strings, int32_t num_str);
359  virtual void set_string_list(
360  const SGString<float32_t>* strings, int32_t num_str);
361  virtual void set_string_list(
362  const SGString<float64_t>* strings, int32_t num_str);
363  virtual void set_string_list(
364  const SGString<floatmax_t>* strings, int32_t num_str);
366 #endif // #ifndef SWIG // SWIG should skip this
367 
368  virtual const char* get_name() const { return "ProtobufFile"; }
369 
370 private:
372  void init();
373 
375  void write_big_endian_uint(uint32_t number, uint8_t* array, uint32_t size);
376 
378  uint32_t read_big_endian_uint(uint8_t* array, uint32_t size);
379 
381  int32_t compute_num_messages(uint64_t len, int32_t sizeof_type) const;
382 
384  void read_and_validate_global_header(ShogunVersion_SGDataType type);
385 
387  void write_global_header(ShogunVersion_SGDataType type);
388 
391  VectorHeader read_vector_header();
392  MatrixHeader read_matrix_header();
393  SparseMatrixHeader read_sparse_matrix_header();
394  StringListHeader read_string_list_header();
396 
399  void write_vector_header(int32_t len, int32_t num_messages);
400  void write_matrix_header(int32_t num_feat, int32_t num_vec, int32_t num_messages);
402 
407  void write_sparse_matrix_header(
408  const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
409  void write_sparse_matrix_header(
410  const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
411  void write_sparse_matrix_header(
412  const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
413  void write_sparse_matrix_header(
414  const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
415  void write_sparse_matrix_header(
416  const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
417  void write_sparse_matrix_header(
418  const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
419  void write_sparse_matrix_header(
420  const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
421  void write_sparse_matrix_header(
422  const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
423  void write_sparse_matrix_header(
424  const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
425  void write_sparse_matrix_header(
426  const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
427  void write_sparse_matrix_header(
428  const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
429  void write_sparse_matrix_header(
430  const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
431  void write_sparse_matrix_header(
432  const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
434 
439  void write_string_list_header(
440  const SGString<uint8_t>* strings, int32_t num_str);
441  void write_string_list_header(
442  const SGString<int8_t>* strings, int32_t num_str);
443  void write_string_list_header(
444  const SGString<char>* strings, int32_t num_str);
445  void write_string_list_header(
446  const SGString<int32_t>* strings, int32_t num_str);
447  void write_string_list_header(
448  const SGString<uint32_t>* strings, int32_t num_str);
449  void write_string_list_header(
450  const SGString<float64_t>* strings, int32_t num_str);
451  void write_string_list_header(
452  const SGString<float32_t>* strings, int32_t num_str);
453  void write_string_list_header(
454  const SGString<floatmax_t>* strings, int32_t num_str);
455  void write_string_list_header(
456  const SGString<int16_t>* strings, int32_t num_str);
457  void write_string_list_header(
458  const SGString<uint16_t>* strings, int32_t num_str);
459  void write_string_list_header(
460  const SGString<int64_t>* strings, int32_t num_str);
461  void write_string_list_header(
462  const SGString<uint64_t>* strings, int32_t num_str);
464 
466  void read_message(google::protobuf::Message& message);
467 
469  void write_message(const google::protobuf::Message& message);
470 
476  void read_memory_block(uint8_t*& vector, uint64_t len, int32_t num_messages);
477  void read_memory_block(int8_t*& vector, uint64_t len, int32_t num_messages);
478  void read_memory_block(char*& vector, uint64_t len, int32_t num_messages);
479  void read_memory_block(int32_t*& vector, uint64_t len, int32_t num_messages);
480  void read_memory_block(uint32_t*& vector, uint64_t len, int32_t num_messages);
481  void read_memory_block(float64_t*& vector, uint64_t len, int32_t num_messages);
482  void read_memory_block(float32_t*& vector, uint64_t len, int32_t num_messages);
483  void read_memory_block(floatmax_t*& vector, uint64_t len, int32_t num_messages);
484  void read_memory_block(int16_t*& vector, uint64_t len, int32_t num_messages);
485  void read_memory_block(uint16_t*& vector, uint64_t len, int32_t num_messages);
486  void read_memory_block(int64_t*& vector, uint64_t len, int32_t num_messages);
487  void read_memory_block(uint64_t*& vector, uint64_t len, int32_t num_messages);
489 
495  void write_memory_block(const int8_t* vector, uint64_t len, int32_t num_messages);
496  void write_memory_block(const uint8_t* vector, uint64_t len, int32_t num_messages);
497  void write_memory_block(const char* vector, uint64_t len, int32_t num_messages);
498  void write_memory_block(const int32_t* vector, uint64_t len, int32_t num_messages);
499  void write_memory_block(const uint32_t* vector, uint64_t len, int32_t num_messages);
500  void write_memory_block(const float32_t* vector, uint64_t len, int32_t num_messages);
501  void write_memory_block(const float64_t* vector, uint64_t len, int32_t num_messages);
502  void write_memory_block(const floatmax_t* vector, uint64_t len, int32_t num_messages);
503  void write_memory_block(const int16_t* vector, uint64_t len, int32_t num_messages);
504  void write_memory_block(const uint16_t* vector, uint64_t len, int32_t num_messages);
505  void write_memory_block(const int64_t* vector, uint64_t len, int32_t num_messages);
506  void write_memory_block(const uint64_t* vector, uint64_t len, int32_t num_messages);
508 
510  void read_sparse_matrix(SGSparseVector<bool>*& matrix,
511  const SparseMatrixHeader& data_header);
512  void read_sparse_matrix(SGSparseVector<uint8_t>*& matrix,
513  const SparseMatrixHeader& data_header);
514  void read_sparse_matrix(SGSparseVector<int8_t>*& matrix,
515  const SparseMatrixHeader& data_header);
516  void read_sparse_matrix(SGSparseVector<char>*& matrix,
517  const SparseMatrixHeader& data_header);
518  void read_sparse_matrix(SGSparseVector<int32_t>*& matrix,
519  const SparseMatrixHeader& data_header);
520  void read_sparse_matrix(SGSparseVector<uint32_t>*& matrix,
521  const SparseMatrixHeader& data_header);
522  void read_sparse_matrix(SGSparseVector<int16_t>*& matrix,
523  const SparseMatrixHeader& data_header);
524  void read_sparse_matrix(SGSparseVector<uint16_t>*& matrix,
525  const SparseMatrixHeader& data_header);
526  void read_sparse_matrix(SGSparseVector<int64_t>*& matrix,
527  const SparseMatrixHeader& data_header);
528  void read_sparse_matrix(SGSparseVector<uint64_t>*& matrix,
529  const SparseMatrixHeader& data_header);
530  void read_sparse_matrix(SGSparseVector<float32_t>*& matrix,
531  const SparseMatrixHeader& data_header);
532  void read_sparse_matrix(SGSparseVector<float64_t>*& matrix,
533  const SparseMatrixHeader& data_header);
534  void read_sparse_matrix(SGSparseVector<floatmax_t>*& matrix,
535  const SparseMatrixHeader& data_header);
537 
541  void write_sparse_matrix(
542  const SGSparseVector<bool>* matrix, int32_t num_vec);
543  void write_sparse_matrix(
544  const SGSparseVector<uint8_t>* matrix, int32_t num_vec);
545  void write_sparse_matrix(
546  const SGSparseVector<int8_t>* matrix, int32_t num_vec);
547  void write_sparse_matrix(
548  const SGSparseVector<char>* matrix, int32_t num_vec);
549  void write_sparse_matrix(
550  const SGSparseVector<int32_t>* matrix, int32_t num_vec);
551  void write_sparse_matrix(
552  const SGSparseVector<uint32_t>* matrix, int32_t num_vec);
553  void write_sparse_matrix(
554  const SGSparseVector<int16_t>* matrix, int32_t num_vec);
555  void write_sparse_matrix(
556  const SGSparseVector<uint16_t>* matrix, int32_t num_vec);
557  void write_sparse_matrix(
558  const SGSparseVector<int64_t>* matrix, int32_t num_vec);
559  void write_sparse_matrix(
560  const SGSparseVector<uint64_t>* matrix, int32_t num_vec);
561  void write_sparse_matrix(
562  const SGSparseVector<float32_t>* matrix, int32_t num_vec);
563  void write_sparse_matrix(
564  const SGSparseVector<float64_t>* matrix, int32_t num_vec);
565  void write_sparse_matrix(
566  const SGSparseVector<floatmax_t>* matrix, int32_t num_vec);
568 
570  void read_string_list(SGString<uint8_t>*& strings,
571  const StringListHeader& data_header);
572  void read_string_list(SGString<int8_t>*& strings,
573  const StringListHeader& data_header);
574  void read_string_list(SGString<char>*& strings,
575  const StringListHeader& data_header);
576  void read_string_list(SGString<int32_t>*& strings,
577  const StringListHeader& data_header);
578  void read_string_list(SGString<uint32_t>*& strings,
579  const StringListHeader& data_header);
580  void read_string_list(SGString<int16_t>*& strings,
581  const StringListHeader& data_header);
582  void read_string_list(SGString<uint16_t>*& strings,
583  const StringListHeader& data_header);
584  void read_string_list(SGString<int64_t>*& strings,
585  const StringListHeader& data_header);
586  void read_string_list(SGString<uint64_t>*& strings,
587  const StringListHeader& data_header);
588  void read_string_list(SGString<float32_t>*& strings,
589  const StringListHeader& data_header);
590  void read_string_list(SGString<float64_t>*& strings,
591  const StringListHeader& data_header);
592  void read_string_list(SGString<floatmax_t>*& strings,
593  const StringListHeader& data_header);
595 
599  void write_string_list(
600  const SGString<uint8_t>* strings, int32_t num_str);
601  void write_string_list(
602  const SGString<int8_t>* strings, int32_t num_str);
603  void write_string_list(
604  const SGString<char>* strings, int32_t num_str);
605  void write_string_list(
606  const SGString<int32_t>* strings, int32_t num_str);
607  void write_string_list(
608  const SGString<uint32_t>* strings, int32_t num_str);
609  void write_string_list(
610  const SGString<int16_t>* strings, int32_t num_str);
611  void write_string_list(
612  const SGString<uint16_t>* strings, int32_t num_str);
613  void write_string_list(
614  const SGString<int64_t>* strings, int32_t num_str);
615  void write_string_list(
616  const SGString<uint64_t>* strings, int32_t num_str);
617  void write_string_list(
618  const SGString<float32_t>* strings, int32_t num_str);
619  void write_string_list(
620  const SGString<float64_t>* strings, int32_t num_str);
621  void write_string_list(
622  const SGString<floatmax_t>* strings, int32_t num_str);
624 
625 private:
627  int32_t version;
628 
630  int32_t message_size;
631 
633  uint8_t* buffer;
634 
636  uint8_t uint_buffer[4];
637 };
638 
639 }
640 
641 #endif
643 #endif

SHOGUN Machine Learning Toolbox - Documentation