Share search of common prefix

This commit is contained in:
2024-02-15 11:54:34 -08:00
parent 5a2b734d16
commit d565f75e0e
+25
View File
@@ -1061,6 +1061,31 @@ bool checkRangeRead(Node *n, std::span<const uint8_t> begin,
int lcp = longestCommonPrefix(begin.data(), end.data(),
std::min(begin.size(), end.size()));
SearchStepWise search{n, begin.subspan(0, lcp)};
Arena arena;
for (;;) {
assert(getSearchPath(arena, search.n) <=>
begin.subspan(0, lcp - search.remaining.size()) ==
0);
if (search.n->maxVersion <= readVersion) {
return true;
}
if (search.step()) {
break;
}
}
assert(getSearchPath(arena, search.n) <=>
begin.subspan(0, lcp - search.remaining.size()) ==
0);
const int consumed = lcp - search.remaining.size();
assert(consumed >= 0);
begin = begin.subspan(consumed, int(begin.size()) - consumed);
end = end.subspan(consumed, int(end.size()) - consumed);
n = search.n;
lcp -= consumed;
if (lcp == int(begin.size())) {
for (int i = lcp; i < int(end.size()); ++i) {
if (!checkPointRead(n, end.subspan(0, i), readVersion)) {