12 #ifndef __PROTOBUFFILE_H__
13 #define __PROTOBUFFILE_H__
16 #include <shogun/io/protobuf/ShogunVersion.pb.h>
17 #include <shogun/io/protobuf/Headers.pb.h>
18 #include <shogun/io/protobuf/Chunks.pb.h>
20 #include <google/protobuf/message.h>
35 class CProtobufFile :
public CFile
46 CProtobufFile(FILE* f,
const char* name=NULL);
54 CProtobufFile(
const char* fname,
char rw=
'r',
const char* name=NULL);
57 virtual ~CProtobufFile();
66 virtual void get_vector(int8_t*& vector, int32_t& len);
67 virtual void get_vector(uint8_t*& vector, int32_t& len);
68 virtual void get_vector(
char*& vector, int32_t& len);
69 virtual void get_vector(int32_t*& vector, int32_t& len);
70 virtual void get_vector(uint32_t*& vector, int32_t& len);
71 virtual void get_vector(
float64_t*& vector, int32_t& len);
72 virtual void get_vector(
float32_t*& vector, int32_t& len);
73 virtual void get_vector(
floatmax_t*& vector, int32_t& len);
74 virtual void get_vector(int16_t*& vector, int32_t& len);
75 virtual void get_vector(uint16_t*& vector, int32_t& len);
76 virtual void get_vector(int64_t*& vector, int32_t& len);
77 virtual void get_vector(uint64_t*& vector, int32_t& len);
88 virtual void get_matrix(
89 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
90 virtual void get_matrix(
91 int8_t*& matrix, int32_t& num_feat, int32_t& num_vec);
92 virtual void get_matrix(
93 char*& matrix, int32_t& num_feat, int32_t& num_vec);
94 virtual void get_matrix(
95 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
96 virtual void get_matrix(
97 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
98 virtual void get_matrix(
99 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
100 virtual void get_matrix(
101 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
102 virtual void get_matrix(
103 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec);
104 virtual void get_matrix(
105 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec);
106 virtual void get_matrix(
107 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec);
108 virtual void get_matrix(
109 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
110 virtual void get_matrix(
111 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec);
122 virtual void get_ndarray(
123 uint8_t*& array, int32_t*& dims, int32_t& num_dims);
124 virtual void get_ndarray(
125 char*& array, int32_t*& dims, int32_t& num_dims);
126 virtual void get_ndarray(
127 int32_t*& array, int32_t*& dims, int32_t& num_dims);
128 virtual void get_ndarray(
129 float32_t*& array, int32_t*& dims, int32_t& num_dims);
130 virtual void get_ndarray(
131 float64_t*& array, int32_t*& dims, int32_t& num_dims);
132 virtual void get_ndarray(
133 int16_t*& array, int32_t*& dims, int32_t& num_dims);
134 virtual void get_ndarray(
135 uint16_t*& array, int32_t*& dims, int32_t& num_dims);
146 virtual void get_sparse_matrix(
147 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec);
148 virtual void get_sparse_matrix(
149 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
150 virtual void get_sparse_matrix(
151 SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
152 virtual void get_sparse_matrix(
153 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec);
154 virtual void get_sparse_matrix(
155 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
156 virtual void get_sparse_matrix(
157 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
158 virtual void get_sparse_matrix(
159 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
160 virtual void get_sparse_matrix(
161 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
162 virtual void get_sparse_matrix(
163 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
164 virtual void get_sparse_matrix(
165 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
166 virtual void get_sparse_matrix(
167 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
168 virtual void get_sparse_matrix(
169 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
170 virtual void get_sparse_matrix(
171 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec);
182 virtual void get_string_list(
183 SGString<uint8_t>*& strings, int32_t& num_str,
184 int32_t& max_string_len);
185 virtual void get_string_list(
186 SGString<int8_t>*& strings, int32_t& num_str,
187 int32_t& max_string_len);
188 virtual void get_string_list(
189 SGString<char>*& strings, int32_t& num_str,
190 int32_t& max_string_len);
191 virtual void get_string_list(
192 SGString<int32_t>*& strings, int32_t& num_str,
193 int32_t& max_string_len);
194 virtual void get_string_list(
195 SGString<uint32_t>*& strings, int32_t& num_str,
196 int32_t& max_string_len);
197 virtual void get_string_list(
198 SGString<int16_t>*& strings, int32_t& num_str,
199 int32_t& max_string_len);
200 virtual void get_string_list(
201 SGString<uint16_t>*& strings, int32_t& num_str,
202 int32_t& max_string_len);
203 virtual void get_string_list(
204 SGString<int64_t>*& strings, int32_t& num_str,
205 int32_t& max_string_len);
206 virtual void get_string_list(
207 SGString<uint64_t>*& strings, int32_t& num_str,
208 int32_t& max_string_len);
209 virtual void get_string_list(
210 SGString<float32_t>*& strings, int32_t& num_str,
211 int32_t& max_string_len);
212 virtual void get_string_list(
213 SGString<float64_t>*& strings, int32_t& num_str,
214 int32_t& max_string_len);
215 virtual void get_string_list(
216 SGString<floatmax_t>*& strings, int32_t& num_str,
217 int32_t& max_string_len);
230 virtual void set_vector(
const int8_t* vector, int32_t len);
231 virtual void set_vector(
const uint8_t* vector, int32_t len);
232 virtual void set_vector(
const char* vector, int32_t len);
233 virtual void set_vector(
const int32_t* vector, int32_t len);
234 virtual void set_vector(
const uint32_t* vector, int32_t len);
235 virtual void set_vector(
const float32_t* vector, int32_t len);
236 virtual void set_vector(
const float64_t* vector, int32_t len);
237 virtual void set_vector(
const floatmax_t* vector, int32_t len);
238 virtual void set_vector(
const int16_t* vector, int32_t len);
239 virtual void set_vector(
const uint16_t* vector, int32_t len);
240 virtual void set_vector(
const int64_t* vector, int32_t len);
241 virtual void set_vector(
const uint64_t* vector, int32_t len);
251 virtual void set_matrix(
252 const uint8_t* matrix, int32_t num_feat, int32_t num_vec);
253 virtual void set_matrix(
254 const int8_t* matrix, int32_t num_feat, int32_t num_vec);
255 virtual void set_matrix(
256 const char* matrix, int32_t num_feat, int32_t num_vec);
257 virtual void set_matrix(
258 const int32_t* matrix, int32_t num_feat, int32_t num_vec);
259 virtual void set_matrix(
260 const uint32_t* matrix, int32_t num_feat, int32_t num_vec);
261 virtual void set_matrix(
262 const int64_t* matrix, int32_t num_feat, int32_t num_vec);
263 virtual void set_matrix(
264 const uint64_t* matrix, int32_t num_feat, int32_t num_vec);
265 virtual void set_matrix(
266 const float32_t* matrix, int32_t num_feat, int32_t num_vec);
267 virtual void set_matrix(
268 const float64_t* matrix, int32_t num_feat, int32_t num_vec);
269 virtual void set_matrix(
270 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec);
271 virtual void set_matrix(
272 const int16_t* matrix, int32_t num_feat, int32_t num_vec);
273 virtual void set_matrix(
274 const uint16_t* matrix, int32_t num_feat, int32_t num_vec);
284 virtual void set_sparse_matrix(
285 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
286 virtual void set_sparse_matrix(
287 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
288 virtual void set_sparse_matrix(
289 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
290 virtual void set_sparse_matrix(
291 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
292 virtual void set_sparse_matrix(
293 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
294 virtual void set_sparse_matrix(
295 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
296 virtual void set_sparse_matrix(
297 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
298 virtual void set_sparse_matrix(
299 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
300 virtual void set_sparse_matrix(
301 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
302 virtual void set_sparse_matrix(
303 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
304 virtual void set_sparse_matrix(
305 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
306 virtual void set_sparse_matrix(
307 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
308 virtual void set_sparse_matrix(
309 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
320 virtual void set_string_list(
321 const SGString<uint8_t>* strings, int32_t num_str);
322 virtual void set_string_list(
323 const SGString<int8_t>* strings, int32_t num_str);
324 virtual void set_string_list(
325 const SGString<char>* strings, int32_t num_str);
326 virtual void set_string_list(
327 const SGString<int32_t>* strings, int32_t num_str);
328 virtual void set_string_list(
329 const SGString<uint32_t>* strings, int32_t num_str);
330 virtual void set_string_list(
331 const SGString<int16_t>* strings, int32_t num_str);
332 virtual void set_string_list(
333 const SGString<uint16_t>* strings, int32_t num_str);
334 virtual void set_string_list(
335 const SGString<int64_t>* strings, int32_t num_str);
336 virtual void set_string_list(
337 const SGString<uint64_t>* strings, int32_t num_str);
338 virtual void set_string_list(
339 const SGString<float32_t>* strings, int32_t num_str);
340 virtual void set_string_list(
341 const SGString<float64_t>* strings, int32_t num_str);
342 virtual void set_string_list(
343 const SGString<floatmax_t>* strings, int32_t num_str);
346 virtual const char* get_name()
const {
return "ProtobufFile"; }
353 void write_big_endian_uint(uint32_t number, uint8_t* array, uint32_t size);
356 uint32_t read_big_endian_uint(uint8_t* array, uint32_t size);
359 int32_t compute_num_messages(uint64_t len, int32_t sizeof_type)
const;
362 void read_and_validate_global_header(ShogunVersion_SGDataType type);
365 void write_global_header(ShogunVersion_SGDataType type);
369 VectorHeader read_vector_header();
370 MatrixHeader read_matrix_header();
371 SparseMatrixHeader read_sparse_matrix_header();
372 StringListHeader read_string_list_header();
377 void write_vector_header(int32_t len, int32_t num_messages);
378 void write_matrix_header(int32_t num_feat, int32_t num_vec, int32_t num_messages);
385 void write_sparse_matrix_header(
386 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec);
387 void write_sparse_matrix_header(
388 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec);
389 void write_sparse_matrix_header(
390 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec);
391 void write_sparse_matrix_header(
392 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec);
393 void write_sparse_matrix_header(
394 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec);
395 void write_sparse_matrix_header(
396 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec);
397 void write_sparse_matrix_header(
398 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec);
399 void write_sparse_matrix_header(
400 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec);
401 void write_sparse_matrix_header(
402 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec);
403 void write_sparse_matrix_header(
404 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec);
405 void write_sparse_matrix_header(
406 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec);
407 void write_sparse_matrix_header(
408 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec);
409 void write_sparse_matrix_header(
410 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec);
417 void write_string_list_header(
418 const SGString<uint8_t>* strings, int32_t num_str);
419 void write_string_list_header(
420 const SGString<int8_t>* strings, int32_t num_str);
421 void write_string_list_header(
422 const SGString<char>* strings, int32_t num_str);
423 void write_string_list_header(
424 const SGString<int32_t>* strings, int32_t num_str);
425 void write_string_list_header(
426 const SGString<uint32_t>* strings, int32_t num_str);
427 void write_string_list_header(
428 const SGString<float64_t>* strings, int32_t num_str);
429 void write_string_list_header(
430 const SGString<float32_t>* strings, int32_t num_str);
431 void write_string_list_header(
432 const SGString<floatmax_t>* strings, int32_t num_str);
433 void write_string_list_header(
434 const SGString<int16_t>* strings, int32_t num_str);
435 void write_string_list_header(
436 const SGString<uint16_t>* strings, int32_t num_str);
437 void write_string_list_header(
438 const SGString<int64_t>* strings, int32_t num_str);
439 void write_string_list_header(
440 const SGString<uint64_t>* strings, int32_t num_str);
444 void read_message(google::protobuf::Message& message);
447 void write_message(
const google::protobuf::Message& message);
454 void read_memory_block(uint8_t*& vector, uint64_t len, int32_t num_messages);
455 void read_memory_block(int8_t*& vector, uint64_t len, int32_t num_messages);
456 void read_memory_block(
char*& vector, uint64_t len, int32_t num_messages);
457 void read_memory_block(int32_t*& vector, uint64_t len, int32_t num_messages);
458 void read_memory_block(uint32_t*& vector, uint64_t len, int32_t num_messages);
459 void read_memory_block(
float64_t*& vector, uint64_t len, int32_t num_messages);
460 void read_memory_block(
float32_t*& vector, uint64_t len, int32_t num_messages);
461 void read_memory_block(
floatmax_t*& vector, uint64_t len, int32_t num_messages);
462 void read_memory_block(int16_t*& vector, uint64_t len, int32_t num_messages);
463 void read_memory_block(uint16_t*& vector, uint64_t len, int32_t num_messages);
464 void read_memory_block(int64_t*& vector, uint64_t len, int32_t num_messages);
465 void read_memory_block(uint64_t*& vector, uint64_t len, int32_t num_messages);
473 void write_memory_block(
const int8_t* vector, uint64_t len, int32_t num_messages);
474 void write_memory_block(
const uint8_t* vector, uint64_t len, int32_t num_messages);
475 void write_memory_block(
const char* vector, uint64_t len, int32_t num_messages);
476 void write_memory_block(
const int32_t* vector, uint64_t len, int32_t num_messages);
477 void write_memory_block(
const uint32_t* vector, uint64_t len, int32_t num_messages);
478 void write_memory_block(
const float32_t* vector, uint64_t len, int32_t num_messages);
479 void write_memory_block(
const float64_t* vector, uint64_t len, int32_t num_messages);
480 void write_memory_block(
const floatmax_t* vector, uint64_t len, int32_t num_messages);
481 void write_memory_block(
const int16_t* vector, uint64_t len, int32_t num_messages);
482 void write_memory_block(
const uint16_t* vector, uint64_t len, int32_t num_messages);
483 void write_memory_block(
const int64_t* vector, uint64_t len, int32_t num_messages);
484 void write_memory_block(
const uint64_t* vector, uint64_t len, int32_t num_messages);
488 void read_sparse_matrix(SGSparseVector<bool>*& matrix,
489 const SparseMatrixHeader& data_header);
490 void read_sparse_matrix(SGSparseVector<uint8_t>*& matrix,
491 const SparseMatrixHeader& data_header);
492 void read_sparse_matrix(SGSparseVector<int8_t>*& matrix,
493 const SparseMatrixHeader& data_header);
494 void read_sparse_matrix(SGSparseVector<char>*& matrix,
495 const SparseMatrixHeader& data_header);
496 void read_sparse_matrix(SGSparseVector<int32_t>*& matrix,
497 const SparseMatrixHeader& data_header);
498 void read_sparse_matrix(SGSparseVector<uint32_t>*& matrix,
499 const SparseMatrixHeader& data_header);
500 void read_sparse_matrix(SGSparseVector<int16_t>*& matrix,
501 const SparseMatrixHeader& data_header);
502 void read_sparse_matrix(SGSparseVector<uint16_t>*& matrix,
503 const SparseMatrixHeader& data_header);
504 void read_sparse_matrix(SGSparseVector<int64_t>*& matrix,
505 const SparseMatrixHeader& data_header);
506 void read_sparse_matrix(SGSparseVector<uint64_t>*& matrix,
507 const SparseMatrixHeader& data_header);
508 void read_sparse_matrix(SGSparseVector<float32_t>*& matrix,
509 const SparseMatrixHeader& data_header);
510 void read_sparse_matrix(SGSparseVector<float64_t>*& matrix,
511 const SparseMatrixHeader& data_header);
512 void read_sparse_matrix(SGSparseVector<floatmax_t>*& matrix,
513 const SparseMatrixHeader& data_header);
519 void write_sparse_matrix(
520 const SGSparseVector<bool>* matrix, int32_t num_vec);
521 void write_sparse_matrix(
522 const SGSparseVector<uint8_t>* matrix, int32_t num_vec);
523 void write_sparse_matrix(
524 const SGSparseVector<int8_t>* matrix, int32_t num_vec);
525 void write_sparse_matrix(
526 const SGSparseVector<char>* matrix, int32_t num_vec);
527 void write_sparse_matrix(
528 const SGSparseVector<int32_t>* matrix, int32_t num_vec);
529 void write_sparse_matrix(
530 const SGSparseVector<uint32_t>* matrix, int32_t num_vec);
531 void write_sparse_matrix(
532 const SGSparseVector<int16_t>* matrix, int32_t num_vec);
533 void write_sparse_matrix(
534 const SGSparseVector<uint16_t>* matrix, int32_t num_vec);
535 void write_sparse_matrix(
536 const SGSparseVector<int64_t>* matrix, int32_t num_vec);
537 void write_sparse_matrix(
538 const SGSparseVector<uint64_t>* matrix, int32_t num_vec);
539 void write_sparse_matrix(
540 const SGSparseVector<float32_t>* matrix, int32_t num_vec);
541 void write_sparse_matrix(
542 const SGSparseVector<float64_t>* matrix, int32_t num_vec);
543 void write_sparse_matrix(
544 const SGSparseVector<floatmax_t>* matrix, int32_t num_vec);
548 void read_string_list(SGString<uint8_t>*& strings,
549 const StringListHeader& data_header);
550 void read_string_list(SGString<int8_t>*& strings,
551 const StringListHeader& data_header);
552 void read_string_list(SGString<char>*& strings,
553 const StringListHeader& data_header);
554 void read_string_list(SGString<int32_t>*& strings,
555 const StringListHeader& data_header);
556 void read_string_list(SGString<uint32_t>*& strings,
557 const StringListHeader& data_header);
558 void read_string_list(SGString<int16_t>*& strings,
559 const StringListHeader& data_header);
560 void read_string_list(SGString<uint16_t>*& strings,
561 const StringListHeader& data_header);
562 void read_string_list(SGString<int64_t>*& strings,
563 const StringListHeader& data_header);
564 void read_string_list(SGString<uint64_t>*& strings,
565 const StringListHeader& data_header);
566 void read_string_list(SGString<float32_t>*& strings,
567 const StringListHeader& data_header);
568 void read_string_list(SGString<float64_t>*& strings,
569 const StringListHeader& data_header);
570 void read_string_list(SGString<floatmax_t>*& strings,
571 const StringListHeader& data_header);
577 void write_string_list(
578 const SGString<uint8_t>* strings, int32_t num_str);
579 void write_string_list(
580 const SGString<int8_t>* strings, int32_t num_str);
581 void write_string_list(
582 const SGString<char>* strings, int32_t num_str);
583 void write_string_list(
584 const SGString<int32_t>* strings, int32_t num_str);
585 void write_string_list(
586 const SGString<uint32_t>* strings, int32_t num_str);
587 void write_string_list(
588 const SGString<int16_t>* strings, int32_t num_str);
589 void write_string_list(
590 const SGString<uint16_t>* strings, int32_t num_str);
591 void write_string_list(
592 const SGString<int64_t>* strings, int32_t num_str);
593 void write_string_list(
594 const SGString<uint64_t>* strings, int32_t num_str);
595 void write_string_list(
596 const SGString<float32_t>* strings, int32_t num_str);
597 void write_string_list(
598 const SGString<float64_t>* strings, int32_t num_str);
599 void write_string_list(
600 const SGString<floatmax_t>* strings, int32_t num_str);
608 int32_t message_size;
614 uint8_t uint_buffer[4];