MCPcopy Create free account
hub / github.com/antmachineintelligence/mtgbmcode / CopySubset

Method CopySubset

src/io/dense_nbits_bin.hpp:345–360  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

343 }
344
345 void CopySubset(const Bin* full_bin, const data_size_t* used_indices, data_size_t num_used_indices) override {
346 auto other_bin = dynamic_cast<const Dense4bitsBin*>(full_bin);
347 const data_size_t rest = num_used_indices & 1;
348 for (int i = 0; i < num_used_indices - rest; i += 2) {
349 data_size_t idx = used_indices[i];
350 const auto bin1 = static_cast<uint8_t>((other_bin->data_[idx >> 1] >> ((idx & 1) << 2)) & 0xf);
351 idx = used_indices[i + 1];
352 const auto bin2 = static_cast<uint8_t>((other_bin->data_[idx >> 1] >> ((idx & 1) << 2)) & 0xf);
353 const int i1 = i >> 1;
354 data_[i1] = (bin1 | (bin2 << 4));
355 }
356 if (rest) {
357 data_size_t idx = used_indices[num_used_indices - 1];
358 data_[num_used_indices >> 1] = (other_bin->data_[idx >> 1] >> ((idx & 1) << 2)) & 0xf;
359 }
360 }
361
362 void SaveBinaryToFile(const VirtualFileWriter* writer) const override {
363 writer->Write(data_.data(), sizeof(uint8_t) * data_.size());

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected