| 341 | } |
| 342 | |
| 343 | void Metadata::SetQuery(const data_size_t* query, data_size_t len) { |
| 344 | std::lock_guard<std::mutex> lock(mutex_); |
| 345 | // save to nullptr |
| 346 | if (query == nullptr || len == 0) { |
| 347 | query_boundaries_.clear(); |
| 348 | num_queries_ = 0; |
| 349 | return; |
| 350 | } |
| 351 | data_size_t sum = 0; |
| 352 | #pragma omp parallel for schedule(static) reduction(+:sum) |
| 353 | for (data_size_t i = 0; i < len; ++i) { |
| 354 | sum += query[i]; |
| 355 | } |
| 356 | if (num_data_ != sum) { |
| 357 | Log::Fatal("Sum of query counts is not same with #data"); |
| 358 | } |
| 359 | if (!query_boundaries_.empty()) { query_boundaries_.clear(); } |
| 360 | num_queries_ = len; |
| 361 | query_boundaries_ = std::vector<data_size_t>(num_queries_ + 1); |
| 362 | query_boundaries_[0] = 0; |
| 363 | for (data_size_t i = 0; i < num_queries_; ++i) { |
| 364 | query_boundaries_[i + 1] = query_boundaries_[i] + query[i]; |
| 365 | } |
| 366 | LoadQueryWeights(); |
| 367 | query_load_from_file_ = false; |
| 368 | } |
| 369 | |
| 370 | void Metadata::LoadWeights() { |
| 371 | num_weights_ = 0; |
no test coverage detected