Avoid longestCommonPrefix if partialKeyLen == 0

This commit is contained in:
2024-10-28 21:44:16 -07:00
parent e8a8b5aef1
commit 3f15db7e82

View File

@@ -1220,11 +1220,13 @@ getChildUpdatingMaxVersion(Node3 *self, std::span<const uint8_t> &remaining,
return nullptr;
}
Node *c = self->children[i];
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
if (c->partialKeyLen > 0) {
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
}
}
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
self->childMaxVersion[i] = maxVersion;
@@ -1241,11 +1243,13 @@ getChildUpdatingMaxVersion(Node16 *self, std::span<const uint8_t> &remaining,
return nullptr;
}
Node *c = self->children[i];
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
if (c->partialKeyLen > 0) {
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
}
}
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
self->childMaxVersion[i] = maxVersion;
@@ -1262,11 +1266,13 @@ getChildUpdatingMaxVersion(Node48 *self, std::span<const uint8_t> &remaining,
return nullptr;
}
Node *c = self->children[i];
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
if (c->partialKeyLen > 0) {
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
}
}
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
self->childMaxVersion[i] = maxVersion;
@@ -1285,11 +1291,13 @@ getChildUpdatingMaxVersion(Node256 *self, std::span<const uint8_t> &remaining,
return nullptr;
}
Node *c = n;
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
if (c->partialKeyLen > 0) {
int commonLen = std::min<int>(c->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
if (partialKeyIndex < c->partialKeyLen) {
return nullptr;
}
}
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
self->childMaxVersion[index] = maxVersion;