| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef FLANN_SAVING_H_ |
| | #define FLANN_SAVING_H_ |
| |
|
| | #include <cstring> |
| | #include <vector> |
| | #include <stdio.h> |
| |
|
| | #include "FLANN/general.h" |
| | #include "FLANN/util/serialization.h" |
| |
|
| |
|
| | #ifdef FLANN_SIGNATURE_ |
| | #undef FLANN_SIGNATURE_ |
| | #endif |
| | #define FLANN_SIGNATURE_ "FLANN_INDEX_v1.1" |
| |
|
| | namespace flann |
| | { |
| |
|
| | |
| | |
| | |
| | struct IndexHeader |
| | { |
| | IndexHeaderStruct h; |
| |
|
| | IndexHeader() |
| | { |
| | memset(h.signature, 0, sizeof(h.signature)); |
| | strcpy(h.signature, FLANN_SIGNATURE_); |
| | memset(h.version, 0, sizeof(h.version)); |
| | strcpy(h.version, FLANN_VERSION_); |
| |
|
| | h.compression = 0; |
| | h.first_block_size = 0; |
| | } |
| |
|
| | private: |
| | template<typename Archive> |
| | void serialize(Archive& ar) |
| | { |
| | ar & h.signature; |
| | ar & h.version; |
| | ar & h.data_type; |
| | ar & h.index_type; |
| | ar & h.rows; |
| | ar & h.cols; |
| | ar & h.compression; |
| | ar & h.first_block_size; |
| | } |
| | friend struct serialization::access; |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | template<typename Index> |
| | void save_header(FILE* stream, const Index& index) |
| | { |
| | IndexHeader header; |
| | header.h.data_type = flann_datatype_value<typename Index::ElementType>::value; |
| | header.h.index_type = index.getType(); |
| | header.h.rows = index.size(); |
| | header.h.cols = index.veclen(); |
| |
|
| | fwrite(&header, sizeof(header),1,stream); |
| | } |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | inline IndexHeader load_header(FILE* stream) |
| | { |
| | IndexHeader header; |
| | int read_size = fread(&header,sizeof(header),1,stream); |
| |
|
| | if (read_size != 1) { |
| | throw FLANNException("Invalid index file, cannot read"); |
| | } |
| |
|
| | if (strncmp(header.h.signature, |
| | FLANN_SIGNATURE_, |
| | strlen(FLANN_SIGNATURE_) - strlen("v0.0")) != 0) { |
| | throw FLANNException("Invalid index file, wrong signature"); |
| | } |
| |
|
| | return header; |
| | } |
| |
|
| |
|
| | namespace serialization |
| | { |
| | ENUM_SERIALIZER(flann_algorithm_t); |
| | ENUM_SERIALIZER(flann_centers_init_t); |
| | ENUM_SERIALIZER(flann_log_level_t); |
| | ENUM_SERIALIZER(flann_datatype_t); |
| | } |
| |
|
| | } |
| |
|
| | #endif |
| |
|