Strengthen precondition to checkRangeStartsWith
and remove resulting dead code
This commit is contained in:
@@ -1672,7 +1672,10 @@ Vector<uint8_t> getSearchPath(Arena &arena, Node *n) {
|
|||||||
} // GCOVR_EXCL_LINE
|
} // GCOVR_EXCL_LINE
|
||||||
|
|
||||||
// Return true if the max version among all keys that start with key + [child],
|
// Return true if the max version among all keys that start with key + [child],
|
||||||
// where begin < child < end, is <= readVersion
|
// where begin < child < end, is <= readVersion.
|
||||||
|
//
|
||||||
|
// Precondition: transitively, no child of n has a search path that's a longer
|
||||||
|
// prefix of key than n
|
||||||
bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
||||||
int end, int64_t readVersion,
|
int end, int64_t readVersion,
|
||||||
ConflictSet::Impl *impl) {
|
ConflictSet::Impl *impl) {
|
||||||
@@ -1680,7 +1683,6 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
|||||||
fprintf(stderr, "%s(%02x,%02x)*\n", printable(key).c_str(), begin, end);
|
fprintf(stderr, "%s(%02x,%02x)*\n", printable(key).c_str(), begin, end);
|
||||||
#endif
|
#endif
|
||||||
auto remaining = key;
|
auto remaining = key;
|
||||||
for (;;) {
|
|
||||||
if (remaining.size() == 0) {
|
if (remaining.size() == 0) {
|
||||||
return maxBetweenExclusive(n, begin, end) <= readVersion;
|
return maxBetweenExclusive(n, begin, end) <= readVersion;
|
||||||
}
|
}
|
||||||
@@ -1700,7 +1702,8 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
|||||||
n = child;
|
n = child;
|
||||||
remaining = remaining.subspan(1, remaining.size() - 1);
|
remaining = remaining.subspan(1, remaining.size() - 1);
|
||||||
|
|
||||||
if (n->partialKeyLen > 0) {
|
assert(n->partialKeyLen > 0);
|
||||||
|
{
|
||||||
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
||||||
int i = longestCommonPrefix(n->partialKey(), remaining.data(), commonLen);
|
int i = longestCommonPrefix(n->partialKey(), remaining.data(), commonLen);
|
||||||
if (i < commonLen) {
|
if (i < commonLen) {
|
||||||
@@ -1712,10 +1715,7 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
|||||||
goto downLeftSpine;
|
goto downLeftSpine;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (commonLen == n->partialKeyLen) {
|
assert(n->partialKeyLen > int(remaining.size()));
|
||||||
// partial key matches
|
|
||||||
remaining = remaining.subspan(commonLen, remaining.size() - commonLen);
|
|
||||||
} else if (n->partialKeyLen > int(remaining.size())) {
|
|
||||||
if (begin < n->partialKey()[remaining.size()] &&
|
if (begin < n->partialKey()[remaining.size()] &&
|
||||||
n->partialKey()[remaining.size()] < end) {
|
n->partialKey()[remaining.size()] < end) {
|
||||||
if (n->entryPresent && n->entry.rangeVersion > readVersion) {
|
if (n->entryPresent && n->entry.rangeVersion > readVersion) {
|
||||||
@@ -1725,8 +1725,9 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
__builtin_unreachable(); // GCOVR_EXCL_LINE
|
||||||
|
|
||||||
downLeftSpine:
|
downLeftSpine:
|
||||||
if (n == nullptr) {
|
if (n == nullptr) {
|
||||||
return true;
|
return true;
|
||||||
|
Reference in New Issue
Block a user