| 474 | } |
| 475 | |
| 476 | void Metadata::LoadFromMemory(const void* memory) { |
| 477 | const char* mem_ptr = reinterpret_cast<const char*>(memory); |
| 478 | |
| 479 | num_data_ = *(reinterpret_cast<const data_size_t*>(mem_ptr)); |
| 480 | mem_ptr += sizeof(num_data_); |
| 481 | num_weights_ = *(reinterpret_cast<const data_size_t*>(mem_ptr)); |
| 482 | mem_ptr += sizeof(num_weights_); |
| 483 | num_queries_ = *(reinterpret_cast<const data_size_t*>(mem_ptr)); |
| 484 | mem_ptr += sizeof(num_queries_); |
| 485 | |
| 486 | if (!label_.empty()) { label_.clear(); } |
| 487 | label_ = std::vector<label_t>(num_data_); |
| 488 | std::memcpy(label_.data(), mem_ptr, sizeof(label_t) * num_data_); |
| 489 | mem_ptr += sizeof(label_t) * num_data_; |
| 490 | |
| 491 | if (num_weights_ > 0) { |
| 492 | if (!weights_.empty()) { weights_.clear(); } |
| 493 | weights_ = std::vector<label_t>(num_weights_); |
| 494 | std::memcpy(weights_.data(), mem_ptr, sizeof(label_t) * num_weights_); |
| 495 | mem_ptr += sizeof(label_t) * num_weights_; |
| 496 | weight_load_from_file_ = true; |
| 497 | } |
| 498 | if (num_queries_ > 0) { |
| 499 | if (!query_boundaries_.empty()) { query_boundaries_.clear(); } |
| 500 | query_boundaries_ = std::vector<data_size_t>(num_queries_ + 1); |
| 501 | std::memcpy(query_boundaries_.data(), mem_ptr, sizeof(data_size_t) * (num_queries_ + 1)); |
| 502 | mem_ptr += sizeof(data_size_t) * (num_queries_ + 1); |
| 503 | query_load_from_file_ = true; |
| 504 | } |
| 505 | LoadQueryWeights(); |
| 506 | } |
| 507 | |
| 508 | void Metadata::SaveBinaryToFile(const VirtualFileWriter* writer) const { |
| 509 | writer->Write(&num_data_, sizeof(num_data_)); |
no test coverage detected