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