| 750 | ~SnapshotIteratorImpl() override = default; |
| 751 | |
| 752 | void Next(uint32_t num_keys, uint32_t* return_keys, void* keys, void* values) override { |
| 753 | *return_keys = 0; |
| 754 | while (current_chunk_ < indices_names_.size()) { |
| 755 | if (!chunk_iterator_) { |
| 756 | const std::string snapshot_base = table_->SnapshotDirPath(snapshot_name_); |
| 757 | const uint64_t chunk_id = GetChunkId(indices_names_[current_chunk_], kIndexFileNamePrefix); |
| 758 | PosixFile index_file(PosixFile::JoinPath(snapshot_base, indices_names_[current_chunk_]), |
| 759 | O_RDONLY, 0644); |
| 760 | const size_t index_file_size = index_file.Size(); |
| 761 | CHECK_EQ(index_file_size % sizeof(uint64_t), 0); |
| 762 | if (index_file_size == 0) { |
| 763 | current_chunk_ += 1; |
| 764 | continue; |
| 765 | } |
| 766 | const size_t n_entries = index_file_size / sizeof(uint64_t); |
| 767 | indices_file_.reset(new PosixMappedFile(std::move(index_file), index_file_size, PROT_READ)); |
| 768 | PosixFile key_file(table_->KeyFilePath(chunk_id), O_RDONLY, 0644); |
| 769 | keys_file_.reset(new PosixMappedFile(std::move(key_file), key_file.Size(), PROT_READ)); |
| 770 | PosixFile value_file(table_->ValueFilePath(chunk_id), O_RDONLY, 0644); |
| 771 | values_file_.reset( |
| 772 | new PosixMappedFile(std::move(value_file), value_file.Size(), PROT_READ)); |
| 773 | chunk_iterator_.reset(new ChunkIteratorImpl<Key>( |
| 774 | value_size_, logical_block_size_, num_values_per_block_, num_values_per_chunk_, |
| 775 | chunk_id, n_entries, static_cast<const Key*>(keys_file_->ptr()), |
| 776 | static_cast<const uint64_t*>(indices_file_->ptr()), values_file_->ptr())); |
| 777 | } |
| 778 | chunk_iterator_->Next(num_keys, return_keys, keys, values); |
| 779 | if (*return_keys == 0) { |
| 780 | chunk_iterator_.reset(); |
| 781 | keys_file_.reset(); |
| 782 | values_file_.reset(); |
| 783 | indices_file_.reset(); |
| 784 | current_chunk_ += 1; |
| 785 | continue; |
| 786 | } else { |
| 787 | return; |
| 788 | } |
| 789 | } |
| 790 | } |
| 791 | |
| 792 | void Reset() override { UNIMPLEMENTED(); } |
| 793 |
nothing calls this directly
no test coverage detected