SHOGUN
v3.2.0
|
00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of the GNU General Public License as published by 00004 * the Free Software Foundation; either version 3 of the License, or 00005 * (at your option) any later version. 00006 * 00007 * Written (W) 2013 Evgeniy Andreev (gsomix) 00008 */ 00009 00010 #ifdef HAVE_PROTOBUF 00011 00012 #ifndef __PROTOBUFFILE_H__ 00013 #define __PROTOBUFFILE_H__ 00014 00015 #include <shogun/io/File.h> 00016 00017 #include <google/protobuf/message.h> 00018 00019 #include <shogun/io/protobuf/ShogunVersion.pb.h> 00020 #include <shogun/io/protobuf/Headers.pb.h> 00021 #include <shogun/io/protobuf/Chunks.pb.h> 00022 00023 namespace shogun 00024 { 00025 00038 class CProtobufFile : public CFile 00039 { 00040 public: 00042 CProtobufFile(); 00043 00049 CProtobufFile(FILE* f, const char* name=NULL); 00050 00057 CProtobufFile(const char* fname, char rw='r', const char* name=NULL); 00058 00060 virtual ~CProtobufFile(); 00061 00069 virtual void get_vector(int8_t*& vector, int32_t& len); 00070 virtual void get_vector(uint8_t*& vector, int32_t& len); 00071 virtual void get_vector(char*& vector, int32_t& len); 00072 virtual void get_vector(int32_t*& vector, int32_t& len); 00073 virtual void get_vector(uint32_t*& vector, int32_t& len); 00074 virtual void get_vector(float64_t*& vector, int32_t& len); 00075 virtual void get_vector(float32_t*& vector, int32_t& len); 00076 virtual void get_vector(floatmax_t*& vector, int32_t& len); 00077 virtual void get_vector(int16_t*& vector, int32_t& len); 00078 virtual void get_vector(uint16_t*& vector, int32_t& len); 00079 virtual void get_vector(int64_t*& vector, int32_t& len); 00080 virtual void get_vector(uint64_t*& vector, int32_t& len); 00082 00091 virtual void get_matrix( 00092 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00093 virtual void get_matrix( 00094 int8_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00095 virtual void get_matrix( 00096 char*& matrix, int32_t& num_feat, int32_t& num_vec); 00097 virtual void get_matrix( 00098 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00099 virtual void get_matrix( 00100 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00101 virtual void get_matrix( 00102 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00103 virtual void get_matrix( 00104 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00105 virtual void get_matrix( 00106 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00107 virtual void get_matrix( 00108 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00109 virtual void get_matrix( 00110 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00111 virtual void get_matrix( 00112 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00113 virtual void get_matrix( 00114 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec); 00116 00125 virtual void get_ndarray( 00126 uint8_t*& array, int32_t*& dims, int32_t& num_dims); 00127 virtual void get_ndarray( 00128 char*& array, int32_t*& dims, int32_t& num_dims); 00129 virtual void get_ndarray( 00130 int32_t*& array, int32_t*& dims, int32_t& num_dims); 00131 virtual void get_ndarray( 00132 float32_t*& array, int32_t*& dims, int32_t& num_dims); 00133 virtual void get_ndarray( 00134 float64_t*& array, int32_t*& dims, int32_t& num_dims); 00135 virtual void get_ndarray( 00136 int16_t*& array, int32_t*& dims, int32_t& num_dims); 00137 virtual void get_ndarray( 00138 uint16_t*& array, int32_t*& dims, int32_t& num_dims); 00140 00149 virtual void get_sparse_matrix( 00150 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec); 00151 virtual void get_sparse_matrix( 00152 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00153 virtual void get_sparse_matrix( 00154 SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00155 virtual void get_sparse_matrix( 00156 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec); 00157 virtual void get_sparse_matrix( 00158 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00159 virtual void get_sparse_matrix( 00160 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00161 virtual void get_sparse_matrix( 00162 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00163 virtual void get_sparse_matrix( 00164 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00165 virtual void get_sparse_matrix( 00166 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00167 virtual void get_sparse_matrix( 00168 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00169 virtual void get_sparse_matrix( 00170 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00171 virtual void get_sparse_matrix( 00172 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00173 virtual void get_sparse_matrix( 00174 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec); 00176 00185 virtual void get_string_list( 00186 SGString<uint8_t>*& strings, int32_t& num_str, 00187 int32_t& max_string_len); 00188 virtual void get_string_list( 00189 SGString<int8_t>*& strings, int32_t& num_str, 00190 int32_t& max_string_len); 00191 virtual void get_string_list( 00192 SGString<char>*& strings, int32_t& num_str, 00193 int32_t& max_string_len); 00194 virtual void get_string_list( 00195 SGString<int32_t>*& strings, int32_t& num_str, 00196 int32_t& max_string_len); 00197 virtual void get_string_list( 00198 SGString<uint32_t>*& strings, int32_t& num_str, 00199 int32_t& max_string_len); 00200 virtual void get_string_list( 00201 SGString<int16_t>*& strings, int32_t& num_str, 00202 int32_t& max_string_len); 00203 virtual void get_string_list( 00204 SGString<uint16_t>*& strings, int32_t& num_str, 00205 int32_t& max_string_len); 00206 virtual void get_string_list( 00207 SGString<int64_t>*& strings, int32_t& num_str, 00208 int32_t& max_string_len); 00209 virtual void get_string_list( 00210 SGString<uint64_t>*& strings, int32_t& num_str, 00211 int32_t& max_string_len); 00212 virtual void get_string_list( 00213 SGString<float32_t>*& strings, int32_t& num_str, 00214 int32_t& max_string_len); 00215 virtual void get_string_list( 00216 SGString<float64_t>*& strings, int32_t& num_str, 00217 int32_t& max_string_len); 00218 virtual void get_string_list( 00219 SGString<floatmax_t>*& strings, int32_t& num_str, 00220 int32_t& max_string_len); 00222 00224 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 00225 00233 virtual void set_vector(const int8_t* vector, int32_t len); 00234 virtual void set_vector(const uint8_t* vector, int32_t len); 00235 virtual void set_vector(const char* vector, int32_t len); 00236 virtual void set_vector(const int32_t* vector, int32_t len); 00237 virtual void set_vector(const uint32_t* vector, int32_t len); 00238 virtual void set_vector(const float32_t* vector, int32_t len); 00239 virtual void set_vector(const float64_t* vector, int32_t len); 00240 virtual void set_vector(const floatmax_t* vector, int32_t len); 00241 virtual void set_vector(const int16_t* vector, int32_t len); 00242 virtual void set_vector(const uint16_t* vector, int32_t len); 00243 virtual void set_vector(const int64_t* vector, int32_t len); 00244 virtual void set_vector(const uint64_t* vector, int32_t len); 00246 00254 virtual void set_matrix( 00255 const uint8_t* matrix, int32_t num_feat, int32_t num_vec); 00256 virtual void set_matrix( 00257 const int8_t* matrix, int32_t num_feat, int32_t num_vec); 00258 virtual void set_matrix( 00259 const char* matrix, int32_t num_feat, int32_t num_vec); 00260 virtual void set_matrix( 00261 const int32_t* matrix, int32_t num_feat, int32_t num_vec); 00262 virtual void set_matrix( 00263 const uint32_t* matrix, int32_t num_feat, int32_t num_vec); 00264 virtual void set_matrix( 00265 const int64_t* matrix, int32_t num_feat, int32_t num_vec); 00266 virtual void set_matrix( 00267 const uint64_t* matrix, int32_t num_feat, int32_t num_vec); 00268 virtual void set_matrix( 00269 const float32_t* matrix, int32_t num_feat, int32_t num_vec); 00270 virtual void set_matrix( 00271 const float64_t* matrix, int32_t num_feat, int32_t num_vec); 00272 virtual void set_matrix( 00273 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec); 00274 virtual void set_matrix( 00275 const int16_t* matrix, int32_t num_feat, int32_t num_vec); 00276 virtual void set_matrix( 00277 const uint16_t* matrix, int32_t num_feat, int32_t num_vec); 00279 00287 virtual void set_sparse_matrix( 00288 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec); 00289 virtual void set_sparse_matrix( 00290 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec); 00291 virtual void set_sparse_matrix( 00292 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec); 00293 virtual void set_sparse_matrix( 00294 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec); 00295 virtual void set_sparse_matrix( 00296 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec); 00297 virtual void set_sparse_matrix( 00298 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec); 00299 virtual void set_sparse_matrix( 00300 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec); 00301 virtual void set_sparse_matrix( 00302 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec); 00303 virtual void set_sparse_matrix( 00304 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec); 00305 virtual void set_sparse_matrix( 00306 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec); 00307 virtual void set_sparse_matrix( 00308 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec); 00309 virtual void set_sparse_matrix( 00310 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec); 00311 virtual void set_sparse_matrix( 00312 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec); 00314 00323 virtual void set_string_list( 00324 const SGString<uint8_t>* strings, int32_t num_str); 00325 virtual void set_string_list( 00326 const SGString<int8_t>* strings, int32_t num_str); 00327 virtual void set_string_list( 00328 const SGString<char>* strings, int32_t num_str); 00329 virtual void set_string_list( 00330 const SGString<int32_t>* strings, int32_t num_str); 00331 virtual void set_string_list( 00332 const SGString<uint32_t>* strings, int32_t num_str); 00333 virtual void set_string_list( 00334 const SGString<int16_t>* strings, int32_t num_str); 00335 virtual void set_string_list( 00336 const SGString<uint16_t>* strings, int32_t num_str); 00337 virtual void set_string_list( 00338 const SGString<int64_t>* strings, int32_t num_str); 00339 virtual void set_string_list( 00340 const SGString<uint64_t>* strings, int32_t num_str); 00341 virtual void set_string_list( 00342 const SGString<float32_t>* strings, int32_t num_str); 00343 virtual void set_string_list( 00344 const SGString<float64_t>* strings, int32_t num_str); 00345 virtual void set_string_list( 00346 const SGString<floatmax_t>* strings, int32_t num_str); 00348 00349 virtual const char* get_name() const { return "ProtobufFile"; } 00350 00351 private: 00353 void init(); 00354 00356 void write_big_endian_uint(uint32_t number, uint8_t* array, uint32_t size); 00357 00359 uint32_t read_big_endian_uint(uint8_t* array, uint32_t size); 00360 00362 int32_t compute_num_messages(uint64_t len, int32_t sizeof_type) const; 00363 00365 void read_and_validate_global_header(ShogunVersion_SGDataType type); 00366 00368 void write_global_header(ShogunVersion_SGDataType type); 00369 00372 VectorHeader read_vector_header(); 00373 MatrixHeader read_matrix_header(); 00374 SparseMatrixHeader read_sparse_matrix_header(); 00375 StringListHeader read_string_list_header(); 00377 00380 void write_vector_header(int32_t len, int32_t num_messages); 00381 void write_matrix_header(int32_t num_feat, int32_t num_vec, int32_t num_messages); 00383 00388 void write_sparse_matrix_header( 00389 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec); 00390 void write_sparse_matrix_header( 00391 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec); 00392 void write_sparse_matrix_header( 00393 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec); 00394 void write_sparse_matrix_header( 00395 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec); 00396 void write_sparse_matrix_header( 00397 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec); 00398 void write_sparse_matrix_header( 00399 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec); 00400 void write_sparse_matrix_header( 00401 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec); 00402 void write_sparse_matrix_header( 00403 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec); 00404 void write_sparse_matrix_header( 00405 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec); 00406 void write_sparse_matrix_header( 00407 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec); 00408 void write_sparse_matrix_header( 00409 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec); 00410 void write_sparse_matrix_header( 00411 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec); 00412 void write_sparse_matrix_header( 00413 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec); 00415 00420 void write_string_list_header( 00421 const SGString<uint8_t>* strings, int32_t num_str); 00422 void write_string_list_header( 00423 const SGString<int8_t>* strings, int32_t num_str); 00424 void write_string_list_header( 00425 const SGString<char>* strings, int32_t num_str); 00426 void write_string_list_header( 00427 const SGString<int32_t>* strings, int32_t num_str); 00428 void write_string_list_header( 00429 const SGString<uint32_t>* strings, int32_t num_str); 00430 void write_string_list_header( 00431 const SGString<float64_t>* strings, int32_t num_str); 00432 void write_string_list_header( 00433 const SGString<float32_t>* strings, int32_t num_str); 00434 void write_string_list_header( 00435 const SGString<floatmax_t>* strings, int32_t num_str); 00436 void write_string_list_header( 00437 const SGString<int16_t>* strings, int32_t num_str); 00438 void write_string_list_header( 00439 const SGString<uint16_t>* strings, int32_t num_str); 00440 void write_string_list_header( 00441 const SGString<int64_t>* strings, int32_t num_str); 00442 void write_string_list_header( 00443 const SGString<uint64_t>* strings, int32_t num_str); 00445 00447 void read_message(google::protobuf::Message& message); 00448 00450 void write_message(const google::protobuf::Message& message); 00451 00457 void read_memory_block(uint8_t*& vector, uint64_t len, int32_t num_messages); 00458 void read_memory_block(int8_t*& vector, uint64_t len, int32_t num_messages); 00459 void read_memory_block(char*& vector, uint64_t len, int32_t num_messages); 00460 void read_memory_block(int32_t*& vector, uint64_t len, int32_t num_messages); 00461 void read_memory_block(uint32_t*& vector, uint64_t len, int32_t num_messages); 00462 void read_memory_block(float64_t*& vector, uint64_t len, int32_t num_messages); 00463 void read_memory_block(float32_t*& vector, uint64_t len, int32_t num_messages); 00464 void read_memory_block(floatmax_t*& vector, uint64_t len, int32_t num_messages); 00465 void read_memory_block(int16_t*& vector, uint64_t len, int32_t num_messages); 00466 void read_memory_block(uint16_t*& vector, uint64_t len, int32_t num_messages); 00467 void read_memory_block(int64_t*& vector, uint64_t len, int32_t num_messages); 00468 void read_memory_block(uint64_t*& vector, uint64_t len, int32_t num_messages); 00470 00476 void write_memory_block(const int8_t* vector, uint64_t len, int32_t num_messages); 00477 void write_memory_block(const uint8_t* vector, uint64_t len, int32_t num_messages); 00478 void write_memory_block(const char* vector, uint64_t len, int32_t num_messages); 00479 void write_memory_block(const int32_t* vector, uint64_t len, int32_t num_messages); 00480 void write_memory_block(const uint32_t* vector, uint64_t len, int32_t num_messages); 00481 void write_memory_block(const float32_t* vector, uint64_t len, int32_t num_messages); 00482 void write_memory_block(const float64_t* vector, uint64_t len, int32_t num_messages); 00483 void write_memory_block(const floatmax_t* vector, uint64_t len, int32_t num_messages); 00484 void write_memory_block(const int16_t* vector, uint64_t len, int32_t num_messages); 00485 void write_memory_block(const uint16_t* vector, uint64_t len, int32_t num_messages); 00486 void write_memory_block(const int64_t* vector, uint64_t len, int32_t num_messages); 00487 void write_memory_block(const uint64_t* vector, uint64_t len, int32_t num_messages); 00489 00491 void read_sparse_matrix(SGSparseVector<bool>*& matrix, 00492 const SparseMatrixHeader& data_header); 00493 void read_sparse_matrix(SGSparseVector<uint8_t>*& matrix, 00494 const SparseMatrixHeader& data_header); 00495 void read_sparse_matrix(SGSparseVector<int8_t>*& matrix, 00496 const SparseMatrixHeader& data_header); 00497 void read_sparse_matrix(SGSparseVector<char>*& matrix, 00498 const SparseMatrixHeader& data_header); 00499 void read_sparse_matrix(SGSparseVector<int32_t>*& matrix, 00500 const SparseMatrixHeader& data_header); 00501 void read_sparse_matrix(SGSparseVector<uint32_t>*& matrix, 00502 const SparseMatrixHeader& data_header); 00503 void read_sparse_matrix(SGSparseVector<int16_t>*& matrix, 00504 const SparseMatrixHeader& data_header); 00505 void read_sparse_matrix(SGSparseVector<uint16_t>*& matrix, 00506 const SparseMatrixHeader& data_header); 00507 void read_sparse_matrix(SGSparseVector<int64_t>*& matrix, 00508 const SparseMatrixHeader& data_header); 00509 void read_sparse_matrix(SGSparseVector<uint64_t>*& matrix, 00510 const SparseMatrixHeader& data_header); 00511 void read_sparse_matrix(SGSparseVector<float32_t>*& matrix, 00512 const SparseMatrixHeader& data_header); 00513 void read_sparse_matrix(SGSparseVector<float64_t>*& matrix, 00514 const SparseMatrixHeader& data_header); 00515 void read_sparse_matrix(SGSparseVector<floatmax_t>*& matrix, 00516 const SparseMatrixHeader& data_header); 00518 00522 void write_sparse_matrix( 00523 const SGSparseVector<bool>* matrix, int32_t num_vec); 00524 void write_sparse_matrix( 00525 const SGSparseVector<uint8_t>* matrix, int32_t num_vec); 00526 void write_sparse_matrix( 00527 const SGSparseVector<int8_t>* matrix, int32_t num_vec); 00528 void write_sparse_matrix( 00529 const SGSparseVector<char>* matrix, int32_t num_vec); 00530 void write_sparse_matrix( 00531 const SGSparseVector<int32_t>* matrix, int32_t num_vec); 00532 void write_sparse_matrix( 00533 const SGSparseVector<uint32_t>* matrix, int32_t num_vec); 00534 void write_sparse_matrix( 00535 const SGSparseVector<int16_t>* matrix, int32_t num_vec); 00536 void write_sparse_matrix( 00537 const SGSparseVector<uint16_t>* matrix, int32_t num_vec); 00538 void write_sparse_matrix( 00539 const SGSparseVector<int64_t>* matrix, int32_t num_vec); 00540 void write_sparse_matrix( 00541 const SGSparseVector<uint64_t>* matrix, int32_t num_vec); 00542 void write_sparse_matrix( 00543 const SGSparseVector<float32_t>* matrix, int32_t num_vec); 00544 void write_sparse_matrix( 00545 const SGSparseVector<float64_t>* matrix, int32_t num_vec); 00546 void write_sparse_matrix( 00547 const SGSparseVector<floatmax_t>* matrix, int32_t num_vec); 00549 00551 void read_string_list(SGString<uint8_t>*& strings, 00552 const StringListHeader& data_header); 00553 void read_string_list(SGString<int8_t>*& strings, 00554 const StringListHeader& data_header); 00555 void read_string_list(SGString<char>*& strings, 00556 const StringListHeader& data_header); 00557 void read_string_list(SGString<int32_t>*& strings, 00558 const StringListHeader& data_header); 00559 void read_string_list(SGString<uint32_t>*& strings, 00560 const StringListHeader& data_header); 00561 void read_string_list(SGString<int16_t>*& strings, 00562 const StringListHeader& data_header); 00563 void read_string_list(SGString<uint16_t>*& strings, 00564 const StringListHeader& data_header); 00565 void read_string_list(SGString<int64_t>*& strings, 00566 const StringListHeader& data_header); 00567 void read_string_list(SGString<uint64_t>*& strings, 00568 const StringListHeader& data_header); 00569 void read_string_list(SGString<float32_t>*& strings, 00570 const StringListHeader& data_header); 00571 void read_string_list(SGString<float64_t>*& strings, 00572 const StringListHeader& data_header); 00573 void read_string_list(SGString<floatmax_t>*& strings, 00574 const StringListHeader& data_header); 00576 00580 void write_string_list( 00581 const SGString<uint8_t>* strings, int32_t num_str); 00582 void write_string_list( 00583 const SGString<int8_t>* strings, int32_t num_str); 00584 void write_string_list( 00585 const SGString<char>* strings, int32_t num_str); 00586 void write_string_list( 00587 const SGString<int32_t>* strings, int32_t num_str); 00588 void write_string_list( 00589 const SGString<uint32_t>* strings, int32_t num_str); 00590 void write_string_list( 00591 const SGString<int16_t>* strings, int32_t num_str); 00592 void write_string_list( 00593 const SGString<uint16_t>* strings, int32_t num_str); 00594 void write_string_list( 00595 const SGString<int64_t>* strings, int32_t num_str); 00596 void write_string_list( 00597 const SGString<uint64_t>* strings, int32_t num_str); 00598 void write_string_list( 00599 const SGString<float32_t>* strings, int32_t num_str); 00600 void write_string_list( 00601 const SGString<float64_t>* strings, int32_t num_str); 00602 void write_string_list( 00603 const SGString<floatmax_t>* strings, int32_t num_str); 00605 00606 private: 00608 int32_t version; 00609 00611 int32_t message_size; 00612 00614 uint8_t* buffer; 00615 00617 uint8_t uint_buffer[4]; 00618 }; 00619 00620 } 00621 00622 #endif 00624 #endif