| 127 | } |
| 128 | |
| 129 | Status Table::InternalGet(const StringPiece& k, void* arg, |
| 130 | void (*saver)(void*, const StringPiece&, |
| 131 | const StringPiece&)) { |
| 132 | Status s; |
| 133 | Iterator* iiter = rep_->index_block->NewIterator(); |
| 134 | iiter->Seek(k); |
| 135 | if (iiter->Valid()) { |
| 136 | Iterator* block_iter = BlockReader(this, iiter->value()); |
| 137 | block_iter->Seek(k); |
| 138 | if (block_iter->Valid()) { |
| 139 | (*saver)(arg, block_iter->key(), block_iter->value()); |
| 140 | } |
| 141 | s = block_iter->status(); |
| 142 | delete block_iter; |
| 143 | } |
| 144 | if (s.ok()) { |
| 145 | s = iiter->status(); |
| 146 | } |
| 147 | delete iiter; |
| 148 | return s; |
| 149 | } |
| 150 | |
| 151 | uint64 Table::ApproximateOffsetOf(const StringPiece& key) const { |
| 152 | Iterator* index_iter = rep_->index_block->NewIterator(); |