Resume firstGeq search from within tree
This commit is contained in:
@@ -628,9 +628,6 @@ struct FirstGeqStepwise {
|
||||
}
|
||||
}
|
||||
}
|
||||
[[fallthrough]];
|
||||
case Init:
|
||||
phase = Search;
|
||||
if (n->partialKeyLen > 0) {
|
||||
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
||||
for (int i = 0; i < commonLen; ++i) {
|
||||
@@ -655,6 +652,9 @@ struct FirstGeqStepwise {
|
||||
return downLeftSpine();
|
||||
}
|
||||
}
|
||||
[[fallthrough]];
|
||||
case Init:
|
||||
phase = Search;
|
||||
if (remaining.size() == 0 && n->entryPresent) {
|
||||
cmp = 0;
|
||||
return true;
|
||||
@@ -954,7 +954,16 @@ bool checkRangeRead(Node *n, const std::span<const uint8_t> begin,
|
||||
begin.subspan(0, lcp - search.remaining.size()) ==
|
||||
0);
|
||||
|
||||
auto left = firstGeq(n, begin);
|
||||
// Check that we can start FirstGeq where Search left off
|
||||
int consumed = lcp - search.remaining.size();
|
||||
assert(consumed >= 0);
|
||||
auto left =
|
||||
firstGeq(search.n, begin.subspan(consumed, int(begin.size()) - consumed));
|
||||
#ifndef NDEBUG
|
||||
auto iter = firstGeq(n, begin);
|
||||
assert(left.cmp == iter.cmp);
|
||||
assert(left.n == iter.n);
|
||||
#endif
|
||||
|
||||
#if DEBUG_VERBOSE && !defined(NDEBUG)
|
||||
fprintf(stderr, "firstGeq for `%s' got `%s'\n", printable(begin).c_str(),
|
||||
|
Reference in New Issue
Block a user