| 72 | } |
| 73 | |
| 74 | const KeyValueRef* RYWIterator::kv(Arena& arena) { |
| 75 | if (is_unreadable() && !bypassUnreadable) |
| 76 | throw accessed_unreadable(); |
| 77 | |
| 78 | if (writes.is_unmodified_range()) { |
| 79 | return cache.kv(arena); |
| 80 | } |
| 81 | |
| 82 | auto result = (writes.is_independent() || cache.is_empty_range()) |
| 83 | ? WriteMap::coalesceUnder(writes.op(), Optional<ValueRef>(), arena) |
| 84 | : WriteMap::coalesceUnder(writes.op(), cache.kv(arena)->value, arena); |
| 85 | |
| 86 | if (!result.value.present()) { |
| 87 | // Key is now deleted, which can happen because of CompareAndClear. |
| 88 | return nullptr; |
| 89 | } |
| 90 | temp = KeyValueRef(writes.beginKey().assertRef(), result.value.get()); |
| 91 | return &temp; |
| 92 | } |
| 93 | |
| 94 | RYWIterator& RYWIterator::operator++() { |
| 95 | if (end_key_cmp <= 0) |
no test coverage detected